2014-10-22 3 views
4

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

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

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

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

Есть ли способ сказать НДК сборки, где найти android_native_app_glue.h файл?

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

+0

какая у вас minSdkVersion? для этого проекта должно быть не менее 9, если вы хотите использовать android_native_app_glue.h 'ldLibs 'android'' также может понадобиться. – ph0b

+0

У вас есть файл android_native_app_glue.h и в какой каталог вы его разместили? – AndroidGuy

ответ

3

Я была такая же проблема, и я установил его, добавив
"-I{path_to_android-ndk}/sources/android/native_app_glue"
в CFLAGS, see here

0

Один из способов сделать это, чтобы добавить их к LOCAL_C_INCLUDES в Android.mk, как это:

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

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

0

по:

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

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

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') 
} 
Смежные вопросы