ホットアップデートについて何を知っていますか?

1.ホットアップデートとは

「熱い」という言葉については、さまざまな見方があります。

  1. アプリデベロッパーの観点から見た「ホット」とは、リリースなしのアップデートの実装を指します。
  2. Googleからの「ホット」は、値を再起動する必要がないことを意味します。

ホットアップデートは、マシンを停止せずにリアルタイムで更新するHotUpdateHotFixです。実際のホットアップデートは、再起動せずに更新することです。Androidでは、完全なリアルホットアップデートに到達できません。

ホットアップデートが登場する前は、リフレクションアノテーション、リフレクションコール、リフレクションインジェクションを通じてクラスの動的な読み込み実現できますホットアップデートの本質は置換です実行時に新しいクラスとリソースファイルのロードを置き換える必要がある場合、それはホットオペレーションと見なすことができます。ホットアップデートは一種のホットオペレーションであり、アプリの実行動作を変更するテクノロジーです。その本質は、フックオペレーションを使用して置き換えることであり、これはコードの侵入的なオペレーションです。

google和苹果是不支持热更新的,只有在中国特殊国情下才出现了这种黑科技,主要是热更新对程序安全性有一定影响。

2.なぜホットアップデートが必要なのですか?

ユーザーエクスペリエンスを改善し(トラフィック、時間、操作の程度を節約)、バグを迅速かつ緊急に修正します。ホットフィックスの目的である修復はすぐに有効になります。

3.主流のホットアップデートプログラム?

まず第一に、私たちは完璧なホットアップデート計画がないことを認識する必要があります。より良いホットアップデートだけです。ホットアップデートは100%の成功率を持っていません。2020年前半の最も強力なホットアップデートプログラムの時点で、私はSophixをお勧めします。

ホットフィックスにはAndroidの基礎知識の多くが含まれます。Android自体はオープンソースであるため、Huawei vivoとXiaomiのいくつかの主要メーカーが、互換性を保つのが難しい、関連する関連コードを変更する場合があります。したがって、熱間補修技術の開発と維持は非常に困難であり、人手と時間を費やしている。現在、TencentやAliなどのいくつかの主要なインターネット企業は、独自の厳しいニーズがあるため、この機能を実装しています。

ホットアップデートの技術ソリューションを3つのタイプに分けます。

  1. TencentシリーズのホットアップデートソリューションTinkerおよびQzone。Tinkerは、Tencent製品のホットアップデートにおける主要なテクノロジーです。
  2. Alibaba、Andfix、Alibaba Hotfix1.X、Sophixのホットアップデートテクノロジー。技術的手法を段階的にアップグレードしていくものと考えることができます。SophixはTinkerとHotFixを技術レベルで組み合わせており、2つの本質と利点を吸収しています。個人的には、2020.05が最もシンプルで実用的で安定した強力なホットアップデートテクノロジーだと私は思っています。
  3. Meituan Dianping RobustやEle.me Amigoなどの他の工場のホットアップデートプログラム
    ここに画像の説明を挿入

4.ホットアップデートの2つの従来の技術ルート

ここに画像の説明を挿入

  1. クラスローディングの置き換え
    ホットアップデートでのクラスローディングの使用については、私の他のブログ「ホットアップデートでのティンカークラスローディングの原則」を確認してください
  2. あるいは、最下層の
    最下部は、ポインターフィールドネイティブモードの操作の変更であるnativite代替実施形態であり、メソッドの代替実装であり、すぐに効果を再開する必要がなく、アプリケーション目的のパフォーマンスオーバーヘッドがありません。
    ここに画像の説明を挿入
    クラスが読み込まれると、クラスの各メソッドは仮想マシンのArtMethodに対応し、Artmethodはクラス、アクセス許可、およびjavaメソッドのコード実行メモリアドレスを記録します。フックを使用して実行時にネイティブポインターを操作することにより、ArtMethodポインターを改ざんするこのメソッドを介して、パッチメソッドArtMethodのメンバー値が古いメソッドに1つずつ割り当てられ、置き換えが行われます。したがって、この種のスキームは時間内に有効になります。

フィールドポインターをネイティブで変更するには、ネイティブレイヤーで3つのステップが必要です。

  • リンクライブラリを開いて操作ハンドルを取得し、ネイティブレイヤーの内部関数を取得し、ClassObjectオブジェクトを取得します。
  • アクセス許可属性をパブリックに変更します
  • 古いメソッドと新しいメソッドのポインタを取得し、新しいメソッドがターゲットメソッドをポイントして、メソッド置換を実装します。

5.QZoneホットアップデート

Qzoneもクラスローディングソリューションであり、修復後、別の.dexに配置され、dexElements配列の上部に挿入され、仮想マシンが修復されたメソッドをロードできるようにします。
ここに画像の説明を挿入
このホットフィックスの1つの大きな問題は、CLASS_ISPREVERIFIEDです。

2つの呼び出し関係クラスが同じDEXにない場合、例外エラーが生成されます。APKがインストールされると、仮想マシンは実行される前に、classes.dexをodexファイルに最適化する必要があります。
このプロセスでは、クラスの検証操作が実行されます。呼び出し関係のクラスがすべて同じDEXにある場合、それらはCLASS_ISPREVERIFIEDマークでマークされ、次にodexファイルが書き込まれます。

6.Tinkerホットアップデート

Tinkerホットアップデートソリューションは、multidexの原理に基づくクラスローディングメソッドを使用します。詳細な原理については、「ホットアップデートTinkerクラスローディングの原則をお読みください
。Qzoneの欠点に対応するため、Tinkerは、patch.dexをelements配列に追加しなくなりました。 patch.dexを定量的に与え、patch.dexを適用されたclasses.dexとマージし、古いDEXファイル全体を置き換えて、修復の目的を達成します。
ここに画像の説明を挿入

