微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

构建android时如何彻底删除未使用的资源?

如何解决构建android时如何彻底删除未使用的资源?

我有一个通过另一个程序随机创建的资源组。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#000000" />
</shape>

这些资源组中有些被实际使用,有些没有。

该资源组属于另一个库,我的应用导入并使用了该库。

由于这个组一直在更新,我不想把它从项目中删除,我只想把它从构建输出中排除。

https://developer.android.com/studio/build/shrink-code

官方文档说我可以通过shrinkResource函数删除我不用的资源。所以我设置了我的 app.gradle 如下。

...
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles 'proguard-rules.pro' <-- This is an empty file.
          
        }

...

dependencies {
    implementation project(':myResourceLibrary')
...
}

我还在 res/raw 中创建了 keep.xml 以进行严格的资源检查。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@raw/*" <-- This part is the same with or without it.
    tools:shrinkMode="strict" />

好的,我运行了构建并成功获得了 apk。但是通过Android Studio的apk分析查看apk时,并没有移除资源。

资源保留在下面的表格中。

<?xml version="1.0" encoding="utf-8"?>
<x />

构建日志指出资源的处理方式如下。

Skipped unused resource 'my_resource_file': 444 bytes (replaced with small dummy file of size 104 bytes)

好吧,我可以说单独减少容量是有效的,但我喜欢这里 (https://sites.google.com/a/android.com/tools/tech-docs/new-build-system/resource-shrinking) 我希望完全删除未使用的文件

没有任何文档解释为什么可以完全删除文件,或者为什么不能完全删除它。

为什么gradle不知道资源没有被使用,但是不删除文件?我可以删除那个文件吗?

我正在使用 gradle 4.1.0 进行构建,并且正在使用以下命令进行构建。

./gradlew --info assemble(MyProductFlavor)Release

即使我使用 Android StudioRebuild Project,它也会处于与下图相同的状态。

enter image description here

解决方法

这部分代码:

release {
        minifyEnabled true
        shrinkResources true
        proguardFiles 'proguard-rules.pro' <-- This is an empty file.
      
    }

要删除未使用的资源,然后缩小您的代码(因为没有人可以反编译您的 apk),如果您看到您的 apk 还包含未使用的资源,因为该 apk 用于调试,而 minify/shrink 不会影响调试apk 但对发布 apk 有影响。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。