Had*_*des 9 java android proguard
我遇到过这个问题,minifyEnabled和shrinkResources在某种意义上给出了次优的结果; 当我包括,
'com.google.android.gms:play-services-places:9.6.1'
Run Code Online (Sandbox Code Playgroud)
我还没有使用Google Sign In API,我收到大量登录图片.

如何从我的APK中删除它们?他们似乎添加了相当多的KB.
我正在使用proguard缩小和缩小资源,如上所述.
有一个细节主题在这里,在Android开发者用户指南。
基本上,您有很多选择可以通过缩小资源来实际减小 apk 的大小。我已经简要地讨论过它们,我认为下面讨论的启用严格引用检查应该可以解决您的问题,但是您可以查看所有可用选项以进一步减小您的 apk 大小。
正如文档所说,使用 res/raw/keep.xml 中的以下 xml,来决定保留什么和不保留什么:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
tools:discard="@layout/unused2" />
Run Code Online (Sandbox Code Playgroud)
其余的将由构建系统处理(这在使用不同的构建变体时很有用)。
启用严格的参考检查
如果您的代码或库引用如下资源:
getResources().getIdentifier("image1", "drawable", getPackageName())
Run Code Online (Sandbox Code Playgroud)
然后,在这种情况下,默认情况下资源收缩器会采取防御性行为,并将具有匹配名称格式的所有资源标记为可能使用且不可移除。
因此,将以下内容添加到 res/raw/keep.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="strict" />
Run Code Online (Sandbox Code Playgroud)
添加这个应该可以解决你的问题。
删除未使用的替代资源
Resource Shrinker 不会删除替代资源,例如不同屏幕密度的替代可绘制资源、不同语言的替代字符串资源等。
因此,您可以自己从构建文件中选择要保留的内容,例如,要保留 'en' 语言环境中的字符串:
android {
defaultConfig {
...
resConfigs "en", "fr"
}
}
Run Code Online (Sandbox Code Playgroud)
这可以显着减小尺寸。
如果资源收缩器仍然保留资源,则使用第一个讨论的方法手动排除它们,并查看是否正确编译和构建,如果没有,那么资源收缩器保留资源的原因将从构建时抛出的异常中明确。
希望能帮助到你 !
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |