2017-09-15 26 views
6

En utilisant Android Studio 3.0 Beta 5, utilisez le projet par défaut (activité vide) avec des applications instantanées.Fonctions multiples Les applications instantanées ne peuvent pas être protégées?

Pour activer Proguard, je mets juste tous les build.gradle (application, base et fonctionnalité) avec

debug { 
    minifyEnabled true 
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
} 

Lors de la compilation de l'App fonctionne très bien. Cependant, lorsque vous compilez les applications instantanées, il y a une erreur.

java.lang.RuntimeException: Impossible d'instancier activité ComposantInfo {com.elyeproj.myapplication/com.elyeproj.myapplication.feature.MainActivity}: java.lang.ClassNotFoundException: n'a pas pu trouver com.elyeproj .myapplication.feature.MainActivity dans une classe atome chargeur ou classe parente chargeur

Il semble que le proguard juste ne vérifie pas les dépendances entre fonctions. Comment cela pourrait-il être résolu?

+0

problème signalé à Google par https://issuetracker.google.com/issues/65710224 – Elye

+0

@Bedant, upvote cette question serait aider à élever plus d'attention à cela? Merci. – Elye

+0

Y a-t-il eu des mises à jour à ce sujet?On dirait que la limitation assez sérieuse étant donné les exigences de taille des applications instantanées. –

Répondre

0

L'équipe Google AIA travaille sur le correctif, merci pour votre patience!

Une solution de contournement temporaire pour ce problème consiste à configurer un proguard «-keep» massif pour chaque module de fonctionnalité.

Pour en savoir quelles classes de garder lorsque vous configurez votre proguard, s'il vous plaît effectuer les opérations suivantes:

  1. add « class -whyareyoukeeping ** » à votre application/proguard-rules.pro (module application installée)
  2. régler la valeur true de-application installée minifyEnabled
  3. construire la application installée, la console Gradle contiendra une liste d'informations sur les classes qu'il a gardé ou non
  4. copie cette partie à un éditeur afin que vous puissiez éditez
  5. pour chaque classe qui est noté avec un «est conservé» ou «est une bibliothèque», ce sera une classe à conserver, à savoir. -keep class some.package.class {*;} a. vous devriez également être en mesure de le faire au niveau des membres pour une optimisation plus poussée
  6. après avoir compilé la liste de ces donjons, ajoutez-les à chacune de vos proguard-rules.pro
  7. vous pouvez ou non besoin de vérifier que la base/proguard-rules.pro utilise « -dontobfuscate » (ou propager l'obscurcissement en aval des cartes à des fonctions en quelque sorte)

vous pouvez maintenant construire votre-application instantanée avec minifyEnabled vrai.

S'il vous plaît être conscient de l'étape 5, il pourrait être un défi à compiler, en fonction de la qualité de votre éditeur. Une façon l'ingénieur a démontré utilisait la commande AWK pour remplacer le texte:

awk '/^[^ ]/ { cls=$1 } /is (kept|a library)/ { print "-keep class " cls " {*;}" }'