Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从第三方库中删除未使用的资产_Java_Android_Proguard - Fatal编程技术网

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

Java 从第三方库中删除未使用的资产,java,android,proguard,Java,Android,Proguard,我遇到过这样一个问题,minifyEnabled和shrinkResources给了我次优的结果,即:;当我包括在内时 'com.google.android.gms:play-services-places:9.6.1' 我还没有使用谷歌登录API,我得到了大量的登录图片。 如何从我的APK中去除它们?他们似乎增加了不少知识库 如上所述,我将proguard与缩小和收缩资源一起使用 android开发者用户指南中有一个详细的主题 基本上,您可以通过缩减资源来减少apk的大小。我已经简要地讨

我遇到过这样一个问题,minifyEnabled和shrinkResources给了我次优的结果,即:;当我包括在内时

'com.google.android.gms:play-services-places:9.6.1'
我还没有使用谷歌登录API,我得到了大量的登录图片。

如何从我的APK中去除它们?他们似乎增加了不少知识库

如上所述,我将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" />
然后,在本例中,资源收缩器在默认情况下会采取防御措施,并将具有匹配名称格式的所有资源标记为可能已使用且不可删除

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

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:shrinkMode="strict" />
这可以显著减小尺寸


如果resource shrinker保留了静态资源,则使用前面讨论的方法手动排除它们,并查看是否正确编译和生成,如果没有,则生成时引发的异常将清楚显示resource shrinker保留资源的原因


希望有帮助

如果构建系统无法自动检测未使用的资源,您可能希望尝试通过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
替换为
(':lib')
,从中删除资产。

请参考此链接,您将得到答案。没有内置的解决方案。你可以试试,尽管我还没试过。
android {
    packagingOptions {
        exclude '/**/common_google_signin*.png'
    }
}
compile ('com.facebook.android:facebook-android-sdk:3.22.0@aar'){
    exclude module: 'support-v4'
}