我目前在Android Studio中創建了一個項目,它使用JNA調用Native C++庫。在Android Studio上使用JNA自帶的庫
我按照說明在這裏:https://github.com/java-native-access/jna,
我下載了libjnidispatch.so從https://github.com/java-native-access/jna/tree/master/lib/native/android-x86-64.jar,
我加入了jna.jar庫到Android Studio項目,
我提取了libjnidispatch.so庫將其放入文件夾x86_64 on我jniLibs目錄,
我叫printf()函數,
public interface CLibrary extends Library
{
//---libjnidispatch---
void printf(String format, Object... args);
}
...
CLibrary demo = (CLibrary) Native.loadLibrary("c", CLibrary.class);
demo.prinft("Hello JNA !");
...
它成功運行。
Hello JNA !
然後,我想用我自己的庫。
我裝同樣的方式是這樣的:
#include <stdio.h>
int somme(int a, int b)
return a+b;
我編譯它像這樣(顯示GCC在Linux這裏):
gcc -c -Wall -Werror -fPIC foo.c
gcc -shared -o foo.so foo.o
的Java:
package com.example.guest.essai2;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import android.*;
import com.google.android.*;
public class MainActivity extends AppCompatActivity {
private GoogleApiClient client;
//--------------JNA----------------------
public interface Foo extends Library
{
//--foo----
int somme(int a, int b);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
System.setProperty("jna.library.path", "/home/guest/workspace/MyApplication/Essai2/app/src/main/jniLibs/x86_64/");
NativeLibrary.addSearchPath("foo", "/home/guest/workspace/MyApplication/Essai2/app/src/main/jniLibs/x86_64/");
Native.register(Foo.class,"foo");
Foo foo = (Foo) Native.loadLibrary("foo", Foo.class);
String msg = ""+foo.somme(2,3);
tv.setText(msg);
setContentView(tv);
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
}
但它不工作。
然後我試圖改變與severals企圖jna.library.path:每次
System.setProperty("jna.library.path", "/home/guest/workspace/MyApplication/Essai2/app/src/main/jniLibs/x86_64/");
NativeLibrary.addSearchPath("foo", "/home/guest/workspace/MyApplication/Essai2/app/src/main/jniLibs/x86_64/");
Native.register(Foo.class,"foo");
但是,我得到了以下錯誤:
java.lang.UnsatisfiedLinkError: Unable to load library 'foo': Native library (android-x86-64/libfoo.so) not found in resource path (.)
儘管有事實libfoo.so和libjnidispatch.so庫處於相同路徑。
到目前爲止,我卡住了。有沒有人設法使android studio與JNA和定製的C++庫一起工作。
非常感謝您提前。
使用系統屬性'jna.debug_load = true'運行,JNA將發出關於它在哪裏查找庫的調試信息。 – technomage
您能否指出我在Android Studio中的選項? – Lud23
我認爲,媒體鏈接做 我檢查了我的文件** ** studio64.vmoptions,我有: '-Djna.debug_load =真 -Djna.debug_load.jna = TRUE; – Lud23