1、 新建JniUtils類實現native方法
2、 在build中執行clean project 再rebuild project 生成class文件。
注意:最新版本的AndroidStudio中classes文件的路徑是在\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes。而原來的版本classes路徑是在\app\build\intermediates\classes
3、 通過javah -jni 生成對應的.h文件
注意:
3.1、在執行該命令時要在classes路徑下執行,否則會報找不到JniUtils的類文件,且執行時不帶文件后綴
3.2、生成的.h文件也是在classes路徑下
.h路徑:
成功時:
失敗時:
4、 新建jni文件夾,把上述中的.h文件拷貝到jni文件夾下,且在jni路徑下新建一個c語言文件,實現.h中的方法(注意方法名要保持一致)
5、 接下來開始通過cmake生成so文件
5.1、把CMakeList.txt文件拷貝到app路徑下,注意CMakeList中的一些設置,在add_library中要設置需要編譯的源文件,在target_link_libraries中要設置輸出的so文件名,eg設置為serial_port則生成的so名為libserial_port。執行完之后,要右鍵app,選擇Link C++ project with grade
5.2、在app路徑下的build.gradle中配置cmake,且在JniUtils.java中設置System.loadLibrary注意libname為在CMakeList中設置的保持一致
5.3、點擊sync工程之后,在clean Project時,如果報如下錯誤,則重啟AndroidStudio試下,大概率的能成功clean
5.4、通過上步的clean Project之后,再Rebuild Project會生成so文件,路徑如下
6、 把上述生成的so庫拷貝到libs路徑下,運行即可。
7、三方應用如果也想調用上述的so文件方法如下
7.1、需要把so拷貝到libs路徑下,然后在app路徑下的build.gradle中的android里設置
7.2、也要創建對應的native方法,注意路徑要和so庫里的路徑完全一樣。然后就可以成功調用了