Pregunta

Intento usar el paquete PocketsPhinx para mi aplicación y necesito cambiar el nombre de paquete de demostración Nombre para algo útil (por ejemplo, com.myname.foo)

Pasé horas descubriendo, pero simplemente no puedo hacer que funcione.

El problema es que el proyecto funciona bien si dejo el nombre del paquete y funciona sin ningún problema (aparte de bloqueos aleatorios), pero cuando lo renombo, recibo el error

FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: new_Config__SWIG_0

Ya intenté modificar el comando SWIG, pero tampoco funcionó.

¿Algunas ideas?

Solo cambié la declaración del nombre del paquete del manifiesto y la carpeta de paquete de la actividad normal.

¿Fue útil?

Solución 2

Entonces, encontré el problema; Paso 20 horas solo para averiguarlo, que realmente olvidé agregar

static {
    System.loadLibrary("pocketsphinx_jni");
}

a la clase de actividad. No puedo creer que no haya visto eso, ¡pero gracias por todas las respuestas! +1 para todos los ayudando:

Otros consejos

Debe cambiar en el lado C/C ++, hay dos formas posibles dependiendo de cómo se implementa su JNI.

A. El nombre de la función contiene el classpath completo

    JNIEXPORT jlong JNICALL Java_"package with underscore instead of .""clase""method"(JNIEnv *env, jclass class,...

p.ej

    JNIEXPORT jlong JNICALL Java_com_android_mms_transaction_NativeSms_send(JNIEnv *env, jclass class,...

Método de coincidencia Enviar en clase Nativesms en el paquete com.android.mms.transaction

B. Hay una cadena suministrada a Dalvik/Javavm con el classpath. Busque algo así:



    static int registerMethods(JNIEnv* env) {
    static const char* const kClassName =
        "com/example/android/platform_library/PlatformLibrary";
    jclass clazz;

    /* look up the class */
    clazz = env->FindClass(kClassName);
    if (clazz == NULL) {
        LOGE("Can't find class %s\n", kClassName);
        return -1;
    }

    /* register all the methods */
    if (env->RegisterNatives(clazz, gMethods,
            sizeof(gMethods) / sizeof(gMethods[0])) != JNI_OK)
    {
        LOGE("Failed registering methods for %s\n", kClassName);
        return -1;
    }
    ...

Editar 2011-12-07 Primer ejemplo aclarado

Si tiene un problema de comando de enlace, es más probable que haya olvidado cambiar las propiedades de lanzamiento de SWIG. El archivo es

.ExternalToolBuilders/Swig.Launch

Esas propiedades tienen varios lugares para mencionar el paquete edu.cmu.sphinx.

Si cambió algo, se recomienda describir los cambios con mayor precisión. Lo más probable es que olvides algo pequeño. Por ejemplo, puede empacar el código completo cambiado en el archivo y cargarlo en algún lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top