VideoView中的问题似乎无法在Proguard下运行。启动视频时会出现以下屏幕。
视频观看的代码如下:
mediaController= new MediaController(this);
mediaController.hide();
mediaController.setAnchorView(video_animation);
Uri uri= Uri.parse("android.resource://" + getPackageName() + "/"
+ R.raw.splash_min);
video_animation.setMediaController(mediaController);
video_animation.setVideoURI(uri);
video_animation.requestFocus();
video_animation.start();
此外,没有为VideoView添加特定的ProGuard设置。
build.gradle的摘录
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
resValue "string", "FB_APP_ID", getFbAppKey()
}
debug {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
resValue "string", "FB_APP_ID", getFbAppKey()
}
}
此外,还有一些产品风格仅用于操作应用程序ID。
答案 0 :(得分:1)
我不确定它是否仍与您相关,但它可能对其他人有用。我遇到过同样的问题。在我的情况下,根本原因与我使用的库和proguard配置有关。
因此,在使用proguard构建apk时出现此错误。
我尝试消除该错误的方法是添加-ignorewarning
。错误已解决,但它使我的视频无法播放。
有两种方法可以解决这个问题:
从gradle中删除shrinkResources true
或
删除-ignorewarning
并修复图书馆生成的警告。
答案 1 :(得分:1)
在原始文件夹中添加keep.xml。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/splash_min"
/>
答案 2 :(得分:0)
我认为问题是您视频的URI。事实上,我认为问题在于这一行:
Uri uri= Uri.parse("android.resource://" + getPackageName() + "/"
+ R.raw.splash_min);
尝试记录"android.resource://" + getPackageName() + "/" + R.raw.splash_min
并找出它是否指向正确的位置。如果不是(我认为它不会),你必须向你的proguard添加规则,以保持你所期望的位置。
修改强>
问题是当你启用proguard时,包名也会改变。 getPackageName()
会在app中为您提供正确的软件包名称,但在启用proguards后会更改它。所以你的URI不会指向正确的位置。您应该在proguard规则中排除您的包名称。
答案 3 :(得分:-2)
使用getPackageName()&amp;进行解析的URI存在问题。视频文件的路径。解决方案是将视频文件的路径写入双引号而不是使用R.raw.file_name,因为ProGuard似乎限制文件访问使用R。**
更新的URI是:
Uri uri= Uri.parse("android.resource://" + getPackageName() + "/raw/file_name");
这就是它的工作原理。虽然这增加了apk的大小,但这是唯一正常工作的选项。
随意让这个答案更具信息性。