私はAndroid Studio with Google Driveを使用しています。これにより、隠しシステムファイル(Icon
や_desktop.ini
_など)が表示され、説明されているようにエラーが発生します here 。これらのファイルを削除するスクリプトを実行するのではなく、gradle 2.14に無視するよう指示します。
ファイルを除外する方法を見つけようとして、ディレクトリ_\app\src\main\res\values
_および_\app\src\main\Java\com\hfad\stopwatch\
_に「excludeme.txt」という名前のファイルを作成しました。プロジェクトの2つの_build.gradle
_ファイルにさまざまな変更を試みましたが失敗しました。ファイルは正常に除外されませんでした。
具体的には、 この質問 ごとに_build.gradle
_の_Module: app
_ファイルに次の変更を加えました。
_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
セクションにも追加しました。
_aaptOptions {
ignoreAssetsPattern "!excludeme.txt"
}
_
私も追加しました:
_sourceSets {
main {
Java {
srcDir "src" [I also tried w/o this line]
exclude "**/excludeme.txt"
}
}
}
_
ビルドをトリガーした_Build > Clean Project
_を選択すると、次の出力が得られました。これは、resourcesフォルダー内のファイルが無視されなかったことを示しています。
_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"
}
_
Androidプロジェクトをビルドするときに、特定のパターンを含むファイルを無視するようにgradleに適切に指示するにはどうすればよいですか?
アップデート1
以下のStefanの提案に従って、_build.gradle
_の_Module: app
_ファイルに次を追加しました。
_Android {
[omitted]
sourceSets.main.res.exclude '**/whatever.txt'
}
_
_whatever.txt
_という名前のファイルを_res/layout
_ディレクトリに追加しましたが、ビルドは次のように失敗しました:
_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
ネイサンの提案に従って、私は追加しました:
_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
_
(この最後のビルドは、Windows上にある他のものとは異なり、Mac上にありました。)
Gradleの最近の変更によりsourceSetsのDSLが変更されたように見えるため、フィルターフィールドでexcludeを指定する必要があります。
Android {
sourceSets.main.res.filter.exclude '**/whatever.txt'
}
AndroidプラグインにはSourceSetsの独自の概念があります: http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Configuring -the-Structure
だからあなたはおそらく次のようなことをしたいと思うでしょう
Android {
sourceSets.main.res.exclude '**/whatever.txt'
}
子プロジェクトでは、あなたの場合、:APP
であると思いますが、build.gradle
ファイルに以下を追加します。
packagingOptions {
//Exclude the file(s) in this method. Provide the path and file name.
exclude 'src\main\res\layout\whatever.txt'
}
PackagingOptions DSLオブジェクト を使用すると、APK
に含めるファイルを制御できます。 exclude
は、名前またはパターンでファイルまたはディレクトリを無視できるようにする引数として文字列またはパターンを取ります。
[〜#〜] edit [〜#〜]Android Studio docs から保持するリソースをカスタマイズします。
<resources>
タグを使用してXML
ファイルを作成します。tools:keep="[list resources]"
を追加res/raw/keep.xml
のプロジェクトリソースにファイルを保存します。ビルドにはこのファイルは含まれません。終了ファイルは、 Android Studio Docs
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.Android.com/tools"
tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
tools:discard="@layout/unused2" />
キーボードに対して頭を強く叩いた後、これは私のために働いた:
apply plugin: 'com.Android.library'
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern;
if (tskReqStr.contains("assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find())
return matcher.group(1).toLowerCase()
else {
println "NO MATCH FOUND"
return "";
}
}
Android {
.
.
.
sourceSets {
main {
if (getCurrentFlavor() == 'stripped') {
Java.exclude('**/excluded1.Java',
.
.)
}
Java {
srcDir 'main'
}
}
}
}
N.B.クレジット: gradleで現在のフレーバーを取得する方法 getCurrentFlavorメソッドを記述するため、