以前在eclipse上玩过NDK,现在想在Android Studio试试NDK,看了网上的一些教程,大多数比较老,步骤过时。本文根据最新android Studio版本进行NDK的配置,并进行基本使用。
(1)安装NDK
从菜单栏中选择Tools > Android > SDK Manager。点击SDK Tools选项卡。勾选LLDB,CMake和NDK。1)The Android Native Development Kit (NDK): 让你能在 Android 上面使用 C 和 C++ 代码的工具集。
2)CMake: 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
3)LLDB: Android Studio 上面调试本地代码的工具。
等待下载,下载完成后自动配置,无需手工操作,果然亲儿子,的确方便。
(1)在Configure your new project选项中,勾选Include C++ Support选项。
(2)点击 Next,后面的流程和创建普通的 Android studio 工程一样。
(3)在Customize C++ Support选项卡中
你有下面几种方式来自定义你的项目:
C++ Standard:点击下拉框,可以选择标准 C++,或者选择默认 CMake 设置的Toolchain Default选项。
Exceptions Support:如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的cppFlags中添加-fexcetions标志。
Runtime Type Information Support:如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的cppFlags中添加-frtti标志。
(4)创建成功
cpp目录存放你所有 native code 的地方,包括源码,头文件,预编译项目等。对于新项目,Android Studio 创建了一个 C++ 模板文件:native-lib.cpp,并且将该文件放到了你的 app 模块的src/main/cpp/目录下。这份模板代码提供了一个简答的 C++ 函数:stringFromJNI(),该函数返回一个字符串:”Hello from C++”。
External Build Files目录是存放 CMake 或 ndk-build 构建脚本的地方。有点类似于 build.gradle 文件告诉 Gradle 如何编译你的 APP 一样,CMake 和 ndk-build 也需要一个脚本来告知如何编译你的 native library。对于一个新的项目,Android Studio 创建了一个 CMake 脚本:CMakeLists.txt,并且将其放到了你的 module 的根目录下。
编译运行成功后,在 APP 中显示一段文字”Hello from C++”。
从编译到运行示例 APP 的流程简单归纳如下:
1)Gradle 调用外部构建脚本,也就是CMakeLists.txt。
2)CMake 会根据构建脚本的指令去编译一个 C++ 源文件,也就是native-lib.cpp,并将编译后的产物扔进共享对象库中,并将其命名为libnative-lib.so,然后 Gradle 将其打包到 APK 中。
3)在运行期间,APP 的 MainActivity 会调用System.loadLibrary()方法,加载 native library。而这个库的原生函数,stringFromJNI(),就可以为 APP 所用了。
4)MainActivity.onCreate() 方法会调用stringFromJNI(),然后返回 “Hello from C++”,并更新 TextView 的显示。
注意:Instant Run并不兼容使用了 native code 的项目。Android Studio 会自动禁止Instant Run功能。
