2017-09-15 1 views
6

Verwenden Sie Android Studio 3.0 Beta 5 unter Verwendung des Standardprojekts (Leere Aktivität) mit Instant Apps on.Multi Feature Instant Apps können nicht programmiert werden?

auf Proguard zu drehen, habe ich nur all die Build.Gradle (app, Base und Funktion) mit

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

Wenn kompilieren die App funktioniert gut. Allerdings kompilieren die Instant-Apps es aus.

java.lang.RuntimeException: Kann Aktivität ComponentInfo {com.elyeproj.myapplication/com.elyeproj.myapplication.feature.MainActivity} instanziiert: java.lang.ClassNotFoundException: nicht com.elyeproj finden konnten, .myapplication.feature.MainActivity in jedem Atom Klasse Lader oder Elternklasse loader

Es scheint, wie die proguard überprüft nicht nur die Abhängigkeiten zwischen Funktionen. Wie könnte das gelöst werden?

+0

Berichtet Ausgabe auf Google nach https://issuetracker.google.com/issues/65710224 – Elye

+0

@Bedant, Vielleicht upvote diese Frage würde helfen, mehr Aufmerksamkeit darauf zu lenken? Vielen Dank. – Elye

+0

Gab es ein Update dazu?Scheint wie eine ziemlich ernsthafte Einschränkung angesichts der Größenanforderungen von Instant Apps. –

Antwort

0

Google AIA Team arbeitet an der Lösung, danke für Ihre Geduld!

Eine vorübergehende Problemumgehung für dieses Problem besteht darin, für jedes Feature-Modul einen umfangreichen "-wart" -Progard zu konfigurieren.

welche Klassen Um herauszufinden, zu halten, wenn Sie Ihre proguard konfigurieren, führen Sie bitte die folgenden Schritte aus:

  1. add „-whyareyoukeeping Klasse **“, um Ihre app/proguard-rules.pro (installiert-App-Modul)
  2. legen Sie die installierte-App minifyEnabled auf true
  3. die installierte-App bauen, dann wird die Gradle Console eine Liste von Informationen enthalten, auf die Klassen, die es gehalten oder nicht
  4. Kopie des Teils bis zu einem gewissen Editor so können Sie edit es
  5. für jede Klasse, die entweder mit einem "wird beibehalten" oder "ist eine Bibliothek" vermerkt ist, das wird eine Klasse zu halten, dh. -keep class some.package.class {*;} a. Sie sollten dies auch auf Mitgliedsebene zur weiteren Optimierung tun können.
  6. Nachdem Sie die Liste dieser Aufbewahrungsorte zusammengestellt haben, fügen Sie sie zu jedem Ihrer Proguard-Regeln.pro
  7. Sie möglicherweise oder nicht überprüfen müssen, dass die Basis/proguard-rules.pro verwendet "-dontobfuscate" (oder propagieren Verschleierungs Karten irgendwie Merkmale Downstream)

Jetzt können Sie Ihre Instant-App mit bauen minifyEnabled wahr.

Bitte beachten Sie Schritt-5, es könnte eine Herausforderung sein zu kompilieren, abhängig davon, wie gut Ihr Editor ist. Ein Weg, der Ingenieur demonstriert wurde mit der AWK Befehl Text ersetzt werden:

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