Einrichten von JNA in Android Studio
Ich versuche, jna.jar in mein Projekt zu importieren, seit JNA ist ein sehr nützliches Tool zum Aufrufen der Native Library, die auf JNI basiert.
OS: Windows 10
IDE: Android Studio 1.5.1
JDK: 1.8.0_73
NDK: r10e
Was habe ich geta (AS = Android Studio)
Erstelle ein neues Projekt von AS mit API18.
Laden Sie jna.jar von ihrem GitHub herunter.
https: //github.com/java-native-access/jn
copy jna.jar in den Projektordner.JNATest \ app \ libs \ jna.jar
Klicken Sie in AS mit der rechten Maustaste auf das Symbol von jna.jar und wählen Sie Als Bibliothek hinzufügenWarten Sie einige Sekunden, und überprüfen Sie Datei-> Projektstruktur-> Anwendung-> Abhängigkeiten. Wir haben die jna.jar. (Wie app \ build.gradle)build gradleImplementieren Sie JAVA-Code zu JNA in MainActivity.java Run App auf echtem Gerät Sony Z3 (Arm)Crash vonCLibrary.Instance.printf("Hello, JNA");
Fehlermeldung auf Android Monitor
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
Java Code
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);
}
}
Frag
aut Fehlermeldung vermisse ich/android-arm/libjnidispatch.so
in Runtime.
Habe ich den falschen Ort für jna.jar angegeben?
Wie soll ich @ bekommen und verwende/android-arm/libjnidispatch.so
?
Ich bin ein Neuling in Android Studio, also missverstehe ich vielleicht etwas Wesentliches.