【发布时间】:2017-06-13 11:44:30
【问题描述】:
我正在使用带有 Google Drive 的 Android Studio,这会使隐藏的系统文件可见(例如 Icon 和 desktop.ini),从而导致错误,如 here 所述。我不想运行脚本来删除这些文件,而是指示 gradle 2.14 忽略它们。
为了弄清楚如何排除文件,我在目录\app\src\main\res\values 和\app\src\main\java\com\hfad\stopwatch\ 中创建了名为“excludeme.txt”的文件。我尝试对项目中的两个build.gradle 文件进行各种修改,但未成功。没有成功排除文件。
具体来说,我对Module: app 的build.gradle 文件进行了以下修改,每个this question:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'], excludes: ['**/excludeme.txt'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
}
我还将其添加到同一 build.gradle 文件的 android 部分,每个 this question:
aaptOptions {
ignoreAssetsPattern "!excludeme.txt"
}
我还补充了:
sourceSets {
main {
java {
srcDir "src" [I also tried w/o this line]
exclude "**/excludeme.txt"
}
}
}
当我选择触发构建的Build > Clean Project 时,我得到了这个输出,这表明资源文件夹中的文件没有被忽略:
Information:Gradle tasks [clean, :app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]
C:\Users\Ellen\GoogleDrive\Ellen-CS115\AndroidStudioProjects\Stopwatch\app\src\main\res\values\excludeme.txt
Error:(1, 1) Error: Premature end of file.
Error:Execution failed for task ':app:mergeDebugResources'.
> C:\Users\Ellen\GoogleDrive\Ellen-CS115\AndroidStudioProjects\Stopwatch\app\src\main\res\values\excludeme.txt:1:1: Error: Premature end of file.
如果我去掉感叹号,结果是一样的:
aaptOptions {
ignoreAssetsPattern "!excludeme.txt"
}
如何正确指示 gradle 在构建 Android 项目时忽略包含特定模式的文件?
更新 1
根据下面 Stefan 的建议,我将以下内容添加到 build.gradle 文件中,用于 Module: app:
android {
[omitted]
sourceSets.main.res.exclude '**/whatever.txt'
}
我在res/layout 目录中添加了一个名为whatever.txt 的文件,构建失败:
Error:Execution failed for task ':app:mergeDebugResources'.
> C:\Users\Ellen\GoogleDrive\Ellen-CS115\AndroidStudioProjects\Starbuzz\app\src\main\res\layout\whatever.txt: Error: The file name must end with .xml
更新 2
根据 Nathan 的建议,我补充说:
packagingOptions {
exclude '**/whatever.txt'
exclude 'src/main/res/layout/whatever.txt'
}
在android 部分中的build.gradle (Module: app)。没有改善:
Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]
/Users/spertus/GoogleDrive/Ellen-CS115/AndroidStudioProjects/MacTest/app/src/main/res/layout/whatever.txt
Error:Error: The file name must end with .xml
Error:Execution failed for task ':app:mergeDebugResources'.
> /Users/spertus/GoogleDrive/Ellen-CS115/AndroidStudioProjects/MacTest/app/src/main/res/layout/whatever.txt: Error: The file name must end with .xml
Information:BUILD FAILED
(最后一个版本是在 Mac 上,不像其他版本是在 Windows 上。)
【问题讨论】:
-
file trees 上的 Gradle 文档可能会有所帮助。是否有理由在构建的依赖项部分编译 fileTree?如果您要从构建资源中排除文件,请使用
sourceSet块。 -
谢谢。我在任何
build.gradle文件中都没有看到sourceSet块。我会看看你引用的文档。 -
如果在尝试使用
sourceSet之后遇到问题,请更新您的答案,我会看看是否可以提供帮助:) -
我尝试添加
sourceSets,如上所述。这些错误似乎都与资源文件有关。我不确定是否需要从 src 目录中排除非 *.java 文件;它们可能会被自动忽略。 -
@EllenSpertus 我想通了。请参阅下面的答案
标签: android-studio gradle android-gradle-plugin build.gradle