删除未使用的资源需要打开未使用的代码收缩

时间:2018-09-13 09:36:11

标签: android android-resources shrinkresources

我正准备将App发布到生产环境。因此,我生成了签名的apk。生成签名的apk后,我遇到了问题。我的apk文件大小有点大,我尝试了缩小apk大小的方法。我已经尝试过

  

app->重构->删除未使用的资源

并不太减少。因此,我在build.gradle(app)

中添加了 shrinkResources true
 buildTypes {
        release {
            minifyEnabled false
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

添加 shrinkResources true 后,重建时出现以下错误。我的问题是如何首先打开未使用的代码收缩功能?谢谢,谢谢。

enter image description here

7 个答案:

答案 0 :(得分:7)

资源缩减仅与代码缩减结合使用。代码缩减器删除所有未使用的代码后,资源缩减器可以识别应用程序仍使用哪些资源。添加包含资源的代码库时尤其如此-必须删除未使用的库代码,以使库资源成为未引用的资源,因此可以由资源收缩器移除。

要启用资源缩减,请将build.gradle文件中的rinkleResources属性设置为true(与minifyEnabled一起进行代码缩减)。例如:

android {
...
buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    }
}

}

reference

答案 1 :(得分:2)

您可能想参考Android文档来缩减代码和资源:

Shrink your code and resources

就像已经指出的评论一样,资源缩减仅在使用代码缩减器后才有效。要在shrinkResources文件中启用build.gradle,必须先将minifyEnabled设置为true

答案 2 :(得分:1)

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
        }
    }
}

答案 3 :(得分:1)

简单的只需在应用程序级别即android / app / build.gradle上打开build.gradle文件并实现此操作即可:

 release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug
        useProguard true
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

    }

答案 4 :(得分:1)

也许您在buildTypes.debug中错误地设置了minifyEnabled = falseshrinkResources = true,所以也许这是问题的根源,而不是buildTypes.release

答案 5 :(得分:0)

为了使用资源缩减功能,您还需要启用代码缩减功能,因为它们都可以协同工作。
为此,请将 shrinkResources true minifyEnabled true 一起设置。
您可以按照official site进行相同操作。

答案 6 :(得分:0)

确保将其添加到 gradle 的适当部分

   signingConfigs {
    buildTypes {
        debug {
            buildConfigField "java.util.Date", "buildTime", "new java.util.Date(" + System.currentTimeMillis() + "L)"
        }
        release {
            buildConfigField "java.util.Date", "buildTime", "new java.util.Date(" + System.currentTimeMillis() + "L)"
        }
    }
}


buildTypes {
    release {
        minifyEnabled false
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}