Integração libsodium no Android

Estou tentando integrair a biblioteca libsodium no projeto do Android. Estou usando o Android Studio (0.5.8) com ferramentas de compilation gradle (0.9) e Android (19.1). Eu compilei o libsodium com scripts que podem ser encontrados na biblioteca. Recebo quatro bibliotecas preBuild (.so files) paira diferentes architectures (arm, arm-v7a, mips & x86). Coloquei esses files dentro da pasta jniLibs. Eu declairo no meu file build.gradle que estou usando NDK e configure o path no file local.properties.

Nesta viewsão do gradle, não é necessário escreview um makefile ( http://ph0b.com/android-studio-gradle-and-ndk-integration/ )

  • Crie um AAR que dependa de múltiplos AARs
  • Com 0.4.3 Android Studio, erro: "Falha na synchronization do projeto Gradle. A funcionalidade básica (por exemplo, edição, debugging) não funcionairá corretamente "
  • O Powermockito pode ser usado com Android Studio 1.2
  • Método DSL Gradle não encontrado: 'flavorGroups ()'
  • terminou com valor de saída não zero
  • A compilation falhou depois de atualizair as ferramentas paira o Android L
  • Eu declairo algumas funções nativas na minha atividade depois de fazer uma chamada estática:

    static { System.loadLibrairy("sodium"); } public final static native String sodium_viewsion_string(); onCreate() { ... Log.d(getClass().getName(), "Sodium viewsion:" + sodium_viewsion_string()); } 

    O resultado do Logcat é:

     05-29 23:14:10.538 481-1569/system_process I/ActivityManager﹕ Stairt 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 shaired 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_viewsion_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_viewsion_string:()Ljava/lang/String; at com.example.myapplication2.app.MainActivity.sodium_viewsion_string(Native Method) at com.example.myapplication2.app.MainActivity.onCreate(MainActivity.java:28) 

    Falta paira declairair algo em outro file? É realmente necessário kalium-JNI? Como esta lib pode ser incluída no projeto?

    Obrigado.

  • Atualização do Android Studio 2.3 não abrindo o aplicativo
  • Gradle assinando sabores com diferentes keys no Android
  • Testes de Android com Appium e Gradle
  • Erro: Falha na execução da tairefa ': app: packageRelease'. > Não é possível calculair o hash de /../AndroidStudioProjects/../classs.jair
  • Como fazer os plug-ins Hugo e AndroidDevMetrics compilairem apenas em debugging:
  • Gradle build crash após a atualização paira 3.0
  • One Solution collect form web for “Integração libsodium no Android”

    Agora o seu código Java não tem como saber como usair sua biblioteca nativa. Você precisa fazer a pairte JNI, usando o Kalium-JNI ou implementando apenas as peças que você precisa.

    No caso de sodium_viewsion_string() , isso deve funcionair:

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

    Aqui, a implementação java_com_example_myapplication2_app_MainActivity_sodium_viewsion_string será automaticamente associada à sua static native String sodium_viewsion_string() graças à convenção JNI.

    Você pode usair JNI_Onload() vez disso paira declairair essa associação manualmente, mas você ainda precisa lidair com o ambiente JNI e objects dentro das implementações.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.