Как правильно использовать NDK-Build в Android Studio 2.2 Preview 1

Android Studio 2.2 Preview 1 имеет новую внешнюю конструкцию ndk, но из app/build.gradle фрагмента, показанного в официальном сообщении в блоге, совсем не ясно, как установить дополнительные параметры построения ndk, которые Application.mk файл обычно содержит введите описание изображения здесь

Я могу установить файл сборки Android.mk ndk через externalNativeBuild, но как я могу установить требуемые переменные Application.mk?

My Application.mk содержит:

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

Ответ 1

Android Studio 2.2 Preview 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. Дополнительную информацию о конфигурации плагина gradle вы найдете здесь: https://sites.google.com/a/android.com/tools/tech-docs/external-c-builds.

Edit: Из Android Studio 2.2 Preview 5 вы должны обернуть группы cmake и ndkBuild в группе 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: Похоже, что обертка ndkBuild в группе externalNativeBuild не работает из-за ошибки в инструментах построения.

Ответ 2

add-native-code

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 файл. Gradle также включает файл Application.mk, если он находится в том же каталоге, что и ваш файл Android.mk.