通過cmake在Android中調用c語言,且三方應用通過so庫調用c語言


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庫里的路徑完全一樣。然后就可以成功調用了

 

 

 

參考demo:https://github.com/lelelongwang/TestApp


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM