Android熱修復比較選択

4415 ワード

熱修復のメリット:
  • は迅速に修復でき、オンラインBugによる業務損失を回避し、損失を最小限に抑えることができる.
  • クライアントの更新率を保証し、ユーザーがバージョンアップインストールを行う必要がない
  • は良好なユーザー体験であり、異常の修復を感知していない.ユーザーのダウンロードインストールコストを削減します.

  • シナリオの比較
    Sophix
    Tinker
    nuwa
    AndFix
    Robus
    Amigo
    クラス置換
    yes
    yes
    yes
    no
    no
    yes
    So置換
    yes
    yes
    no
    no
    no
    yes
    リソース置換
    yes
    yes
    yes
    no
    no
    yes
    フルプラットフォームサポート
    yes
    yes
    yes
    no
    yes
    yes
    即時有効化
    同時サポート
    no
    no
    yes
    yes
    no
    せいのうそんしつ
    より少ない
    より小さい
    より大きい
    より小さい
    より小さい
    より小さい
    パッチ・サイズ
    小さい
    より小さい
    より大きい
    一般
    一般
    より大きい
    開発の透明性
    yes
    yes
    yes
    no
    no
    yes
    複雑さ
    バカアクセス
    複雑
    より低い
    複雑
    複雑
    より低い
    Romボリューム
    より小さい
    Dalvikが大きい
    より小さい
    より小さい
    より小さい
    大きい
    成功率
    高い
    より高い
    より高い
    一般
    最高
    より高い
    ねつ
    高い
    高い
    低い
    低い
    高い
    低い
    オープンソース
    no
    yes
    yes
    yes
    yes
    yes
    料金を取る
    有料(無料しきい値設定)
    有料(ベース版は無料ですが、制限あり)
    無料
    無料
    無料
    無料
    モニタリング
    配布制御と監視の提供
    配布制御と監視の提供
    no
    no
    no
    no
    現在も更新メンテナンス中のテンセントのTinker、アリのSophix、美団のTinkerについて
    1、Tinker
    サービス側はdex差分を行い、差分パケットをクライアントに送信し、ARTモードの機種で元のapkのclassesとローカルに接続する.dexはmergeをして、mergeは新しいmergeになります.dex後にmerge.dexはpathClassLoaderのdexElementを挿入し,原理クラスはQ−Zoneと同じであり,差分パケットの最小化を実現するためにTinkerはDexDiff/DexMergeアルゴリズムを自己研究した.Tinkerはまた、リソースとSoパッケージの更新をサポートし、SoパッチパッケージはBsDiffを使用して生成され、リソースパッチパッケージは直接ファイルmd 5の比較を使用して生成され、リソースが比較的大きい(デフォルトは100 KBより大きいが大きなファイルに属する)場合はBsDiffを使用してファイルに差分パッチを生成する
    利点:ダイナミックダウンコードサポートSoライブラリおよびリソースの置き換えをサポート
    欠点:即時に有効にならないため、次回Tinkerを起動する必要がある既知の問題:TinkerはAndroidManifestの修正をサポートしていない.xml、Tinkerは4つのコンポーネントの追加をサポートしていません(1.9.0はexport以外のActivityの追加をサポートします).Google Playの開発者条項の制限のため、GPチャネルでコードを動的に更新することを提案しない.Android Nでは、パッチがアプリケーションの起動時間にわずかな影響を与える.一部の三星android-21モデルはサポートされておらず、パッチをロードする際に「TinkerRuntimeException:checkDexInstall failed」を自発的に投げ出す.リソース置換では、remoteViewの変更はサポートされていません.たとえばtransitionアニメーション、notification icon、デスクトップアイコンなどです.Tinker性能痛点:Dex合併メモリはvm headに消費され、OOMしやすく、最後に合併に失敗した.自身のappがメモリを占有している場合は、app本システムが殺されやすい可能性があります.
    githubアドレス:https://github.com/Tencent/tinkerdemoアドレス:https://github.com/Tencent/tinker/tree/dev/tinker-sample-androidアクセスガイド:https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97もう一つのパッケージ化されたバカアクセス案は、Tinkerをパッケージ化し、バックグラウンドも実現したが、お金が必要で、自分で遊ぶことができる.http://tinkerpatch.com/Docs/intro
    2、Robust
    Robustプラグインは、各製品コードの各関数に対して、コンパイル・パッケージの段階で自動的にコードを挿入します.if(changeQuickRedirect!=null)を判定することにより、changeQuickRedirectがnullでない場合にpatchを呼び出す.dex内の同名クラスの同名メソッドはhotfixの目的を達成する.
    生成されたpatch.dexには2つの主要クラスがあります.JAvaと修復後の同名クラスAPatch.java.クライアントはpatchを取得する.dex後、patchをDexClassLoaderでロードする.反射はPatchesInfoImplにあるJAvaというclass.このclassのオブジェクトを作成します.そして、このオブジェクトによって置換されたものが誰であるかを知る、その変数changeQuickRedirectにpatchを付与する.dexのAPatchのオブジェクトは、パッチパッケージのメソッドを実行します.
    具体的には、https://zhuanlan.zhihu.com/p/22495059
    利点:Android 2をサポートする性能(メソッド呼び出し、コールドスタート)にほとんど影響しない.3-8.xバージョンの高互換性(Robustは通常のDexClassLoaderの使用のみ)、高安定性、修復成功率99.9%のパッチをリアルタイムで有効化し、サポートメソッドレベルの修復を再起動する必要はありません.静的メソッドサポート増加メソッドとクラスサポートProGuardの混同、インライン、最適化などの操作の欠点が含まれます.コードは侵入式です.既存のクラスに関連コードsoとリソースの置き換えを一時的にサポートしないとapkのボリュームが増大し、平均関数は従来より17.47バイト増加し、10万個の関数は1.67 M増加します.少量のメソッド数を増やし、Robustプラグインを使用すると、元のProGuardに接続できる関数は接続できなくなります
    オープンソースアドレス:https://github.com/Meituan-Dianping/Robust統合ガイド:https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md
    もちろん実際にアリのは最も良いべきで、Sophixは総合的に最適化した産物で、機能が完備して、開発が簡単で透明で、配布と監視管理を提供して、しかし彼は有料で、これはとても気まずいので、これも考慮する必要はありません!
    料金を考慮しない場合は、メソッドレベルのBug修復をサポートし、リソースおよびsoをサポートしない場合は、Robustの使用を推奨します.リソースとsoを同時にサポートする必要がある場合は、Tinkerを推奨します.
    以上のようにTinkerをお勧めします.もう一つの理由はRobustのDemoを自作し、jarパッケージを生成したとき、ずっと報告していたからです.
    avassist.CannotCompileException: [source error] incompatible type for =
    

    これは気まずいです.ずっと原因が見つかりませんでした.
    参照先:https://www.cnblogs.com/popfisher/p/8543973.html https://www.jianshu.com/p/6ae1e09ebbf5
    私の公衆号に注目してください:北風の中で独走するカタツムリ