目前關于NDK開發(fā),Android Developer官網只提供了有限的文檔說明,缺乏更細致深入的介紹。這個專題結合筆者多年來的工作經驗缠劝,給大家講解更系統(tǒng)更深入的內容。通過閱讀本專題挤巡,可以避免常見的開發(fā)問題剩彬,提升NDK開發(fā)效率酷麦。
2020年我會利用周末時間持續(xù)更新這個專題矿卑,如果你正好要學習相關內容,可以關注并留下評論互動沃饶。
關于作者:12年移動端開發(fā)經驗母廷,現專注于C++開發(fā)轻黑。
使用場景
以下是我總結的NDK使用場景:
- 項目中要使用的開源庫代碼是C++的;
- 雙端開發(fā)(Android/iOS)中相同的重邏輯的部分可以由C++一套實現即可琴昆;
- 個別需要提升性能的場景氓鄙,C++代碼的執(zhí)行效率會比Java高出不少;
- 有加密要求的安全場景业舍;
Android上對接C++需要使用JNI抖拦;iOS的OC代碼可以和C++聯編,省去了寫JNI的過程舷暮。本專題會對JNI使用會有詳細的态罪、系統(tǒng)的說明。徹底避免大家在寫JNI的過程中下面,通過搜索引擎搜索個別問題去拼湊編寫JNI复颈。
概念
- 靜態(tài)庫(Static libraries):擴展名為“.a”的文件。靜態(tài)庫其實是個壓縮文件沥割,是所以C++編譯的目標文件的集合耗啦。
- 動態(tài)庫/共享庫(Shared libraries):擴展名為“.so”的文件。比方“l(fā)ibc++_shared.so”机杜,當代碼中多處loadLibrary時帜讲,只需要加載一次,在內存中可以共享椒拗,這便是稱之為共享庫的原因舒帮。打包到apk中的只能是動態(tài)庫。
- Java 原生接口 (JNI):JNI編寫看起來很簡單陡叠,但是對于新手來說會有很多坑玩郊,實際上這個專題大部分也是用來介紹JNI相關的內容。
官方入門指南
請先閱讀Android官方 NDK 入門指南枉阵。(英文不太好的同學可以切到中文译红。)
關于構建腳本
官方入門指南中介紹了構建Native代碼有兩種方式:
- ndk-build腳本
- CMake腳本
推薦初學者選擇使用CMake腳本構建。CMake是開源的跨平臺構建工具兴溜,是構建C++項目的利器侦厚。學會CMake后便在能各個系統(tǒng)構建相應系統(tǒng)的庫。
也就是說你可以使用CMake使用同一套腳本構建MAC拙徽、Windows刨沦、Linux、Android和iOS等系統(tǒng)適用的庫膘怕。而ndk-build腳本僅僅只可以用來構建Android的庫想诅。
關于學習CMake,github上有個開源項目learning-cmake,我們剛開始只需要簡單的入門来破,不必太深入篮灼,因為對于構建大型項目來說,掌握CMake本身就需要花很長時間徘禁。