【NDK系列】AS项目添加C/C++代码

6 篇文章 0 订阅

项目添加 C 和 C++ 代码

创建新的Native工程

勾选支持c++即可,生成的项目结构如下:
在这里插入图片描述

现有工程中添加Native代码

  • 创建cpp目录:在src/main目录下创建cpp目录;
  • 创建cpp文件:New > C/C++ Source File,想要创建头文件需勾选 Create an associated header 复选框;
  • 创建CMakeLists.txt:在module根目录下创建txt文件;
  • 关联gradle:见【使用GUI关联gradle】和【手动关联gradle】两个章节;
  • 应用更改和更新:首次关联CMakeLists.txt或者Android.mk之后,需点击Sync Project 图标应用修改;后面修改相关脚本后应该从菜单栏中依次选择 Build > Refresh Linked C++ Projects将更改进行同步。

使用GUI关联gradle

在module根目录右键,选择 Link C++ Project with Gradle,可以选择CMake 或 ndk-build。如果选择CMake则需指定CMakeLists.txt 脚本文件,如果选择 ndk-build指定Android.mk 脚本文件(如果 Application.mk 文件与您的 Android.mk 文件位于同一目录下,Android Studio 也会包含此文件)

在这里插入图片描述
在这里插入图片描述

手动关联gradle

只需将 externalNativeBuild 块添加到模块级 build.gradle 文件中,并使用 cmakendkBuild 块对其进行配置:

android {
  ...
  defaultConfig {...}
  buildTypes {...}

  // Encapsulates your external native build configurations.
  externalNativeBuild {

    // Encapsulates your CMake build configurations.
    cmake {

      // Provides a relative path to your CMake build script.
      path "CMakeLists.txt"
    }
    // or ndkBuild {...}
  }
}

还支持利用变体为每个变体指定可选配置:

android {
  ...
  defaultConfig {
    ...
    // This block is different from the one you use to link Gradle
    // to your CMake or ndk-build script.
    externalNativeBuild {

      // For ndk-build, instead use the ndkBuild block.
      cmake {

        // Passes optional arguments to CMake.
        arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"

        // Sets a flag to enable format macro constants for the C compiler.
        cFlags "-D__STDC_FORMAT_MACROS"

        // Sets optional flags for the C++ compiler.
        cppFlags "-fexceptions", "-frtti"
      }
    }
  }

  buildTypes {...}

  productFlavors {
    ...
    demo {
      ...
      externalNativeBuild {
        cmake {
          ...
          // Specifies which native libraries or executables to build and package
          // for this product flavor. The following tells Gradle to build only the
          // "native-lib-demo" and "my-executible-demo" outputs from the linked
          // CMake project. If you don't configure this property, Gradle builds all
          // executables and shared object libraries that you define in your CMake
          // (or ndk-build) project. However, by default, Gradle packages only the
          // shared libraries in your app.
          targets "native-lib-demo",
                  // You need to specify this executable and its sources in your CMakeLists.txt
                  // using the add_executable() command. However, building executables from your
                  // native sources is optional, and building native libraries to package into
                  // your app satisfies most project requirements.
                  "my-executible-demo"
        }
      }
    }

    paid {
      ...
      externalNativeBuild {
        cmake {
          ...
          targets "native-lib-paid",
                  "my-executible-paid"
        }
      }
    }
  }

  // Use this block to link Gradle to your CMake or ndk-build script.
  externalNativeBuild {
    cmake {...}
    // or ndkBuild {...}
  }
}

CMakeLists.txt示例文件


# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.

cmake_minimum_required(VERSION 3.4.1)

# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add_library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.

add_library( # Specifies the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )

# Specifies a path to native header files.
include_directories(src/main/cpp/include/)

find_library( # Defines the name of the path variable that stores the
              # location of the NDK library.
              log-lib

              # Specifies the name of the NDK library that
              # CMake needs to locate.
              log )

# Links your native library against one or more other native libraries.
target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the log library to the target library.
                       ${log-lib} )

调试原生代码

使用 LLDB 来调试代码

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,您需要将您的 C 代码编写好,并确保它可以在 Android 平台上编译通过。 然后,您需要在 Android Studio 中配置 NDK。在 Android Studio 中,选择 File -> Project Structure,然后选择 SDK Location。在这个页面中,您可以看到 NDK 的路径,如果您还没有安装 NDK,可以点击 Download,然后选择需要下载的版本。 接下来,您需要创建一个 JNI 文件夹,并将您的 C 代码放在其中。然后,在您的项目的 build.gradle 文件中添加以下行: ```gradle android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++11" // 如果需要的话 arguments "-DANDROID_PLATFORM=android-21", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_shared" } } } ... externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 在这个文件中,您需要指定您的 CMakeLists.txt 文件的路径,并设置一些 CMake 变量来指定您的 NDK 版本、工具链和 STL 库。 最后,在您的 CMakeLists.txt 文件中,您需要指定您的 C 代码的位置,并将其编译为共享库。例如: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library(mylibrary SHARED src/main/jni/mylibrary.c) target_link_libraries(mylibrary android log) ``` 这个示例假设您的 C 代码位于 src/main/jni/mylibrary.c 文件中,并且它将被编译为名为 mylibrary 的共享库。 您可以使用 Android Studio 的 Build -> Make Project 命令来编译您的项目和 C 代码。如果一切顺利,您将在您的项目的 build/intermediates/cmake 目录中找到您的共享库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值