Android Studio 3.5 Canaryは、インスタントランの代替品である「Apply Changes」を追加します

Android Studio 3.5(現在CanaryチャンネルとDevチャンネルにあります)には、アプリを再起動せずにコードの変更をアプリにプッシュし、その効果をオンザフライで確認する新しい方法が追加されました。 単に「変更を適用」と呼ばれる、これは以前のバージョンのAndroid Studioの「インスタントラン」機能の後継です。

GoogleのAndroidデベロッパーブログは、変更の適用について次のように述べています。

変更の適用を使用すると、アプリを再起動せずに、場合によっては現在のアクティビティを再起動せずに、実行中のアプリにコードとリソースの変更をプッシュできます。 変更の適用は、Instant Runをビルド最適化のためのまったく新しいアプローチに置き換えます。 ビルド時にAPKのバイトコードを書き換える代わりに、変更の適用は、Android 8.0(APIレベル26)以上でサポートされるランタイムインストルメンテーションを活用して、クラスをその場で再定義します。

さらに、Android Studioは、変更が[変更の適用]と互換性がないことを検出したときに、アプリまたはアクティビティを再起動するかどうかを決定するように求めます。 この追加のコントロールは、インスタントランの動作と比較して、より一貫した予測可能なエクスペリエンスを提供します。

ブログの投稿では、新しい機能に対するいくつかの制限を列挙しています。 たとえば、アプリをテストするデバイスは少なくともAndroid 8.0 Oreo(APIレベル26)を実行している必要があり、アプリの再起動が必要な特定のコード変更があります。 「インスタントラン」と同様に、「変更を適用」は次の場合にアプリを強制的に再起動します。

  • クラス、メソッド、またはフィールドの追加または削除
  • マニフェストを変更する
  • メソッドシグネチャの変更
  • メソッドまたはクラスの修飾子の変更
  • クラスの名前を変更する
  • クラスの継承を変更する
  • リソースの追加または削除

「既知の問題」では、この新しい機能のパフォーマンスよりも安定性を優先していたため、「変更を適用する」はその前の機能である「インスタントラン」よりも実行が遅い場合があると述べています。また、x86_x64エミュレーターイメージはサポートされていません。デバッグのために、Android Pie(API Level 28)のみがサポートされています。 以下のソースリンクで制限と既知の問題の完全なリストを見ることができます。

「Apply Changes」と「Instant Run」の違いの詳細については、Android StudioチームのGoogle社員がRedditで次のように述べています。

それは非常に異なる何かをします。 インスタントランはビルドに非常に具体的な影響を与え、コンパイル時に各クラスをインスツルメントして、実行時にクラスの新しいバージョンで置き換えるための準備をします。 また、APKを複数のAPKに分割して、アプリをさらに段階的に再アップロードします。

変更の適用はそれと同じようなことはしません。 変更の適用を使用してもしなくても、APKはほぼ同じです。 代わりに、ART VMの新しいランタイムインスツルメンテーション機能を使用して、アプリの実行中にクラスを動的にリロードし、置き換えます。 これが、はるかに新しいバージョンのAndroidを必要とする理由です。

「Apply Changes」は、Googleがパフォーマンスと安定性を改善するため、最終的にベータおよび安定チャンネルの「Instant Run」に取って代わります。


出典:Android Developers Blog