问题标签 [shrinkresources]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
334 浏览

android - ShrinkResources 缩小从 styles.xml 指定的可绘制对象

我对shrinkResources有一个奇怪的问题。如果我直接通过属性为我的可绘制对象指定背景,它可以正常工作。但是如果我把它移到样式,shrinkResources 开始缩小它们,认为它们没有被使用。这不像我在运行时连接可绘制的文件名,这很难检测到。在我看来,这是一个非常广泛的案例。

另外我知道我可以列出我的所有可绘制对象,keep.xml以防止它们缩小。但是我有很多文件,并且我计划在将来添加它们,这可能会导致发布中的错误(如果我忘记添加它们)。还有另一种解决方法吗?

样式.xml

my_layout.xml

my_drawable.xml

./gradlew assembleRelease --info

my_drawable.xml变为

为了论证,我指定了: app/src/main/res/keep.xml

0 投票
0 回答
413 浏览

android - 无法在发布版本中使用 shrinkResources true 生成签名的 apk

错误如下:

错误:发现任务':app:packageRelease'的配置有问题。

为属性“resourceFile”指定的文件“D:\Original_ProjectBackUp\TheBarMan\app\build\intermediates\res\resources-release-stripped.ap_”不存在。

开发人员的帮助将不胜感激。

0 投票
1 回答
4612 浏览

android - Android:如何告诉 ShrinkResources 保留某些资源

我的 res/raw 文件夹中有一个 mp3 和一个 ogg 文件,用于 Android 媒体播放器。我像这样使用setDataSource

这在从 Android Studio 运行时工作正常,但是,当导出启用了shrinkResouces的签名 APK 时,它会删除 mp3(如上所述,我还有一个 ogg 文件,我以相同的方式使用它并且也被删除了) . 这是Resouces.txt文件中的相关结果:

跳过未使用的资源 res/raw/music.mp3:485531 字节(替换为大小为 0 字节的小虚拟文件)

跳过未使用的资源 res/raw/oggmusic.ogg:5335764 字节(替换为大小为 0 字节的小虚拟文件)

我已经进行了一些研究,并且在 Google 问题跟踪器上有一个针对此问题的错误报告,但是发布者说他/她使用了上面链接中包含的信息来确保没有删除所需的资源并且问题已经标记为“预期行为”(我觉得这有点奇怪,因为我不认为这是删除所需资源的预期行为)。

无论如何,我已经尝试按照文档中的说明进行操作,但它似乎不起作用,我在这里做错了什么?我创建了一个名为“keep.xml”的 xml 文件,并将其放在我的原始文件夹中,与要保留的资源一起。

这是 XML:

这个问题在 Eclipse 中并不明显,但在迁移到 Android Studio 后就出现了。

编辑

我做了更多的测试,我可以确认我在 XML 文件中指定的任何内容都被完全忽略了。例如,如果我使用“discard”代替或代替“keep”,则“discard”中所述的资源会出现在生成的 APK 文件中,所以我一定是做错了什么或在某处遗漏了一步。

0 投票
0 回答
113 浏览

java - Android中关于shrinkResources的一个奇怪的错误

shrinkResources 在build.gradle.

然后我发现了这个奇怪的错误:

在我的应用程序的 java 文件中,有这样一行:

String unit = String.format("%%s %s", getResources().getString(R.string.XXXX));

注意里面有个空格%%s %s

如果我添加这个空间,我的一些 PNG 将被 ShrinkResources 标记为未使用的资源,并且不会被打包到 apk 文件中。

但如果我省略空格,一切都很好。

对我来说,这太不可思议了。这会让我发疯……你知道吗?

更新:

试图让我的问题更清楚:

如果我的 java 代码是

String unit = String.format("%%s %s", getResources().getString(R.string.XXXX));

然后部分输出是(实际上我在 中找到它resources.txt):

Skipped unused resource res/drawable-xxhdpi-v4/head02.9.png: 822 bytes (replaced with small dummy file of size 77 bytes) Skipped unused resource res/drawable-xxhdpi-v4/appointment_normal.png: 1827 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/cg_normal.png: 1850 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/pre_normal.png: 1822 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/doctor_normal.png: 1963 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/infor_normal.png: 1605 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/btn_check.png: 716 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/btn_check.png: 898 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/navigation_arrow_left_normal.png: 184 bytes (replaced with small dummy file of size 67 bytes) Skipped unused resource res/drawable-xxhdpi-v4/dameon_killed.png: 913 bytes (replaced with small dummy file of size 67 bytes)

跳过的 png 将不会显示。

如果我的 java 代码是

String unit = String.format("%%s%s", getResources().getString(R.string.XXXX));

没有像我上面发布的输出,一切都很好。

0 投票
1 回答
587 浏览

android - 在 Android Studio 中为 OpenCv 库启用 Gradle 缩小

我几乎在 Android Studio 中完成了一个包含 OpenCV 库的项目,我通过在 app/src/main 下创建一个新文件夹“jniLibs”来导入该库。现在有一个大问题,.apk 文件大小为 105 MB。对 App 模块使用 shrinkResources 和 minifyEnabled,尺寸降至 95 MB。也为 OpenCV 模块激活 shrinkResources 和 minifyEnabled,编译时返回错误。Gradle 找不到库的包!

这是我的 build.gradle(App)

这是 build.gradle(library)

我怎样才能激活 gradle 来清理库代码呢?

在这种 gradle 构建的情况下,我得到一个 95 MB 的 apk。但是也为库激活 minify 我得到了错误。无法解析 org.opencv.core ecc ecc

项目结构

0 投票
1 回答
494 浏览

android - 我需要使用 shrinkMode = "strict"

我需要使用shrinkMode(strict).

keep.xml我在类别中创建了一个文件 res/raw/keep.xml

这不起作用。但我不知道下一步该做什么。

0 投票
0 回答
167 浏览

android - 在 Android 中收缩 appcompat 资源

我想知道如何删除 appcompat 资源。

要查看我的问题:在 Android Studio 中,生成一个带有空 Activity 的新项目(已检查向后兼容性)。在发布构建类型中启用 shrinkResources。

生成签名的 APK,然后转到 Build => Analyze APK。查看 分析结果

似乎很多空间被不必要的资源浪费了。我怎样才能删除它们?我阅读了文档(https://developer.android.com/studio/build/shrink-code)并且我已经尝试创建res/raw/keep.xml包含以下内容的文件:

但它什么也没做。

0 投票
1 回答
2514 浏览

android - 任务 ':app:transformClassesWithAndroidGradleClassShrinkerForDebug' 执行失败

我收到此错误是因为我试图通过引用此文档来减小我的 apk 大小

任务 ':app:transformClassesWithAndroidGradleClassShrinkerForDebug' 执行失败。收缩过程中发现的警告,请使用 -dontwarn 或 -ignorewarnings 来抑制它们。

如何使用-dontwarn or -ignorewarnings to suppress them?我必须在哪里添加这个键。

错误堆栈跟踪:

编辑

proguard-rules.pro

现在出现以下错误,如果我shrinkResources true从 build.gradle 中删除,则不会出现任何错误。但我需要使用shrinkResources 减小apk 文件大小,如何解决以下错误。

0 投票
7 回答
19973 浏览

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

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

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

并且不会太减少。所以,我在 build.gradle(app) 中添加了shrinkResources true

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

在此处输入图像描述

0 投票
1 回答
27 浏览

android - 有没有办法获取被shrinkResources删除的资源列表?

正如标题所述,有没有办法知道shrinkResources删除了哪些资源?

提前致谢 :)