Intereting Posts

Gradle не может найти android_native_app_glue

У меня есть родная библиотека, которую я пытаюсь построить с помощью gradle. Если я вызываю команду ndk-build из файла gradle, я могу создать собственную библиотеку. Но если я попытаюсь использовать функцию построения ndk, встроенную в плагин android gradle, который я не могу построить.

Я получаю fatal error: android_native_app_glue.h: No such file or directory

Соответствующий раздел файла градиента:

 buildTypes.debug.jniDebugBuild true defaultConfig { ndk { moduleName 'myModule' stl 'gnustl_static' cFlags '-UNDEBUG -Werror -Wunused-variable -Wunused-but-set-parameter -Wtype-limits -Wmissing-field-initializers -Wreturn-type -Wuninitialized' ldLibs 'log', 'GLESv2' } productFlavors { armv7{ ndk { abiFilter 'armeabi-v7a' } } } } 

Есть ли способ сообщить ndk построить, где найти файл android_native_app_glue.h?

На боковой ноте, есть способ передать флаг verbose в ndk-build, эквивалент ndk-build V=1 ?

У меня была такая же проблема, и я исправил ее, добавив
"-I{path_to_android-ndk}/sources/android/native_app_glue"
CFlags, см. Здесь

Начиная с:

  • Gradle-экспериментальное: 0.6.0-альфа2
  • gradle-2.9-all.zip

Один из способов сделать это (или интегрировать любой код, который можно скомпилировать и связать как статическую библиотеку) – это создать в вашем проекте новый модуль и изменить файл градации этого модуля:

 apply plugin: 'com.android.model.library' Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig.with { minSdkVersion.apiLevel = 21 targetSdkVersion.apiLevel = 23 versionCode = 1 versionName = "0.0.1" } compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 } } android.ndk { moduleName = "native-activity" cppFlags.add("-Werror") ldLibs.addAll(["log", "android"]) stl = "gnustl_static" ldFlags.add("-c") } android.sources { main { jni { source { srcDir "${ndkDir}/sources/android/native_app_glue" } } } } } 

Затем в модуле gradle.mk вы должны просто добавить:

 apply plugin: 'com.android.model.application' Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') model { android { [...] } android.ndk { [...] cppFlags.add("-I${file("${ndkDir}/sources/android/native_app_glue")}".toString()) } android.sources { main { jni { dependencies { project ":native-activity" linkage "static" } } } } } dependencies { compile project(':native-activity') } 

Один из способов сделать это – добавить его в свой LOCAL_C_INCLUDES в Android.mk, например:

 LOCAL_C_INCLUDES += /path/to/ndk/sources/android/native_app_glue 

Убедитесь, что путь верен, выполнив ls on /path/to/ndk/sources/android/native_app_glue/native_app_glue.h