5

さまざまな 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/縮小リソースはこれには機能しません (何かを見逃さない限り?)

4

1 に答える 1