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