在库

时间:2018-03-06 13:20:10

标签: android android-gradle icu4j

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

lib使用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 /缩小的资源不会为此工作(除非我错过了什么?)

1 个答案:

答案 0 :(得分:0)

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

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