2017-08-13 4 views
1

Il semble y avoir un problème dans VideoView qui ne fonctionne pas sous Proguard. L'écran suivant apparaît lorsqu'une vidéo est en cours de démarrage.Video View ne fonctionne pas sous Proguard

VideoView Not Working in Proguard

Le code Vidéo est la suivante:

 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(); 

De plus il n'y a pas ProGuard spécifique paramètre ajouté pour VideoView à courir.

Extraits de 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() 
     } 
    } 

Il y a aussi des arômes de produits utilisés juste pour manipuler avec l'ID d'application.

+0

Mettez votre fichier build.gradle. –

+0

J'ai édité ma réponse. –

Répondre

0

Je pense que le problème est l'URI de votre vidéo. En fait, je pense que le problème est avec cette ligne:

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

Essayez de vous connecter "android.resource://" + getPackageName() + "/" + R.raw.splash_min et savoir si elle pointe vers un emplacement correct. Si ce n'est pas le cas (ce que je pense que ce ne sera pas le cas), vous devez ajouter des règles à votre proguard pour conserver l'emplacement comme prévu.

EDIT:

Le problème est lorsque vous activez proguard, le nom du package change aussi. getPackageName() vous donnera le bon nom de paquet dans l'application, mais après avoir activé les proguards, il est changé. Donc, votre URI ne pointera pas vers un bon emplacement. Vous devez exclure votre nom de package dans vos règles proguard.

+0

URI lorsque App est en cours d'exécution sous ProGuard: android.resource: //com.urbanwand.diner.staged/2131034118 Sans Proguard: android.resource: //com.urbanwand.diner.staged/2131034118 Donc, il n'y a changer quoi que ce soit. Mais la vidéo se joue sans Proguard –

+0

Postez votre fichier build.gradle s'il vous plaît. –

+0

Pouvez-vous essayer d'éviter l'application de progard à la classe mediacontroller? –

-2

Un problème est survenu avec l'URI qui était analysée à l'aide de getPackageName() & le chemin du fichier vidéo. La solution consiste à écrire le chemin du fichier vidéo à l'intérieur des guillemets doubles plutôt que d'utiliser R.raw.file_name comme ProGuard semble restreindre l'accès aux fichiers d'utiliser R **

L'URI est mis à jour.

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

Donc, voici comment cela fonctionne. Bien que cela augmente la taille de l'apk, mais c'est la seule option qui fonctionne très bien.

N'hésitez pas à rendre cette réponse plus informative.

0

Je ne sais pas si c'est toujours pertinent pour vous, mais cela pourrait être utile pour d'autres personnes. J'ai eu le même problème. Dans mon cas, la cause première est quelque chose à voir avec une de mes librairies que j'ai utilisée et proguard config. Donc, j'ai eu cette erreur lors de la construction d'un apk avec proguard.

enter image description here

La façon dont j'essayé d'éliminer cette erreur était en ajoutant -ignorewarning. L'erreur a été résolue mais cela n'a pas permis de lire ma vidéo.

Il y a 2 façons de résoudre ce problème:

  1. retirer shrinkResources true de gradle

    ou

  2. supprimer -ignorewarning et corriger les avertissements générés par votre bibliothèque.