1. 程式人生 > >Android匯出so檔案

Android匯出so檔案

1.建立工程生成c++,包名為com.cc.test_socreator,內容:

此時可以在MainActivity中使用程式碼呼叫stringFromJNI:

可以在jniTest中呼叫getString:

2.生成so檔案

Build-make project在沒有報錯,工程建立以後會在build-intermediates-cmake-debug下生成so。

簽名以後就會生成release資料夾,release版本在其資料夾下面。

3.引入到工程

建立工程com.cc.test_socreator,只需要在app-build.gradle下的android中增加五行程式碼:

在該工程的預設MainActivity下使用,報錯:

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.cc.test_importso.MainActivity.stringFromJNI() (tried Java_com_cc_test_1importso_MainActivity_stringFromJNI and Java_com_cc_test_1importso_MainActivity_stringFromJNI__).

原因是jni在Android中的引用存在命名規則,比如函式名Java_com_cc_test_1importso_MainActivity_stringFromJNI,但是so檔案中的函式名不是是第一個工程…test_1socreator…。

解決辦法是建立一個包名和so檔案中的包名相同.

在jniTest中使用getString()方法,返回”nice to meet u”。

此時getString會報錯,因為該方法在so檔案中,找不出來,但是不影響,可以編譯執行。