前段時間公司的SDK開發(fā)叫惊,核心邏輯要改用C/C++(花了點時間把還給老師的款青,重新拾回),我就把NDK開發(fā)相關資料文檔整理一下方便你我他霍狰。
預備概念:
JNI:
它提供了若干的API實現(xiàn)了Java和其他語言的通信(主要是C/C++)抡草,這是JAVA層面的標準,我的理解就是C/C++調(diào)用這些接口轉(zhuǎn)換成JAVA能“聽”得懂的語言
NDK:
我的理解就是Android里Java和C/C++通信所需要的開發(fā)環(huán)境工具包(類似于使用JAVA要用JDK)
CMake:
我的理解就是編譯工具蚓耽,類似于Android Studio里的Gradle
如果我理解錯誤渠牲,希望指出。
準備動作:
首先國際慣例最權威官方:googlesamples/android-ndk
CMake:
Android Studio 2.2 更方便地創(chuàng)建JNI項目-CMake
JNI:
Android JNI編程—JNI基礎
Android JNI編程—JNI函數(shù)大全
C/C++:
以前同事步悠,曾經(jīng)的黑客推薦的幾本書和在線文檔
在線文檔:
C文檔
C++文檔
C 語言標準函數(shù)庫速查
C++ 教程(如果不適應cppreference的目錄結(jié)構可參考這個)
C++ 11 學習
PDF電子書下載:
C語言入門經(jīng)典.pdf
C.Primer.Plus中文版.pdf
C++11中文版.pdf
起飛:
Android NDK 開發(fā)之旅签杈,我只能幫到你這,有googlesamples的例子,有基礎概念答姥,有C/C++文檔铣除。接下來只能靠你自己了,Just do IT.
C++代碼調(diào)試:
我的C++代碼在Lib鹦付,無法直接調(diào)試需要特別設置
How to trace code in native lib?
In app/build.gradle, add compile dependency for debug and release builds with:
debugCompile project(path: ':your-lib', configuration: 'debug')
releaseCompile project(path: ':your-lib', configuration: 'release')
in lib(s)/build.gradle, enable publishNonDefault:
android {
publishNonDefault true
}
添加符號表:(非必要步驟)
Run > Edit Configuration > select 'Debugger' tab
add symbol directory of your debug symbol placed.
in my case, that was LIB_MODULE/.externalNativeBuild
多個Module輸出多個so庫:
# linking log lib to our native lib
# once you find the library, you have to link that library with your native library
# target_link_libraries structure: target_link_libraries(you_native_lib lib_found_using_find_library)
target_link_libraries(my_lib_name ${log-lib})
CMakeLists重命名so后尚粘,需要clean項目,刷新C++敲长。刪除 build 和 .externalNativeBuild目錄郎嫁,才會生效
后記:
為什么不整理寫一篇完整教程呢?我覺得沒必要祈噪,都是一些概念性的東西和流程化泽铛,寫了也只是大同小異。所以直接引用