Android:如何告诉ShrinkResources保留某些资源
作者:互联网
我的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文件中指定的内容.例如,如果我使用“放弃”而不是“保留”,则“放弃”中所述的资源将显示在生成的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/\u0026lt;buildType\u0026gt;/resources.txt中找到的resources.txt文件来验证这一点.
https://developer.android.com/studio/build/shrink-code
标签:proguard,android-mediaplayer,android,shrinkresources 来源: https://codeday.me/bug/20191111/2019578.html