Bei Verwendung der ProGuard-Minimierung kann APK nicht mit Android Studio erstellt werden

8

Ich habe ein Problem beim Erstellen der APKs meiner Anwendungen.

Wenn ich die App debugge / laufe, funktioniert sie normal. Aber wenn ich versuche, die entsprechende APK zu generieren, gibt Android Studio mir viele Warnungen und einen Fehler:

%Vor%

Das Projekt wird von einem Bibliotheksprojekt gebildet, das als externes Projekt in settings.gradle :

importiert wird %Vor%

mit allen Abhängigkeiten.

Die build.gradle der Bibliothek ist

%Vor%

und das Projekt build.gradle ist

%Vor%

Wie repariere ich es, damit das APK kompiliert werden kann?

BEARBEITEN: Nach dem Hinzufügen vieler -dontwarn-Optionen zu meinem proguard-rules.pro, habe ich den Fehler trotzdem bekommen, und ich kann diese Warnungen nicht auflösen ( Hier gibt es einige Hinweise, aber nicht für diese Warnungen ...):

%Vor%     
Garro88 29.12.2014, 11:20
quelle

1 Antwort

6

Diese sind zu bereinigen. Die besseren Bibliotheken enthalten jetzt ihre Einstellungen im Bibliothekspaket, aber ältere (oder faule) Bibliotheken sind es immer noch nicht. Hier ist der Prozess, dem ich folge:

Während der Entwicklung:

  • Immer wenn eine neue Bibliothek mitgeliefert wird, sollten Sie in der Dokumentation nach den vorgeschlagenen ProGuard-Einstellungen suchen. (Wenn Sie damit fleißig sind, ersparen Sie sich viel Verwirrung und Graben später.)
  • Wenn der Bibliotheksautor ein AAR-Paket anbietet (zum Beispiel das Hinzufügen von '@ aar' am Ende der Gradle-Abhängigkeitszeile, um die volle AAR statt der einfacheren JAR zu erhalten), könnten sie sogar die notwendigen ProGuard-Ausnahmen darin enthalten haben Sie werden automatisch abgeholt. (Aber meiner Erfahrung nach nehmen die meisten Autoren diesen zusätzlichen Schritt noch nicht vor.)
  • Immer wenn ein neuer Namespace / Klasse in benutzerdefiniertem Code hinzugefügt wird, der dynamische Introspektion benötigt, zum Beispiel bei Verwendung von Dependency-Injection-Containern oder JSON-Parsern, stellen Sie sicher, dass ProGuard sie auf Basis ihres Paketnamens aufnimmt oder selbst hinzufügt Klasse zu einer Zeit.

Nach dem Erstellen und Erhalten von Fehlern:

  • Beginnen Sie mit allen Zeilen, die mit dem Präfix error: und dann mit warning: beginnen (die Zeilen note: stoppen den Build nicht).
  • Überprüfen Sie den Namensraum, den jede Zeile erwähnt. Suchen Sie die zugehörige Bibliothek (zum Beispiel com.newrelic.SomeClass ist wahrscheinlich für die Bibliothek New Relic). Wenn Sie es nicht finden können, versuchen Sie eine Google-Suche, um zu sehen, ob der Namespace Ihnen helfen kann, den GitHub README oder etwas anderes aufzuspüren, das möglicherweise identifiziert, welche Bibliothek dieser Namespace enthält. Oder überprüfen Sie das Android Studio & gt; Projekt & gt; Pakete & gt; Libraries -Liste (dauert eine Weile, um das erste Mal anzuzeigen) und den Namespace dort aufzuspüren. Hoffentlich ist der Quellcode verfügbar und enthält die Bibliotheksdetails in den Dateikopfkommentaren.
  • Suchen Sie in der Dokumentation für diese Bibliothek nach. Hoffentlich erwähnt es die notwendigen ProGuard Änderungen.
  • Neu erstellen.

Alle Änderungen, die die Bibliotheksdokumente gesagt haben, sind vorhanden, erhalten aber immer noch Warnungen:

  • Beginnen Sie mit dem Hinzufügen von -dontwarn -Zeilen. Beispiel: -dontwarn com.newrelic.** (Vergessen Sie nicht das Doppelsternchen, damit es den gesamten Baum unter diesem Namespace ignoriert; andernfalls ignoriert ein einzelnes Sternchen nur die direkten Kinder des Namespace.)
  • Wenn Sie Blind dontwarn -Anweisungen verwenden, müssen Sie Ihre kompilierte App (APK) testen! Weil es sehr wahrscheinlich ist, dass es bei Ihnen abstürzt, obwohl das Debugging (nicht ProGuard) Version lief gut. Stellen Sie sicher, dass Sie alle verwendeten Bibliotheken testen, Logcat-Nachrichten prüfen und sicherstellen, dass Sie alle Code-Pfade / Klassen verwenden, die Sie blind mit dontwarn !
  • überspringen

Scheiß drauf, mein Boss sagte, ich muss das Ding schon rauslassen:

  • Deaktivieren Sie ProGuard: - (

Verwenden Sie entweder den Projekteigenschaften-Dialog in Android Studio oder bearbeiten Sie Ihr Modul build.gradle und ändern Sie android { buildTypes { release { minifyEnabled true } } } und setzen Sie sie auf false .

Sie erhalten keine ProGuard-Optimierungen, das APK wird viel größer und der Code wird nicht verschleiert. Aber wenn Ihr Chef es gerade jetzt braucht und Sie keine Zeit zum Debuggen haben, wird es nicht das Ende der Welt sein, es zu deaktivieren.

Obwohl Sie wirklich ProGuard verwenden sollten. Vielleicht ist es Zeit, mit dem Chef darüber zu reden, den Entwicklern mehr Zeit zu geben, die langweiligen technischen Dinge zu tun, die wir brauchen.

    
Jon Adams 04.01.2016 16:03
quelle

Tags und Links