【问题标题】:Stripping data files from ICU4J when used in a Library在库中使用时从 ICU4J 中剥离数据文件
【发布时间】:2018-08-14 08:53:53
【问题描述】:

我有一个包含在不同 Android 应用程序中的内部库。 这个库依赖于 ICU4J。这意味着我们在最终的 APK 中添加了大约 10MB。

该库使用 ICU4J 的子集,因此我想删除所有不必要的数据文件。

来自ICU documentation

目前 ICU4J 没有提供任何工具来揭示数据文件之间的这些依赖关系,因此直接在 ICU4J 项目中修剪数据是一件难事。删除数据的关键点是确保删除对该数据的所有依赖项。

我想在构建应用程序时删除数据文件。

有关 StackOverflow 的一个问题是相关的:Exclude specific resources from an 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:我应该从哪个目录中删除文件?

我知道 ICU4J 可以在 Android 7.0 中使用而无需所有这些开销,但我想让 APK 对于旧设备尽可能轻。

Proguard/shrinking 资源对此不起作用(除非我错过了什么?)

【问题讨论】:

    标签: android android-gradle-plugin icu4j


    【解决方案1】:

    切片 ICU 语言环境数据的更好机制是常见的功能请求,因此我们正在努力在即将发布的 ICU 版本中推出此功能(63 或 64,具体取决于情况如何)。同时,免费为我们的设计文档做出贡献:

    https://docs.google.com/document/d/1Lt9sHy7VbMLA2KbbEpg-TgNAI8bqtetwM767enWjcUg/edit#

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多