利点:
1.検証を防ぐために、コンストラクターにコードを挿入せずにパッケージ全体を合成します。検証と選択はコンパイル中に完了し、ランタイム中には実行されません
。2.パフォーマンスの向上。互換性と安定性は比較的高いです。
3. Tinkerパッチの生成は、Gradleプラグインによって実現され、パッケージ化プロセスは開発者に透過的であり、パッケージに追加の処理は必要ありません。

短所:
1. Qzoneパッチテクノロジーと同様に、即時効果をサポートしていないため、有効にするには再起動する必要があります(ソフトウェアの起動後にリリースされたパッチの場合、2回再起動する必要があります)。ClassLoaderメカニズムを採用
2.アプリケーションをマージするために新しいプロセスを開く必要があり、メモリ消費などの理由で失敗しやすい。
3.マージ時に追加のディスク領域を使用します。複数のDEXアプリケーションの場合、複数のDEXファイルが変更されると、マージ操作のために複数のpatch.dexおよび対応するclasses.dexを発行する必要があります。この状況はさらに深刻になります、したがって、合併プロセスの失敗率は高くなります。
4. Tinkerのアクセスは煩わしく、パッケージングは​​面倒で時間がかかります。

7. Andfixホットアップデート

andfixが置換に使用するホットアップデートプログラムとそのホットアップデートプロセス。
ここに画像の説明を挿入
AndfixのArtMethodメソッドの構造は、Androidオープンソースコードに基づいています。国内メーカーのカスタマイズに直面すると、多くの場合、2つの間のArtMethodメソッドの構造に一貫性がなくなります。これも互換性の問題の根本的な原因です。
Andfixの利点:

  1. BUG修復の即時性、アプリケーションへの侵入なし、ほとんどパフォーマンスの損失なし
  2. パッチパッケージも差分技術を使用しており、生成されたパッチはサイズが小さい

不十分:

  1. 新しいフィールドの追加、メソッドの変更、リソースの置き換えはサポートしていません。
  2. メーカーのカスタムROMのため、一部のモデルはサポートされていません。

8. Sophixホットアップデート

Sophixは、Alibaba Cloudが提供するフルプラットフォームのアプリホットリペアサービスソリューションです。この製品は、Alibabaの最初のホットパッチテクノロジーに基づいており、最もきめ細かなサーマルリペア機能を提供するため、オンラインの問題のリアルタイムの修復を待つ必要がありません。
Sophixホットアップデートの本質には、2つのアップデートスキームがあります。それは、ボトムメソッド置換+クラスローディング置換です。そのパッチパッケージは.jar形式です。

Andfixの根本的な置換互換性の問題を解決するために、Sophixはいくつかの追加の最適化を行いました。Sophixは、ArtMethodのサイズを(cレイヤーのmempy(dest、src、size)メソッドを介して)動的にテストすることにより、完全なコピーを作成します。現在の仮想マシンのArtMethodが均一にコピーされている限り、異なる仮想マシンによって引き起こされるArtMethod構造の置き換えを排除できます。

利点:

  1. Sophixは、基になる置換の変更の適時性とクラス読み込みスキームの互換性を備えています。Sophixは、Baichuan HotfixとTinkerの利点を存続期間にわたって吸収し、パッチ適用時に選択するスキームを自動的に決定します。
  2. Sophixは、非侵入型のアクセスとパッケージ化、低アクセスコスト、グラフィカルパッチの生成、および「ばかげたアクセス」を使用します。
  3. Aliは、開発者がサーバーで管理機能を開発する必要がないパッチ管理プラットフォームについて言及しました。
  4. 一部のアップデートはソフトウェアを再起動する必要がなく、ダウンロードされたパッチは非常に小さいため、他のソリューションと比較して、2つのアップデートソリューションによる修復の成功率は非常に高くなっています。

総括する

私は、BuglyのTinkerとAliのSophixに基づく2つのホットアップデートソリューションのみを使用しました。Sophixを強くお勧めします。無料ですが、Buglyの使用をお勧めしません。

  1. Buglyの無料のホットアップデートは、サービスの質が低く、技術的なQQサポートグループが100年間応答していないことを意味します。技術者があなたの質問に回答することを期待しないでください。SophixはDingding Groupを技術サポートに使用しており、技術サポートの応答速度と態度は非常に異なります。
  2. サーバーは時々クラッシュし、フルアップデート、ホットアップデートは使用を恐れています。このサーバーのダウンタイムは、大きな工場の威厳に本当に有害です。
  3. 同じバージョンの場合、Buglyに統合されたTinkerにパッチを適用できるのは1回だけで、2回目に失敗します。Sophixは同じバージョンに複数回パッチを適用して修正できます
  4. Tinkerのアクセスとパッケージ化は厄介で、コードは非常に侵襲的です。Sophixへのアクセスは、シンプルでバカに似たパッケージです。

追記:
Alibabaにはテクノロジー開発のエコロジーチェーンの完全なセットがあります。サーバー、バックエンド、データベース、モバイルテスト、プッシュなどのためにAlibaba Cloudに接続できます。

ブログの執筆は簡単ではありませんが、記事に問題がないと思われる場合は、気に入ってください^ _ ^!

関連リンク
1. ART、Dalvik、JVMの関係を理解し​​ていますか?
2. ホットアップデートTinkerクラスのロード原則
3. ホットアップデートSophixロードクライミング

おすすめ

転載: blog.csdn.net/luo_boke/article/details/106146604