如何在Android Studio 2.2预览版中正确使用NDK-Build

16

Android Studio 2.2 Preview 1有一个新的外部NDK构建功能。但从官方博客文章中显示的app/build.gradle片段中,如何设置附加的NDK构建参数并不清楚,而这些参数通常包含在Application.mk文件中(参见enter image description here)。

我可以通过externalNativeBuild设置Android.mk NDK构建文件,但是我如何设置所需的Application.mk变量?

我的Application.mk包含:

NDK_TOOLCHAIN_VERSION := clang
APP_PLATFORM := android-16
APP_ABI := armeabi
APP_STL := c++_static
APP_CPPFLAGS += -std=c++11

3
目前似乎不可能实现这个功能。 - Michael
作为一个临时的妥协,你可以修改你的 $(NDK_ROOT)/ndk-build 来传递路径到你的 Application.mk。 - Alex Cohn
2个回答

10

Android Studio 2.2 预览版3增加了更新的Gradle插件,支持添加额外参数。您可以像这样设置Application.mk和其他配置:

defaultConfig {
  ndkBuild {
    arguments "NDK_APPLICATION_MK:=Application.mk"
    cFlags "-DTEST_C_FLAG1"  "-DTEST_C_FLAG2"
    cppFlags "-DTEST_CPP_FLAG2"  "-DTEST_CPP_FLAG2"
    abiFilters "armeabi-v7a", "armeabi"
  } 
}

如果可能的话,我建议迁移到CMake构建系统,因为在Android Studio中具有更好的C++代码编辑和调试集成。你可以在这里找到有关gradle插件配置的更多信息: https://sites.google.com/a/android.com/tools/tech-docs/external-c-builds.

编辑: 从Android Studio 2.2预览版5开始,您必须将cmakendkBuild分组包装在externalNativeBuild分组下:

defaultConfig {
  externalNativeBuild {
    ndkBuild {
      targets "target1", "target2"
      arguments "NDK_APPLICATION_MK:=Application.mk"
      cFlags "-DTEST_C_FLAG1", "-DTEST_C_FLAG2"
      cppFlags "-DTEST_CPP_FLAG2", "-DTEST_CPP_FLAG2"
      abiFilters "armeabi-v7a", "armeabi"
    } 
  }
}

编辑2:似乎在externalNativeBuild组下包装ndkBuild不起作用,因为构建工具中存在一个错误。


2
虽然这可能存在于预览版中,但在插件的2.2.0或2.2.1版本中不存在。 - Cameron Lowell Palmer
@Cameron Lowell Palmer,这是存在的,你只需要将ndkbuild组包裹在externalNativeBuild组中。请查看我对答案的编辑。 - Tadas
@Tadas 你是否真的测试过2.2.0或2.2.1版本? - Cameron Lowell Palmer
@CameronLowellPalmer 我只在 cmake 2.2.0 - 2.2.2 版本组上进行了测试。我没有使用 ndkBuild 进行测试,但应该可以工作。 - Tadas

1

add-native-code

可以翻译为:

{{链接1:添加本地代码}}


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"
    }
  }
}

请注意:如果您想将Gradle链接到现有的ndk-build项目,请使用ndkBuild {}块而不是cmake {},并提供Android.mk文件的相对路径。如果Application.mk文件与Android.mk文件位于同一目录中,则Gradle还会包括Application.mk文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接