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檔案中,找不出來,但是不影響,可以編譯執行。