so文件(1)簡單的導出使用
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文件中,找不出來,但是不影響,可以編譯執行。
so文件(1)簡單的導出使用