1. 前言:
看C走了不少彎路, 單純的看看概念寫寫基礎(chǔ)代碼, 結(jié)果沒過多久就忘了, 索性重新快速過了一遍C, 先把基礎(chǔ)概念搞清楚, 知道是什么意思, 然后就打算正式開始入手NDK開發(fā), 在學(xué)習(xí)NDK開發(fā)的過程中順便再加深對C的學(xué)習(xí), 學(xué)習(xí)NDK開發(fā)并沒有找什么書籍, 就把B站的開源項(xiàng)目ijkplayer當(dāng)作輔助資料.
2.先寫一個(gè)示例代碼 :
先用as完成一個(gè)demo, 后續(xù)系列文章圍繞這個(gè)demo展開.
- 創(chuàng)建類JniUtils, 里面先創(chuàng)建一個(gè)本地方法.
public class JniUtils {
public native String getStringFromC();
}
- rebulild工程, 得到.class文件
-
在Terminal中執(zhí)行javah命令:
javah命令.png -
然后在debug路徑下生成了.h文件
頭文件路徑.png -
然后main路徑下新建jni目錄并將h文件剪切過來:
新建jni目錄.png -
在jni路徑下將.h文件復(fù)制生成.c文件, 并對方法進(jìn)行修改, 先完成一個(gè)生成so文件并成功調(diào)用的小demo, 至于語法, 后邊詳細(xì)分析:
編寫C文件.png - 在build.gradle文件中編寫so文件名與制定架構(gòu)下的so文件:
https://zhuanlan.zhihu.com/p/21359984 這篇文章對so的分析還不錯(cuò);
不同架構(gòu)下的so文件.png -
build gradle以后會(huì)在build文件夾下生成so文件, 然后復(fù)制到main目錄下:
生成的so文件.png -
應(yīng)用層這樣寫, 然后大功告成:
java層調(diào)用c代碼.png - 實(shí)現(xiàn)了java調(diào)用c代碼, 下一篇文章實(shí)現(xiàn)c調(diào)用java代碼;