Android で動画再生させようと思って VideoView を使ったら、debug は大丈夫なのに release 版では「この動画を再生できません」(Can't play this video.) が表示されました。
という書き方でお分かりでしょうが、原因は build.gradle にありました。
minifyEnabled true
を false にするだけでした。
permission を確認したり ExoPlayer に変更してみたりと、色々やったのに結局これだけでした。「一部の実機で動かない → 色々やってみる → うまくいかない → じゃあ USB で adb を見てみよう → あれ、動くじゃん」の流れは脱力しました。
ネットにあまり情報が無かったので、ここに書いておきます。
もっと丁寧にやるなら、proguard-rules.pro で
-printusage deleted.txt
みたいに確認して、必要なものが消えていたら
-keep class android.support.v4.media.** {*;}
のように指定して保持すれば良いみたいです。
あ、ちなみに ExoPlayer は便利ですが、終了を明示しないといけないのは単純な VideoView より面倒かな、と思いました。VideoView に setVideoURI 等をして setMediaController を付けただけの場合、listener からじゃないと中身の player が変数として出てこないほど勝手にやってくれるわけで、終了も activity 等と同時にやってくれます。一方で ExoPlayer は、ちゃんと stop して release しないと残るみたいです。activity の onStop に付けておきましたけど、onStop を通らないで死んだときは気にしなくても良いのか心配です。
その後ほかのことをしていたら、なぜか再現できなくなったので、もしかすると manifest の中で
android:extractNativeLibs="false"
にするだけで直る問題だったのかもしれません。