android studio使用c++原生代码

参考官网教程https://developer.android.com/studio/projects/add-native-code.html#existing-project

使用 Android studio,你可以将 C 和 C++ 代码构建成 native library(即 .so 文件),然后打包到你的 APK 中。你的 Java 代码可以通过 Java Native Interface(JNI)调用 native library 库中的方法。
Android Studio 默认使用 CMake 编译原生库

下载 NDK 和构建工具

要编译和调试本地代码(native code),你需要下面的组件:

  • The Android Native Development Kit (NDK): 让你能在 Android 上面使用 C 和 C++ 代码的工具集。
  • CMake: 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
  • LLDB: Android Studio 上面调试本地代码的工具。

你可以使用 SDK Manager 来安装上述组件:

  1. 打开一个项目,从菜单栏中选择 Tools > Android > SDK Manager。
  2. 点击 SDK Tools 选项卡。
  3. 勾选 LLDB,CMake 和 NDK

创建支持 C/C++ 的新项目

创建一个支持 native code 的项目和创建普通的 Android studio 工程很像。但是有几点需要留意的地方:

  1. 在 Configure your new project 选项中,勾选 Include C++ Support 选项 ,
    点击 Next,后面的流程和创建普通的 Android studio 工程一样。
    当 Android Studio 完成新项目创建后,打开 Project 面板,选择 Android 视图。Android Studio 会添加 cpp 和 External Build Files 目录。
    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

当你点击 Run 按钮,Android Studio 会编译并启动一个 APP ,然后在 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功能。

如果你想验证一下 Gradle 是否将 native library 打包进了 APK,你可以先
Build (apk)再使用 APK Analyzer:

  1. 选择 Build > Analyze APK。
  2. 从 app/build/outputs/apk/ 路径中选择 APK,并点击 OK。
  3. 如下图,在 APK Analyzer 窗口中,选择 lib/<ABI>/,你就可以看见 libnative-lib.so 。

如果你想添加多个c/c++文件可以在 CMake 脚本:CMakeLists.txt文件中配置

默认生成的so文件在app/build//intermediates/cmake/*下面找到

如果想把生成的so库按照你在 build.gradle 指定的 abi分别放置在 jniLibs下可以在CMakeLists.txt文件中指定:

关于 更多CMake的教程 可以参考这里的翻译https://blog.csdn.net/fuming0210sc/article/details/785908

qihong lu

发表评论