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パッケージを生成したとき、ずっと報告していたからです.
これは気まずいです.ずっと原因が見つかりませんでした.
参照先:https://www.cnblogs.com/popfisher/p/8543973.html https://www.jianshu.com/p/6ae1e09ebbf5
私の公衆号に注目してください:北風の中で独走するカタツムリ
シナリオの比較
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
私の公衆号に注目してください:北風の中で独走するカタツムリ