如何在实验gradle中排除cpp文件?

时间:2015-09-01 12:39:13

标签: android c++ android-studio gradle android-ndk

我尝试使用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仍然尝试编译此文件。

我尝试了excludesexclude=+=并且没有任何内容,但没有排列有效。

3 个答案:

答案 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中所定义。