android-studio jar android-ndk jna

Configurando JNA en Android Studio



android-studio jar (2)

Intento importar jna.jar en mi proyecto, ya que JNA es una herramienta muy útil para llamar a la biblioteca nativa que está basada en JNI.

Sistema operativo: Windows 10

IDE: Android Studio 1.5.1

JDK: 1.8.0_73

NDK: r10e

Lo que he hecho (AS = Android Studio)

  1. Crea un nuevo proyecto por AS con API18.
  2. descarga jna.jar desde su GitHub.

    https://github.com/java-native-access/jna

  3. copia jna.jar en la carpeta del proyecto.

    JNATest / app / libs / jna.jar

  4. En AS, haga clic con el botón derecho en el icono de jna.jar, elija Agregar como biblioteca
  5. Espere unos segundos, revise Archivo-> Estructura del proyecto-> aplicación-> Dependencias. Tenemos el jna.jar. (Igual que app / build.gradle) construir gradle
  6. Implementar código JAVA sobre JNA en MainActivity.java
  7. Ejecutar la aplicación en el dispositivo real Sony Z3 (brazo)
  8. Crash por CLibrary.Instance.printf("Hello, JNA");

Mensaje de error en el monitor Android

E/AndroidRuntime: FATAL EXCEPTION: main Process: i3d.jnatest, PID: 1068 java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.) at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:866) at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:826) at com.sun.jna.Native.<clinit>(Native.java:140) .. ... so on

Código JAVA

package i3d.jnatest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.sun.jna.Library; import com.sun.jna.Native; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CLibrary.Instance.printf("Hello, JNA"); } public interface CLibrary extends Library { CLibrary Instance = (CLibrary) Native.loadLibrary("msvcrt", CLibrary.class); void printf(String format, Object... args); } }

Pregunta

De acuerdo con el mensaje de error, extraño /android-arm/libjnidispatch.so en tiempo de ejecución.

  1. ¿Puse el lugar equivocado para jna.jar?
  2. ¿Cómo debo obtener y usar /android-arm/libjnidispatch.so ?

Soy un novato sobre Android Studio, así que tal vez malinterprete algo clave. Por favor, siéntete libre de darme una pista, gracias.


Encontré este comentario en un archivo en la biblioteca github repo - " Si está utilizando el complemento Eclipse de Google, entonces debe eliminar manualmente libjnidispatch.so de jna.jar / lib / armeabi y agregarlo al directorio libs / armeabi de su proyecto " .

Como este archivo se creó en 2012 y Android Studio todavía estaba en una fase muy temprana y no era muy popular en ese momento, supongo que podría ser una nota válida para Eclipse y también para Android Studio. Te sugiero que lo intentes.


ponga el archivo .so en el siguiente directorio (cuando use android studio): yourproject/app/src/main/jniLibs/armeabi-v7a/libjnidispatch.so