我有一个内部库,包含在不同的Android应用程序中。 该库依赖于ICU4J。这意味着我们为最终的APK增加了~10MB。
lib使用ICU4J的一个子集,所以我想删除所有不必要的数据文件。
目前,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
}
})
excludeTask
?我知道ICU4J可以在Android 7.0中使用,但不会产生所有这些开销,但我希望尽可能轻松地为旧设备制作APK。
Proguard /缩小的资源不会为此工作(除非我错过了什么?)
答案 0 :(得分:0)
对切片ICU语言环境数据进行切片的更好机制是一项常见功能请求,因此我们正在努力在即将发布的ICU版本(取决于情况如何,分63或64)中推出这一功能。同时,freel free可以为我们的设计文档做出贡献:
https://docs.google.com/document/d/1Lt9sHy7VbMLA2KbbEpg-TgNAI8bqtetwM767enWjcUg/edit#