Invocación de funciones JNI en el nombre del paquete de Android que contiene guión bajo

Estoy tratando de implementar la codificación MP3 en Android usando la biblioteca LAME siguiendo estas guías: Lame MP3 Encoder compile para Android http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on -Android-con-JNI

Sin embargo, estoy obteniendo un java.lang.UnsatisfiedLinkError que creo que podría deberse al hecho de que el nombre de mi paquete contiene un guión bajo que interpreta como un punto final.

Mirar mi código a continuación es probable que sea este problema y cómo puedo solucionarlo. ¿O hay algo más que causa esto? Gracias de antemano por cualquier ayuda.

Record.java :

package co.uk.ing_simmons.aberdeensoundsites;

public class Record extends Activity implements OnClickListener {

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

private native void initEncoder(int numChannels, int sampleRate, int bitRate, int mode, int quality);

private native void destroyEncoder();

private native int encodeFile(String sourcePath, String targetPath);

[.....]
}

wrapper.c :

void Java_co_uk_ing_simmons_aberdeensoundsites_Record_initEncoder(JNIEnv *env,
        jobject jobj, jint in_num_channels, jint in_samplerate, jint in_brate,
        jint in_mode, jint in_quality) {
[....]

Error de registro completo del gato :

04-17 20:58:36.009: E/AndroidRuntime(26768): FATAL EXCEPTION: main
04-17 20:58:36.009: E/AndroidRuntime(26768): java.lang.UnsatisfiedLinkError: initEncoder
04-17 20:58:36.009: E/AndroidRuntime(26768):    at co.uk.ing_simmons.aberdeensoundsites.Record.initEncoder(Native Method)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at co.uk.ing_simmons.aberdeensoundsites.Record.onCreate(Record.java:79)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.os.Looper.loop(Looper.java:123)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at android.app.ActivityThread.main(ActivityThread.java:3687)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at java.lang.reflect.Method.invoke(Method.java:507)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
04-17 20:58:36.009: E/AndroidRuntime(26768):    at dalvik.system.NativeStart.main(Native Method)
Respuesta 1

Debería seguir el guión bajo con el número 1. Entonces, si el nombre de su paquete contiene ing_simmons, su JNI se formaría así.

void Java_co_uk_ing_1simmons_aberdeensoundsites_Record_initEncoder

Esto también es cierto si tiene guiones bajos en cualquier otra parte de la llamada, como el nombre de la clase o el nombre del método en el archivo Java.

Respuesta: 2

Tengo un método privado genérico que realiza tareas comunes y es utilizado por otros métodos. El método genérico tiene condiciones if y else para admitir otros métodos que se llaman. Ejemplo: vacío privado ...

Me gustaría manejar errores con excepciones (sin marcar). Escuché que para cada tipo de excepción debería crear una subclase de Error o RuntimeException. ¿Cual es la diferencia?

Quiero adaptar slf4j con Logback en una aplicación heredada. Lo bueno es que la aplicación heredada tiene su propio marco de registro. Entonces, todo lo que tuve que hacer es alterar el marco de registro para iniciar sesión en slf4j ...

Estoy tratando de cambiar el color de la fuente que uso en mi aplicación. Pero lo que sea que pruebe, la fuente sigue siendo negra. Hice esta fuente usando la herramienta de fuente Hiero. Mi código es algo como esto: SpriteBatch ...