Gradle NDK在生成的Android.mk中指定'include'指令

时间:2014-05-29 13:59:49

标签: android opencv android-ndk gradle

当你有

android {
  defaultConfig {
    ndk {
                moduleName "yourlib"
                stl "stlport_static"
                ldLibs "log", "z", "m"
                cFlags "-I/some/include/dir/"
        }
    ...
  }
  ...
}

在build.gradle中然后Gradle将编译src / main / jni /中的文件,它将在build / ndk / debug / Android.mk中生成一个Android.mk。

但是,就我而言,我正在尝试编译一些针对OpenCV编译的C ++文件。

当我手动创建Android.mk文件并运行ndk-build命令时,我有这个工作。但我希望自动通过Gradle / Android Studio来实现。

手动执行此操作时,我会包含要链接的库。我在手动创建的Android.mk中使用以下行执行此操作:

include /path/to/the/opencv/directory/sdk/native/jni/OpenCV.mk

但是,在Android的Gradle插件中,我不确定如何在生成的Android.mk文件中添加此“include”指令。

有人能指出我正确的Gradle指令方向将此行添加到生成文件中吗?感谢。

1 个答案:

答案 0 :(得分:8)

我发现构建过程会从./src/main/jni文件夹下面提取所有内容。所以,我已经将符号链接放在其他地方包含和src文件夹 - src文件将由构建过程枚举到.mk文件中,并且编译器将刷新inc文件。也许它有点hacky:

android {
    defaultConfig {
        ndk {
            moduleName "yourlib"
            cFlags "-std=c99 -I${project.buildDir}/../src/main/jni/inc"
        }
        ...
    }
    ...
}

我也有不同的cFlags,具体取决于调试版本。这似乎是有效的gradle,但不想用android-studio构建。它将使用gradlew命令构建:

android {
    defaultConfig {
        ndk {
            moduleName "yourlib"
            cFlags "-std=c99 -I${project.buildDir}/../src/main/jni/inc"
        }
        ...
    }
    ...
    buildTypes {
        release {
            debuggable false
            jniDebugBuild false
            ndk {
                moduleName "yourlib"
            }
        }
        debug {
            debuggable true
            jniDebugBuild true
            ndk {
                moduleName "yourlib"
                ldLibs "log"
                cFlags "-g -D_DEBUG"
            }
        }
    }
}

我希望它可以帮到你(android-studio 0.8.6)。