Configurando o JNA no Android Studio
Eu tento importar o jna.jar para o meu projeto desdeJNA é uma ferramenta muito útil para chamar a biblioteca nativa, que é baseada no JNI.
SO: Windows 10
IDE: Android Studio 1.5.1
JDK: 1.8.0_73
NDK: r10e
O que eu fiz (AS = Android Studio)
Crie um novo projeto pelo AS com API18.
Faça o download do jna.jar no GitHub.
https://github.com/java-native-access/jna
copie o jna.jar na pasta do projeto.JNATest \ app \ libs \ jna.jar
No AS, clique com o botão direito do mouse no ícone do jna.jar, escolhaAdicionar como bibliotecaAguarde alguns segundos, verifique o Arquivo-> Estrutura do Projeto-> app-> Dependências. Nós temos o jna.jar. (O mesmo que app \ build.gradle)construir gradleImplementar código JAVA sobre JNA no MainActivity.javaExecutar aplicativo no dispositivo real Sony Z3 (braço)Crash byCLibrary.Instance.printf("Hello, JNA");
Mensagem de erro no 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
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);
}
}
Pergunta, questão
De acordo com a mensagem de erro, sinto falta/android-arm/libjnidispatch.so
em tempo de execução.
Coloquei o lugar errado para jna.jar?
Como devo obter e usar/android-arm/libjnidispatch.so
?
Eu sou um novato no Android Studio, então talvez tenha entendido algo errado.