gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:49 24 4
gpt4 key购买 nike

我的 res/raw 文件夹中有一个 mp3 和一个 ogg 文件,我将它们与 Android Media Player 一起使用。我像这样使用 setDataSource

musicPlayer.setDataSource(context, Uri.parse("android.resource://com.me.myapp/" + R.raw.music));

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

Skipped unused resource res/raw/music.mp3: 485531 bytes (replaced with small dummy file of size 0 bytes)

Skipped unused resource res/raw/oggmusic.ogg: 5335764 bytes (replaced with small dummy file of size 0 bytes)

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

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

这是 XML:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/*.mp3, @raw/*.ogg"/>

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

编辑

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

最佳答案

我刚刚遇到这个问题,并发现我做错了什么。

引用资源时不要指定文件扩展名。

我一开始做了什么(这行不通):

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/vid.mp4"
/>

解决办法,去掉文件扩展名:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/vid"
/>

您可以通过检查您可以在 ./app/build/outputs/mapping/<buildType>/resources.txt 找到的 resources.txt 文件来验证这一点 https://developer.android.com/studio/build/shrink-code

关于Android:如何告诉 ShrinkResources 保留某些资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43838269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com