2015-09-01 80 views
22

我正在尝试使用Android Studio 1.3.1编译使用实验gradle语法的NDK项目。如何排除实验gradle中的cpp文件?

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

随着'gradle这个实验性:0.3。 0','exclude'语法可用,请参阅http://stackoverflow.com/questions/32636150/define-local-src-files-in-ndk-dsl/32640823#32640823 –

回答

10

从我发现,正确的指令,以排除从构建文件是排除,不排除。检查你的build.gradle,以确保你没有犯这个错误(你使用在提供的示例中排除了)。

Upd:好的,经过一番调查,我在AOSP问题跟踪器上发现了this thread。主题首发说明如下:

源代码集的java/resources组件允许包含/排除模式。

我们应该为aidl/rs/jni/assets做到这一点。

问题仍然是开放的,所以我想这个功能必须在Android Gradle插件或Android Studio或两者都实现(并且尚未实现)。它将在Android Studio 1.5中实现,至少这是标签所说的内容。

+1

我做过了,请参阅上次编辑。 – shoosh

+1

@shoosh看起来还没有实现,请参阅更新后的答案。 – aga

+2

看起来你运气不好。除非你想构建你自己的gradle插件,否则你最好的选择是通过ndk-build使用Android.mk。 –

0

我看着android源代码,它看起来像你可以更新过滤器来排除你的文件。我不知道你使用的Gradle插件的版本是什么,所以我不能确定底层api是什么。您可以尝试手动设置PatternFilterable以排除文件。

android.sources { 
    main { 
     jni { 
      source { 
       srcDirs 'src/main/jni' 
       getFilter().exclude('**/FileToExclude.cpp') 
      } 
     } 
    } 
} 

我看着Gradle Code Review,看到正在使用LanguageSourceSet。查看LanguageSourceSet的Gradle文档,您可以访问SourceDirectorySet,该文档有PatternFilterable,您可以在其上设置排除。

-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,建设成为compileTask的一部分,在这个answer定义。

+0

这个答案与问题无关 – rockeye

0

由于它仍然是实验性的,所以Gradle实验没有太多文档。但也有一些实验,我能够挖如何排除某些文件的方式,即:

model { 
    //... 

    android.sources { 
     //... 

     jni { 
      //... 

      source { 
       excludes.add("<FILE PATH>") // You can have multiple excludes.add(...) 
      } 
     } 
    } 
} 

注:解决方案适用于gradle这个实验性0.7.0

相关问题