さまざまな Android アプリに含まれている内部ライブラリがあります。このライブラリは ICU4J に依存しています。これは、最終的な APK に最大 10 MB を追加することを意味します。
lib は ICU4J のサブセットを使用しているため、不要なデータ ファイルをすべて削除したいと考えています。
ICUのドキュメントから:
現在、ICU4J は、データ ファイル間のこれらの依存関係を明らかにするためのツールを提供していないため、ICU4J プロジェクトでデータを直接トリミングすることは、行き当たりばったりです。データを削除する際の重要なポイントは、そのデータへの依存関係もすべて削除することです。
アプリのビルド時にデータ ファイルを削除したいと考えています。
StackOverflow に関する 1 つの質問が関連しています: aar dep から特定のリソースを除外します。残念ながら、exploded-aar
ディレクトリはもう存在しません。
どのステップで ICU4J 依存関係からファイルを削除できるか知っていますか? cjdict.dict
ファイルを削除しようとしたのは次のとおりです。
tasks.create("excludeTask") << {
["java/com/ibm/icu/impl/data/icudt60b/brkitr/cjdict.dict"]
.collect { "${getGroup()}/${getName()}/${getVersion()}/${it}"}
.each {
// Question 2. From which dir should I remove the files?
File file = file("${buildDir}/intermediates/exploded-aar/${it}")
println("Excluding file " + file)
if (file.exists()) {
file.delete();
}
}
}
tasks.whenTaskAdded({
// Question 1. Before which task should I inject my excludeTask?
if (it.name.matches(/^transformClassesAndResources.*$/)) {
it.dependsOn excludeTask
}
})
- 質問 1: どのタスクの前に自分の を挿入する必要があります
excludeTask
か? - 質問 2: どのディレクトリからファイルを削除すればよいですか?
Android 7.0 で ICU4J をこのようなオーバーヘッドなしで使用できることはわかっていますが、APK を古いデバイス用にできる限り軽量にしたいと考えています。
Proguard/縮小リソースはこれには機能しません (何かを見逃さない限り?)