JNI&NDK是什么?
JNI本意為Java Native Interface(java本地接口)聪廉,為了方便java代碼與C/C++代碼之間的交互瞬痘。
NDK是Android提供的一個(gè)工具集,通過(guò)NDK可以更加方便的通過(guò)JNI來(lái)訪問(wèn)本地代碼板熊,生成本地動(dòng)態(tài)庫(kù)等框全。
為什么要使用JNI&NDK開發(fā)??jī)?yōu)勢(shì)在哪干签?
- 提高代碼的安全性竣况。so庫(kù)相對(duì)于java代碼反編譯更加困難。
- 方便使用一些已有的C/C++開源庫(kù)筒严,而且方便移植一些已有的C/C++實(shí)現(xiàn)的動(dòng)態(tài)庫(kù)丹泉。
- C/C++在某些情形下有更高的執(zhí)行效率。
除此之外鸭蛙,F(xiàn)ramework摹恨、熱修復(fù)以及時(shí)下較為火熱的音視頻開發(fā),無(wú)不充斥著JNI/NDK與C/C++的使用娶视,可以說(shuō)這是android開發(fā)進(jìn)階永遠(yuǎn)也繞不過(guò)的一個(gè)坎晒哄。
實(shí)踐場(chǎng)景
- 場(chǎng)景一:已有C/C++代碼,需要在java中調(diào)用這些C/C++中的方法肪获。
JNI&NDK開發(fā)最佳實(shí)踐(二):CMake實(shí)現(xiàn)調(diào)用已有C/C++文件中的本地方法 - 場(chǎng)景二:已有so庫(kù)寝凌,需要在java中調(diào)用so庫(kù)中的方法。
JNI&NDK開發(fā)最佳實(shí)踐(三):CMake實(shí)現(xiàn)調(diào)用已有so庫(kù)中的本地方法
方案
JNI or NDK?
NDK是Android為了更方便使用JNI而提供的一個(gè)工具集孝赫,免去了繁瑣的命令行操作较木。這里為大家提供一個(gè)JNI與NDK的實(shí)例,大家可以很直觀的感受到二者在使用上的區(qū)別青柄。
Make or CMake?
?CMake是一個(gè)比make更高級(jí)的編譯配置工具伐债,它可以根據(jù)不同平臺(tái)、不同的編譯器致开,生成相應(yīng)的Makefile或者vcproj項(xiàng)目峰锁。從而達(dá)到跨平臺(tái)的目的。Android Studio利用 CMake生成的是ninja双戳,ninja是一個(gè)小型的關(guān)注速度的構(gòu)建系統(tǒng)虹蒋。我們不需要關(guān)心ninja的腳本,知道怎么配置cmake就可以了。從而可以看出cmake其實(shí)是一個(gè)跨平臺(tái)的支持產(chǎn)出各種不同的構(gòu)建腳本的一個(gè)工具魄衅。
CMake的腳本名默認(rèn)是CMakeLists.txt峭竣。
更多JNI&NDK系列文章,參見:
JNI&NDK開發(fā)最佳實(shí)踐(一):開篇
JNI&NDK開發(fā)最佳實(shí)踐(二):CMake實(shí)現(xiàn)調(diào)用已有C/C++文件中的本地方法
JNI&NDK開發(fā)最佳實(shí)踐(三):CMake實(shí)現(xiàn)調(diào)用已有so庫(kù)中的本地方法
JNI&NDK開發(fā)最佳實(shí)踐(四):JNI數(shù)據(jù)類型及與Java數(shù)據(jù)類型的映射關(guān)系
JNI&NDK開發(fā)最佳實(shí)踐(五):本地方法的靜態(tài)注冊(cè)與動(dòng)態(tài)注冊(cè)
JNI&NDK開發(fā)最佳實(shí)踐(六):JNI實(shí)現(xiàn)本地方法時(shí)的數(shù)據(jù)類型轉(zhuǎn)換
JNI&NDK開發(fā)最佳實(shí)踐(七):JNI之本地方法與java互調(diào)
JNI&NDK開發(fā)最佳實(shí)踐(八):JNI局部引用徐绑、全局引用和弱全局引用
JNI&NDK開發(fā)最佳實(shí)踐(九):調(diào)試篇