繁体   English   中英

从第三方库中删除未使用的资产

[英]removing unused assets from 3rd party library

我遇到过这个问题,minifyEnabled和shrinkResources在某种意义上给出了次优的结果; 当我包括,

'com.google.android.gms:play-services-places:9.6.1'

我还没有使用Google Sign In API,我收到大量登录图片。 sign_in_images

如何从我的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" /> 

其余的将由构建系统处理(这在使用不同的构建变体时很有用)。


启用严格的参考检查

如果您的代码或库引用了如下资源:

 getResources().getIdentifier("image1", "drawable", getPackageName()) 

然后,在这种情况下,资源缩减器默认情况下会采取防御措施,并将所有具有匹配名称格式的资源标记为可能已使用且无法删除。

因此,请将以下内容添加到res / raw / keep.xml

 <?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:shrinkMode="strict" /> 

添加这个可以解决您的问题。


删除未使用的替代资源

Resource Shrinker不会删除替代资源,例如,针对不同屏幕密度的替代可绘制资源,针对不同语言的替代字符串资源等。

因此,您可以自己选择要保留的内容,例如,您希望在“en”语言环境中保留字符串:

 android { defaultConfig { ... resConfigs "en", "fr" } } 

这可以显着减小尺寸。


如果仍由资源缩减器保留资源,则使用第一个讨论的方法手动排除它们,并查看是否编译和构建正确,如果没有,那么通过资源缩减器保留资源的原因将从构建时抛出的异常变得清晰。

希望能帮助到你 !

如果没有其他方法可以使构建系统自动检测未使用的资源,您可能希望尝试通过packagingOptions DSL明确排除这些,如:

android {
    packagingOptions {
        exclude '/**/common_google_signin*.png'
    }
}

可能存在一些减少应用程序大小和删除未使用资产的可能性。

您可以从(':lib')项目库中删除未使用的资产。

如果您已导入@aar文件,则可以执行此类操作

compile ('com.facebook.android:facebook-android-sdk:3.22.0@aar'){
    exclude module: 'support-v4'
}

我们仍然在@aar文件中有未使用的文件, @aar不是找到将@aar替换为(':lib')替代方法,从那里删除资产。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM