我尝试使用Android Studio 1.3.1使用实验性gradle语法编译NDK项目。
我的build.gradle
看起来非常像Teapot example
除了我的源代码树有一些我不想包含在构建中的文件。 我无法移除这些文件,因此我需要使用gradle来忽略它们。
我尝试添加exclude
定义:
android.sources {
main {
jni {
source {
srcDirs 'src/main/jni'
excludes += "src/main/jni/FileToExclude.cpp"
}
}
}
}
但这并未影响结果。 gradle仍然尝试编译此文件。
我尝试了excludes
,exclude
与=
,+=
并且没有任何内容,但没有排列有效。
答案 0 :(得分:10)
根据我的发现,从构建中排除文件的正确指令是排除,而不是排除。检查你的build.gradle以确保你没有在这里犯错(你在提供的样本中使用了排除)。
更新好的,经过一些研究后,我在AOSP问题跟踪器上找到了this thread。主题启动器说明如下:
源集的java / resources组件允许包含/排除模式。
我们应该为aidl / rs / jni / assets做这件事。
问题仍然存在,所以我认为这个功能必须在Android Gradle插件或Android Studio中实现,或者在两者中实现(并且还没有实现)。它将在Android Studio 1.5中实现,至少这是标记所说的内容。
答案 1 :(得分:0)
由于它仍处于试验阶段,因此Gradle Experimental上没有太多文档。但通过一些实验,我能够挖掘出如何排除某些文件的方法,即:
model {
//...
android.sources {
//...
jni {
//...
source {
excludes.add("<FILE PATH>") // You can have multiple excludes.add(...)
}
}
}
}
注意:该解决方案适用于gradle-experimental 0.7.0
答案 2 :(得分:-1)
最简单的方法是在build.gradle中设置属性:
sourceSets.main.jni.srcDirs = [] // now, AS will not try to compile your source files
sourceSets.main.jniLibs.srcDirs = ['libs'] // now, AS will pick up the compiled SO files from libs (where ndk-build will normally put them)
您还可以定义一个“buildNative”任务,以运行ndk-build作为compileTask的一部分,如此answer中所定义。