Android Studio 3.5 Canary fügt "Apply Changes" hinzu, einen Instant Run-Ersatz

Android Studio 3.5 (derzeit auf den Kanälen Canary und Dev) bietet jetzt eine neue Möglichkeit, Codeänderungen in Ihre App zu übertragen und deren Auswirkungen sofort zu sehen, ohne die App neu starten zu müssen. Einfach „Apply Changes“ (Änderungen übernehmen) genannt, ist es der Nachfolger der Funktion „Instant Run“ in früheren Versionen von Android Studio.

In Googles Android Developers Blog heißt es zu Apply Changes:

Mit Änderungen übernehmen können Sie Code- und Ressourcenänderungen in Ihre laufende App übertragen, ohne Ihre App neu zu starten - und in einigen Fällen, ohne die aktuelle Aktivität neu zu starten. Apply Changes ersetzt Instant Run durch einen völlig neuen Ansatz zur Build-Optimierung. Anstatt den Bytecode Ihres APK während der Erstellungszeit neu zu schreiben, definiert Apply Changes die Klassen im laufenden Betrieb neu, indem Sie die in Android 8.0 (API-Stufe 26) oder höher unterstützte Laufzeitinstrumentierung nutzen.

Außerdem werden Sie von Android Studio jetzt aufgefordert, zu entscheiden, ob Sie Ihre App oder Aktivität neu starten möchten, wenn festgestellt wird, dass Änderungen nicht mit Apply Changes kompatibel sind. Diese zusätzliche Steuerung sollte Ihnen eine konsistentere und vorhersehbarere Erfahrung im Vergleich zum Verhalten von Instant Run bieten.

In dem Blog-Beitrag werden einige Einschränkungen der neuen Funktionalität aufgeführt. Beispielsweise muss auf dem Gerät, auf dem Sie Ihre App testen, mindestens Android 8.0 Oreo (API Level 26) ausgeführt werden, und es gibt bestimmte Codeänderungen, bei denen die App nach wie vor neu gestartet werden muss. Wie bei "Instant Run" erzwingt "Apply Changes" einen Neustart Ihrer App, wenn Sie:

  • Hinzufügen oder Löschen einer Klasse, Methode oder eines Feldes
  • Manifest ändern
  • Ändern von Methodensignaturen
  • Ändern der Modifikatoren von Methoden oder Klassen
  • Klassen umbenennen
  • Ändern der Klassenvererbung
  • Hinzufügen oder Entfernen einer Ressource

Unter "Bekannte Probleme" heißt es in dem Blog-Beitrag, dass "Änderungen übernehmen" manchmal langsamer ausgeführt wird als die Vorgängerfunktion "Sofortige Ausführung", da Google bei dieser neuen Funktion zunächst der Stabilität den Vorrang vor der Leistung einräumte. Außerdem werden x86_x64-Emulator-Images nicht unterstützt. und für Debugging-Zwecke wird nur Android Pie (API Level 28) unterstützt. Die vollständige Liste der Einschränkungen und bekannten Probleme finden Sie unter dem folgenden Quelllink.

Für eine detailliertere Beschreibung des Unterschieds zwischen "Apply Changes" und "Instant Run" hatte ein Google-Mitarbeiter des Android Studio-Teams Folgendes zu Reddit gesagt:

Es macht etwas sehr, sehr anderes. Instant Run hatte einen sehr spezifischen Einfluss auf die Erstellung und instrumentierte jede Ihrer Klassen zur Kompilierungszeit, um sie darauf vorzubereiten, während der Laufzeit durch eine neue Version der Klasse ersetzt zu werden. Außerdem wird Ihr APK in mehrere APKs aufgeteilt, um Ihre App schrittweise erneut hochzuladen.

Änderungen anwenden macht nichts dagegen. Ihr APK ist sehr ähnlich, egal ob Sie Änderungen anwenden oder nicht. Stattdessen werden neue Funktionen zur Laufzeitinstrumentierung der ART VM verwendet, um Klassen dynamisch neu zu laden und zu ersetzen, während die App ausgeführt wird. Aus diesem Grund sind wesentlich neuere Versionen von Android erforderlich.

"Apply Changes" wird voraussichtlich "Instant Run" in den Kanälen Beta und Stable ersetzen, da Google die Leistung und Stabilität verbessert.


Quelle: Android-Entwickler-Blog