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

Removing unused resources requires unused code shrinking to be turned on

我正准备将应用程序发布到生产环境。所以,我生成了签名的 apk。生成签名的 apk 后,我遇到了问题。我的 apk 文件有点大,我尝试了一些方法来缩小 apk 的大小。我已经试过了

app --> Refactor --> Remove Unused Resources

并没有减少太多。所以,我在 build.gradle(app)

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

添加 shrinkResources true 后,我在重建时遇到了以下错误。我的问题是我应该如何先打开未使用的代码收缩?感谢和赞赏。

资源缩减只能与代码缩减结合使用。在代码收缩器删除所有未使用的代码后,资源收缩器可以识别应用程序仍在使用哪些资源。当您添加包含资源的代码库时尤其如此——您必须删除未使用的库代码,这样库资源就不会被引用,因此可以被资源收缩器移除

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

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

reference

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

Shrink your code and resources

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

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

简单,只需在应用级别打开 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' 

    }

为了使用资源缩减,您还需要启用代码缩减,因为它们可以结合使用。
为此,设置 shrinkResources trueminifyEnabled true.
您可以按照 official site 进行相同的操作。

可能是你在buildTypes.debug中设置错了minifyEnabled = falseshrinkResources = true,所以,可能是问题的根源,而不是你的buildTypes.release

确保将其添加到 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'
    }
}