Integración de libsodium en android

Estoy tratando de integrar libsodium biblioteca en el proyecto de Android. Estoy usando Android Studio (0.5.8) con gradle (0.9) y herramientas de compilación android (19.1). He compilado libsodium con scripts que se pueden encontrar en la biblioteca. Tengo cuatro libras preBuild (archivos .so) para diferentes arquitecturas (brazo, brazo-v7a, mips y x86). Pongo estos archivos dentro de la carpeta jniLibs. Declaro en mi archivo build.gradle que estoy usando NDK y configuro la ruta en el archivo local.properties.

En esta versión de gradle, no es necesario escribir un makefile ( http://ph0b.com/android-studio-gradle-and-ndk-integration/ )

Declaro algunas funciones nativas en mi actividad después de hacer una llamada estática:

static { System.loadLibrary("sodium"); } public final static native String sodium_version_string(); onCreate() { ... Log.d(getClass().getName(), "Sodium version:" + sodium_version_string()); } 

La salida de Logcat es:

 05-29 23:14:10.538 481-1569/system_process I/ActivityManager﹕ Start proc com.example.myapplication2.app.x86 for activity com.example.myapplication2.app.x86/com.example.myapplication2.app.MainActivity: pid=1584 uid=10056 gids={50056, 1028} 05-29 23:14:10.554 1584-1584/com.example.myapplication2.app.x86 D/dalvikvm﹕ Trying to load lib /data/app-lib/com.example.myapplication2.app.x86-2/libsodium.so 0xa4ed8520 05-29 23:14:10.562 1584-1584/com.example.myapplication2.app.x86 D/dalvikvm﹕ Added shared lib /data/app-lib/com.example.myapplication2.app.x86-2/libsodium.so 0xa4ed8520 05-29 23:14:10.562 1584-1584/com.example.myapplication2.app.x86 D/dalvikvm﹕ No JNI_OnLoad found in /data/app-lib/com.example.myapplication2.app.x86-2/libsodium.so 0xa4ed8520, skipping init 05-29 23:14:10.578 1584-1584/com.example.myapplication2.app.x86 W/dalvikvm﹕ No implementation found for native Lcom/example/myapplication2/app/MainActivity;.sodium_version_string:()Ljava/lang/String; 05-29 23:14:10.578 1584-1584/com.example.myapplication2.app.x86 D/AndroidRuntime﹕ Shutting down VM 05-29 23:14:10.578 1584-1584/com.example.myapplication2.app.x86 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa4c46648) 05-29 23:14:10.578 1584-1584/com.example.myapplication2.app.x86 E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsatisfiedLinkError: Native method not found: com.example.myapplication2.app.MainActivity.sodium_version_string:()Ljava/lang/String; at com.example.myapplication2.app.MainActivity.sodium_version_string(Native Method) at com.example.myapplication2.app.MainActivity.onCreate(MainActivity.java:28) 

¿He dejado de declarar algo en otro archivo? ¿Es realmente necesario kalium-JNI? ¿Cómo se puede incluir esta lib en el proyecto?

Gracias.

En este momento tu código Java no tiene forma de saber cómo usar tu biblioteca nativa. Necesita hacer la parte JNI, ya sea utilizando Kalium-JNI o ​​implementando sólo las partes que necesita.

En el caso de sodium_version_string() , esto debería funcionar:

 jstring java_com_example_myapplication2_app_MainActivity_sodium_version_string(JNIEnv* env, jclass cls) { return (env*)->NewStringUTF(env, sodium_version_string()); } 

Aquí la implementación de java_com_example_myapplication2_app_MainActivity_sodium_version_string se asociará automáticamente a la static native String sodium_version_string() gracias a la convención JNI.

En lugar de ello, puede utilizar JNI_Onload() para declarar manualmente dicha asociación, pero todavía necesita ocuparse del entorno JNI y de los objetos dentro de las implementaciones.

  • Android JNI ¿Cuál es el directorio de trabajo actual para C / C ++ ejecutado código?
  • ¿Hay alguna manera de permitir que Android NDK-build utilice una versión más reciente de gcc?
  • Android: Calling System.loadLibrary () hace que el proceso muera
  • Construir biblioteca compartida enlazando a otras bibliotecas no estándar compartidas
  • Android NativeActivity
  • Ejecutar el servidor NodeJs en Android
  • Cómo crear named pipe (mkfifo) en Android?
  • "Su APP_BUILD_SCRIPT apunta a un archivo desconocido: ./jni/Android.mk"
  • Manejo de excepciones de Android NDK
  • ¿Cómo configurar el punto de interrupción de C ++ en el kit de desarrollo nativo de Android (NDK) de Eclipse?
  • Ndk-build no se encuentra en Path
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.