23

我正准备发布一个应用程序来生产。所以,我生成了签名的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后,我在重建时遇到了以下错误。我的问题是我应该如何首先打开未使用的代码收缩?感谢和赞赏。

在此处输入图像描述

4

7 回答 7

34

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

要启用资源收缩,请在 build.gradle 文件中将 shrinkResources 属性设置为 true(与 minifyEnabled 一起用于代码收缩)。例如:

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

参考

于 2018-09-13T09:55:38.383 回答
4

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

于 2020-12-02T10:14:22.573 回答
3

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

缩小代码和资源

就像已经指出的评论一样,资源收缩仅在您使用了代码收缩器时才有效。shrinkResources要在您的文件中启用,您build.gradle必须首先设置minifyEnabledtrue

于 2018-09-13T09:58:00.260 回答
2
android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
        }
    }
}
于 2019-06-03T11:43:45.567 回答
2

很简单,只需在 App 级别打开 build.gradle 文件,即 android/app/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' 

    }
于 2020-09-02T05:21:42.230 回答
1

为了使用资源收缩,您还需要启用代码收缩,因为它们都可以协同工作。
为此,请将shrinkResources 与minifyEnabled true一起设置。 您可以关注官方网站

于 2020-09-21T06:05:45.137 回答
1

确保将其添加到 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'
    }
}
于 2021-03-30T15:38:46.087 回答