【问题标题】:Gradle unable to find android_native_app_glueGradle 找不到 android_native_app_glue
【发布时间】:2014-10-22 03:10:20
【问题描述】:

我有一个本地库,我正在尝试使用 gradle 构建它。如果我从 gradle 文件中调用 ndk-build 命令,我就能够构建本机库。但是,如果我尝试使用 android gradle 插件中内置的 ndk 构建功能,我将无法构建。

我收到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'
        }
      }
    }
}

有没有办法告诉 ndk 构建在哪里可以找到 android_native_app_glue.h 文件?

顺便说一句,有没有办法将详细标志传递给 ndk-build,相当于 ndk-build V=1

【问题讨论】:

  • 你的 minSdkVersion 是什么?如果你想使用 android_native_app_glue.h 这个项目至少需要 9 可能还需要ldLibs 'android'
  • 你有android_native_app_glue.h文件,你把它放在什么目录下?

标签: android android-ndk android-gradle-plugin


【解决方案1】:

我遇到了同样的问题,我通过将
"-I{path_to_android-ndk}/sources/android/native_app_glue"
添加到 cFlags、see here

来解决它

【讨论】:

    【解决方案2】:

    截至日期:

    • gradle-experimental:0.6.0-alpha2
    • 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')
    }
    

    【讨论】:

      【解决方案3】:

      一种方法是将其添加到 Android.mk 中的 LOCAL_C_INCLUDES 中,如下所示:

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

      通过在/path/to/ndk/sources/android/native_app_glue/native_app_glue.h 上执行ls 确保路径正确

      【讨论】:

        【解决方案4】:

        在您的 cMakeList.txt 文件中添加这些行

        //line1
        include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
        
        //line2
        add_library(native_app_glue STATIC
                ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
        

        还要在target_link_libraries 中添加native_app_glue

        只有点击RUNshift + F10

        才生效

        【讨论】:

          猜你喜欢
          • 2021-01-28
          • 2018-08-16
          • 2015-11-06
          • 2015-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多