Configurar JNA en Android Studio
Intento importar jna.jar en mi proyecto desdeJNA es una herramienta muy útil para llamar a la biblioteca nativa que se basa en JNI.
SO: Windows 10
IDE: Android Studio 1.5.1
JDK: 1.8.0_73
NDK: r10e
Que he hecho (AS = Android Studio)
Cree un nuevo proyecto de AS con API18.
Descarga jna.jar desde su GitHub.
https://github.com/java-native-access/jna
Copie jna.jar en la carpeta del proyecto.JNATest \ app \ libs \ jna.jar
En AS, haga clic derecho en el icono de jna.jar, elijaAgregar como bibliotecaEspere unos segundos, verifique Archivo-> Estructura del proyecto-> aplicación-> Dependencias. Tenemos el jna.jar. (Igual que app \ build.gradle)construir gradleImplemente código JAVA sobre JNA en MainActivity.javaEjecutar aplicación en dispositivo real Sony Z3 (brazo)Choque porCLibrary.Instance.printf("Hello, JNA");
Mensaje de error en el monitor de 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.
¿Puse el lugar equivocado para jna.jar?
¿Cómo debo obtener y usar/android-arm/libjnidispatch.so
?
Soy un novato en Android Studio, así que tal vez no entiendo algo clave.