2017-08-13 5 views
1

Proguardでは動作しない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を操作するために使用されている製品のフレーバーがあります。

+0

build.gradleファイルを入力してください。 –

+0

私は私の答えを編集しました。 –

答えて

0

問題はあなたのビデオのURIだと思います。実際、私はこの問題は、この行であることを考える:

Uri uri= Uri.parse("android.resource://" + getPackageName() + "/" 
      + R.raw.splash_min); 

"android.resource://" + getPackageName() + "/" + R.raw.splash_minをログに記録し、それが正しい場所を指しているかどうかを確認してください。そうでない場合(私はそうではないと思う)、期待通りに場所を維持するために、プロガードにルールを追加する必要があります。

EDIT:

問題は、ProGuardのを有効にすると、パッケージ名があまりにも変化しています。 getPackageName()はアプリに正しいパッケージ名を与えますが、プロガードを有効にした後は変更されます。したがって、あなたのURIは正しい場所を指しません。プロガード規則でパッケージ名を除外する必要があります。

+0

URIのAppは、ProGuardの下で実行されます。android.resource://com.urbanwand.diner.staged/2131034118 ProGuardのなし:android.resource://com.urbanwand.diner.staged/2131034118 だからなしありまったく変えなさい。しかしビデオはProguardなしで再生されています –

+0

あなたのbuild.gradleファイルを投稿してください。 –

+0

progardがmediacontrollerクラスに適用されないようにすることができます –

-2

getPackageName()&のビデオファイルのパスを使用して解析されたURIに問題がありました。解決策は、二重引用符内のビデオファイルのパスを書くのではなくProGuardのようR.raw.file_nameを使用することであるRを使用してからのファイルアクセスを制限しているようです**

更新URIは以下のとおりです。

Uri uri= Uri.parse("android.resource://" + getPackageName() + "/raw/file_name"); 

これはどのように動作するのですか。これはapkのサイズを増やしますが、これはうまく動作する唯一のオプションです。

この回答をもっと参考にしてください。

0

まだあなたと関連があるかどうかはわかりませんが、他の人にとっては便利かもしれません。私も同じ問題がありました。私の場合、根本的な原因は、使用した私のライブラリと設定をproguardしたライブラリのいずれかと関係しています。

プロゴードを使ってapkを構築するときにこのエラーが発生しました。

enter image description here

私はそのエラーを解消しようとした方法は、-ignorewarningを添加することにより行いました。エラーは解決されましたが、私のビデオは再生できませんでした。

この問題を解決するには2通りの方法があります。

  1. -ignorewarningを削除して、あなたのライブラリーによって生成された警告を修正するのGradle

    または

  2. からshrinkResources trueを削除するには。

関連する問題