Android: 如何告诉 ShrinkResources 保留某些资源
Android: How to tell ShrinkResources to keep certain resources
我的 res/raw 文件夹中有一个 mp3 和一个 ogg 文件,用于 Android 媒体播放器。我像这样使用 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 问题跟踪器上有一个关于这个问题的错误报告,但是发布者说 he/she 使用了上面包含的信息 link 以确保所需资源未被删除并且问题已标记为 'intended behaviour'(我觉得这有点奇怪,因为我不认为删除所需资源是预期的行为)。
无论如何,我已经尝试按照文档中的说明进行操作,但它似乎不起作用,我在这里做错了什么?我创建了一个名为 '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
我的 res/raw 文件夹中有一个 mp3 和一个 ogg 文件,用于 Android 媒体播放器。我像这样使用 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 问题跟踪器上有一个关于这个问题的错误报告,但是发布者说 he/she 使用了上面包含的信息 link 以确保所需资源未被删除并且问题已标记为 'intended behaviour'(我觉得这有点奇怪,因为我不认为删除所需资源是预期的行为)。
无论如何,我已经尝试按照文档中的说明进行操作,但它似乎不起作用,我在这里做错了什么?我创建了一个名为 '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