Androidの最も簡単なホットアップデート-Robust使用ピット
TinkerとRobustを見て、普通の修復ならRobustが本当に一番簡単で、最高です.
しかし他の人の書いたことを見ていて、数回の失敗を経て、ついに成功しました.
この問題は私を何日か整えて、穴はここから埋め始めました.
1.パッケージ名
Robustというバグはありますが、パッケージ名がcomでないと先頭の新規クラスには入りません.
2.PatchManipulateImp
①ここのsetLocalPathはファイル名を書くだけで、接尾辞の中はgetの時に自動的に後ろに付けられています(あなたが付けても実は影響はありませんが、名前が1つ増えました.jar、私のような強迫症の人には見ていて気分が悪いです).
②setPatchesInfoImplClassFullNameに書かれているパッケージ名com.xxx.xxxは自由に書くことができます(上の問題のため、やはりcomで始まるのが良いです)、プロジェクトのパッケージ名と一致する必要はありませんが、robust.xmlのpatchPacknameと一致しなければなりません.そして、後ろはきっとPatchesInfoImplの終わりです!!!
③実行中は、次のように、ensurePatchExistメソッドを先に実行します.
そしてverifyPatchを実行
ここで何してるの?patchをコピーします.JArはpatch_temp.jar.最後にpatch_を使うのでtemp.jar実行!!!patchではありません.jar !!!
android熱修復のRobust使用(本格的な入門)
この文章は直接2つの方法をtrueとして書き、LocalPathとTempPathを設定した.そして最後に携帯にプッシュしたのはpatch_temp.jar(では、あなたが設定したLocalPathは何の意味がありますか?)
私が得たのはpatchです.jar、私は直接携帯電話にコピーしたので、理由はもちろんpatch.jarは直接コピーしました.....
だから結果はもちろん、何度もやっても成功しない.
3.権限
私はこの穴を踏んでいませんが、誰かが出会ったことがあるので、必ず動的な申請権限を持ってから実行しなければなりません.
このエラーに基づいて基本的にはこれらです.
次に注意します.
1.必ず加算
2. 必ず正式に包んでください.
4.それぞれのパックが終わったらmapping.txtとmethodsMap.robustは必ず保存し、バージョン番号で命名されたフォルダに保存することをお勧めします.
5.実行時は必ずstart()
上記の問題は多くの人が経験したことがないかもしれませんが、特に最後の1つは、コピーしてどこに貼るかという問題があるからです.コードは自分でノックしたほうがいいです.ノックの過程で多くの穴に遭遇しますが、これらの穴を経験してこそ、その理由がわかります.
公式Demoがあるように公式のDemoでテストします.政府は実は多くの場所であいまいだと言っていますが、ちょうどそれらのあいまいな場所で、使用者は多くの穴を踏んでいます.
例えば、上のpatch_temp.jar.....
しかし他の人の書いたことを見ていて、数回の失敗を経て、ついに成功しました.
java.lang.ClassNotFoundException:
Didn't find class "xxx.xxx.xxx.PatchesInfoImpl" on path:
DexPathList[[],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
この問題は私を何日か整えて、穴はここから埋め始めました.
1.パッケージ名
Robustというバグはありますが、パッケージ名がcomでないと先頭の新規クラスには入りません.
2.PatchManipulateImp
public class PatchManipulateImp extends PatchManipulate {
@Override
protected List fetchPatchList(Context context) {
Patch patch = new Patch();
patch.setName("patch test");
patch.setLocalPath(FileDirectoryUtil.getPatchFile());
patch.setPatchesInfoImplClassFullName("com.xxx.xxx.PatchesInfoImpl");
List patches = new ArrayList<>();
patches.add(patch);
return patches;
}
......
}
①ここのsetLocalPathはファイル名を書くだけで、接尾辞の中はgetの時に自動的に後ろに付けられています(あなたが付けても実は影響はありませんが、名前が1つ増えました.jar、私のような強迫症の人には見ていて気分が悪いです).
②setPatchesInfoImplClassFullNameに書かれているパッケージ名com.xxx.xxxは自由に書くことができます(上の問題のため、やはりcomで始まるのが良いです)、プロジェクトのパッケージ名と一致する必要はありませんが、robust.xmlのpatchPacknameと一致しなければなりません.そして、後ろはきっとPatchesInfoImplの終わりです!!!
③実行中は、次のように、ensurePatchExistメソッドを先に実行します.
@Override
protected boolean ensurePatchExist(Patch patch) {
boolean exist = new File(patch.getLocalPath()).exists();
return exist;
}
そしてverifyPatchを実行
@Override
protected boolean verifyPatch(Context context, Patch patch) {
// app
patch.setTempPath(FileDirectoryUtil.getPatchFile());
//in the sample we just copy the file
try {
copy(patch.getLocalPath(), patch.getTempPath());
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("copy source patch to local patch error, no patch
execute in path "+patch.getTempPath());
}
return true;
}
ここで何してるの?patchをコピーします.JArはpatch_temp.jar.最後にpatch_を使うのでtemp.jar実行!!!patchではありません.jar !!!
android熱修復のRobust使用(本格的な入門)
この文章は直接2つの方法をtrueとして書き、LocalPathとTempPathを設定した.そして最後に携帯にプッシュしたのはpatch_temp.jar(では、あなたが設定したLocalPathは何の意味がありますか?)
私が得たのはpatchです.jar、私は直接携帯電話にコピーしたので、理由はもちろんpatch.jarは直接コピーしました.....
だから結果はもちろん、何度もやっても成功しない.
3.権限
私はこの穴を踏んでいませんが、誰かが出会ったことがあるので、必ず動的な申請権限を持ってから実行しなければなりません.
このエラーに基づいて基本的にはこれらです.
次に注意します.
1.必ず加算
multiDexEnabled true
implementation 'com.android.support:multidex:1.0.3'
2. 必ず正式に包んでください.
signingConfigs {
release {
storeFile file(jks )
storePassword "xxx"
keyAlias "xxx"
keyPassword "xxx"
}
}
dexOptions {
//
jumboMode = true
}
buildTypes {
debug {
debuggable true
minifyEnabled false
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
minifyEnabled true
// resource
shrinkResources true
// Zipalign
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
3. APK
// ,
apply plugin: 'auto-patch-plugin'
// APK
apply plugin: 'robust'
4.それぞれのパックが終わったらmapping.txtとmethodsMap.robustは必ず保存し、バージョン番号で命名されたフォルダに保存することをお勧めします.
5.実行時は必ずstart()
protected void runRobust(){
new PatchExecutor(getApplicationContext(),new PatchManipulateImp(),new
RobustCallbackSample()).start();
}
上記の問題は多くの人が経験したことがないかもしれませんが、特に最後の1つは、コピーしてどこに貼るかという問題があるからです.コードは自分でノックしたほうがいいです.ノックの過程で多くの穴に遭遇しますが、これらの穴を経験してこそ、その理由がわかります.
公式Demoがあるように公式のDemoでテストします.政府は実は多くの場所であいまいだと言っていますが、ちょうどそれらのあいまいな場所で、使用者は多くの穴を踏んでいます.
例えば、上のpatch_temp.jar.....