其他分享
首页 > 其他分享> > Android:如何告诉ShrinkResources保留某些资源

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