视频查看无法在Proguard下工作

时间:2017-08-13 05:30:59

标签: android proguard android-videoview

VideoView中的问题似乎无法在Proguard下运行。启动视频时会出现以下屏幕。

VideoView Not Working in 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。

4 个答案:

答案 0 :(得分:1)

我不确定它是否仍与您相关,但它可能对其他人有用。我遇到过同样的问题。在我的情况下,根本原因与我使用的库和proguard配置有关。

因此,在使用proguard构建apk时出现此错误。

enter image description here

我尝试消除该错误的方法是添加-ignorewarning。错误已解决,但它使我的视频无法播放。

有两种方法可以解决这个问题:

  1. 从gradle中删除shrinkResources true

  2. 删除-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的大小,但这是唯一正常工作的选项。

随意让这个答案更具信息性。