前段时间公司的SDK开发,核心逻辑要改用C/C++(花了点时间把还给老师的,重新拾回),我就把NDK开发相关资料文档整理一下方便你我他。
预备概念:
JNI:
它提供了若干的API实现了Java和其他语言的通信(主要是C/C++),这是JAVA层面的标准,我的理解就是C/C++调用这些接口转换成JAVA能“听”得懂的语言
NDK:
我的理解就是Android里Java和C/C++通信所需要的开发环境工具包(类似于使用JAVA要用JDK)
CMake:
我的理解就是编译工具,类似于Android Studio里的Gradle
如果我理解错误,希望指出。
准备动作:
首先国际惯例最权威官方:googlesamples/android-ndk
CMake:
Android Studio 2.2 更方便地创建JNI项目-CMake
JNI:
Android JNI编程—JNI基础
Android JNI编程—JNI函数大全
C/C++:
以前同事,曾经的黑客推荐的几本书和在线文档
在线文档:
C文档
C++文档
C 语言标准函数库速查
C++ 教程(如果不适应cppreference的目录结构可参考这个)
C++ 11 学习
PDF电子书下载:
C语言入门经典.pdf
C.Primer.Plus中文版.pdf
C++11中文版.pdf
起飞:
Android NDK 开发之旅,我只能帮到你这,有googlesamples的例子,有基础概念,有C/C++文档。接下来只能靠你自己了,Just do IT.
C++代码调试:
我的C++代码在Lib,无法直接调试需要特别设置
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目录,才会生效
后记:
为什么不整理写一篇完整教程呢?我觉得没必要,都是一些概念性的东西和流程化,写了也只是大同小异。所以直接引用