我在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 文件中的相关结果:
跳过未使用的资源res / raw / music.mp3:485531字节(替换为大小为0字节的小型虚拟文件)
跳过未使用的资源res / raw / oggmusic.ogg:5335764字节(替换为大小为0字节的小型虚拟文件)
我已做过一些研究,Google问题跟踪器上有关于此问题的错误报告,但海报说他/她使用上述链接中包含的信息来确保不会删除所需的资源并且该问题已被标记为“预期行为”。 (我发现有点奇怪,因为我不会认为它将被删除所需资源的行为。)
无论如何,我已经尝试按照文档中的说法进行操作,它似乎无法正常工作,我在这里做错了什么?我创建了一个名为' 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文件中指定的是什么都被完全忽略了。如果我使用&#34;丢弃&#34;例如,代替或保留&#39;&#39; discard&#39;中所述的资源。出现在生成的APK文件中,所以我必须做错事或错过某个地方的步骤。