デバッグ ビルドを実行すると、Java リソースは問題なく jar にパックされます。ただし、リリース ビルドでは機能しません。gradle タスク processReleaseJavaRes はデバッグ ビルドに対してのみ実行されることに気付きました。Android gradle コードを検索したところ、次のコード行が見つかりました。
if (variantConfig.buildType.runProguard) {
// run proguard on output of compile task
createProguardTasks(variantData, null)
// hack since bundle can't depend on variantData.proguardTask
mergeProGuardFileTask.dependsOn variantData.proguardTask
bundle.dependsOn packageRes, packageAidl, packageRenderscript, mergeProGuardFileTask, lintCopy, variantData.ndkCompileTask
} else {
Sync packageLocalJar = project.tasks.create("package${variantData.variantConfiguration.fullName.capitalize()}LocalJar",Sync)
packageLocalJar.from(getLocalJarFileList(variantData.variantDependency))
packageLocalJar.into(project.file("$project.buildDir/$DIR_BUNDLES/${variantData.variantConfiguration.dirName}/$SdkConstants.LIBS_FOLDER"))
// jar the classes.
Jar jar = project.tasks.create("package${buildType.name.capitalize()}Jar", Jar);
jar.dependsOn variantData.javaCompileTask, variantData.processJavaResourcesTask
jar.from(variantData.javaCompileTask.outputs);
jar.from(variantData.processJavaResourcesTask.destinationDir)
...
bundle.dependsOn packageRes, jar, packageAidl, packageRenderscript, packageLocalJar, mergeProGuardFileTask, lintCopy, variantData.ndkCompileTask
...
}
次に、proguardRelease の依存関係としてタスクを追加しようとしました。
tasks.whenTaskAdded { task ->
if (task.name.matches("proguardRelease")) {
task.dependsOn('processReleaseJavaRes')
}
}
これはうまく機能し、Java リソースは build/intermediates/javaResources/ に作成されましたが、次の問題が発生しました。build/intermediates/classes のクラスを使用して jar をビルドし、build/intermediates/javaResources のリソースも含めるようにプロガードに指示するにはどうすればよいですか? -injars で javaResources パスを設定しようとしました。現在、それらは proguard に追加されていますが (以下のログ出力を参照)、build/intermediate/bundles/release/classes.jar の classes.jar には追加されていません。
13:32:30.731 [INFO] [system.out] Reading program directory [/path/to/my/project/build/intermediates/classes/release] (filtered)
13:32:30.913 [INFO] [system.out] Reading program directory [/path/to/my/project/build/intermediates/javaResources/release]
前もって感謝します、ロマンスキー