Closed fengfutong closed 7 years ago
请把详细的重现步骤列一下(rom, code, sdk version, etc),谢谢
那我就重新描述一下,重新生成补丁包之后,首次打开一切正常。如果按回退键退出app,那么过一会再次打开,就会有超过三十秒以上的白屏,在某些手机上是直接崩溃。如果是通过系统清理来kill掉app,那么下次打开一切正常。
这是下载补丁打包的log,没有做过滤
05-22 09:23:41.917 30601-31842/? I/ActivityManager: bindServiceLocked, r: ServiceRecord{509cb47 u0 euid: 0 com.dzy.activity/com.dzy.update.PatchDownService}, euid: 0
05-22 09:23:44.214 13126-13221/? I/bspatch.c: 开始打包之。。。。。。
05-22 09:23:44.214 13126-13221/? I/bspatch.c: bspatch
05-22 09:23:44.214 13126-13221/? I/bspatch.c: /data/app/com.dzy.activity-1/base.apk
05-22 09:23:44.214 13126-13221/? I/bspatch.c: /storage/emulated/0/cancer/patch/kaws_patch.apk
05-22 09:23:44.214 13126-13221/? I/bspatch.c: /storage/emulated/0/cancer/patch/kaws.patch
05-22 09:23:44.214 13126-13221/? I/bspatch.c: Point 0
05-22 09:23:44.214 13126-13221/? I/bspatch.c: Patch is opened
05-22 09:23:44.214 13126-13221/? I/bspatch.c: Point 1
05-22 09:23:44.215 13126-13221/? I/bspatch.c: Point 2
05-22 09:23:44.215 13126-13221/? I/bspatch.c: Point 3
05-22 09:23:44.215 13126-13221/? I/bspatch.c: Point 4
05-22 09:23:44.215 13126-13221/? I/bspatch.c: Point 5
05-22 09:23:44.371 13126-13221/? I/bspatch.c: Point 6
05-22 09:23:46.450 13126-13221/? I/bspatch.c: Point 7
05-22 09:23:46.453 13126-13221/? I/bspatch.c: Point 8
05-22 09:23:46.692 13126-13221/? I/bspatch.c: Point 9
05-22 09:23:46.713 13126-13221/? I/bspatch.c: Point 10
05-22 09:23:46.713 13126-13221/? I/bspatch.c: 理论上此处就成功了
05-22 09:23:46.740 13126-13126/? W/PackageParser: Unknown element under
下面是白屏时间出现的bug,用amigo关键字过滤的
05-22 09:26:43.638 13612-13612/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dzy.activity, PID: 13612
java.lang.StackOverflowError: stack size 8MB
at java.util.ArrayList.iterator(ArrayList.java:552)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:105)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.jav
05-22 09:26:46.166 13612-13612/? D/Error: ERR: stack=java.lang.StackOverflowError: stack size 8MB
at java.util.ArrayList.iterator(ArrayList.java:552)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:105)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:114)
at me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(Activit
05-22 09:26:46.201 13612-13612/? E/AndroidRuntime: Error reporting crash
android.os.TransactionTooLargeException: data parcel size 25379616 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:505)
at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4427)
at java.lang.reflect.Method.invoke(Native Method)
at me.ele.amigo.hook.ProxyHook.invoke(ProxyHook.java:36)
at me.ele.amigo.hook.IActivityManagerHook.invoke(IActivityManagerHook.java:35)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy3.handleApplicationCrash(Unknown Source)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90)
at cn.jpush.android.api.c.uncaughtException(Unknown Source)
at com.bugtags.library.obfuscated.cq.uncaughtException(ExceptionHandler.java:55)
at u.aly.j.uncaughtException(CrashHandler.java:37)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
05-22 09:26:46.704 13894-13894/? E/Amigo: #attachApplication: working checksum = 3301199285
05-22 09:26:46.727 13894-13894/? W/PackageParser: Unknown element under
用的手机包括华为H60-L02 android版本6.0 emui 4.0.1 华为FRD-AL00 emui 5.0 android版本7.0 小米MI 4W MIUI版本 miui8 7.3.23 android版本6.0.1
编译环境:android studio2.3/ gradle3.4/amigo0.6.6
具体code是下载成功之后,调用
public static void initAmigo(Context application) {
// 判断是否挂载了SD卡
String patchPath = getPatchDir();
// 没有挂载SD卡,无法保存文件
if (TextUtils.isEmpty(patchPath)) {
return;
}
if (!new File(patchPath + TEMP_PATH_NAME).exists()) {
return;
}
initAmigoPatch(application, patchPath);
}
private static void initAmigoPatch(final Context cancerApplication, String patchPath) {
Observable.just(patchPath)
.map(new Func1<String, String>() {
@Override
public String call(String patchPath) {
try {
boolean scuess = BsPatch.workSync(cancerApplication.getPackageResourcePath(), patchPath + TEMP_APK_NAME, patchPath + TEMP_PATH_NAME);
if (scuess) {
return patchPath + TEMP_APK_NAME;
} else {
return "";
}
} catch (Exception e) {
return "";
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
String patch = getPatchpath();
if (!TextUtils.isEmpty(patch)) {
File fpath = new File(patch);
if (fpath.exists()) {
fpath.delete();
}
}
}
@Override
public void onNext(String apkPatch) {
if (TextUtils.isEmpty(apkPatch)) {
return;
}
File patchFile = new File(apkPatch);
if (!patchFile.exists()) {
return;
}
Amigo.workLater(cancerApplication, patchFile, new Amigo.WorkLaterCallback() {
@Override
public void onPatchApkReleased() {
}
});
}
});
}
收到,我们会尽快按照描述的步骤重现一下
我将amigo生成的补丁apk包导出,将原有的app卸载,通过直接安装补丁apk包的方式,没有出现这个问题
升下级 compile 'me.ele:amigo-lib:0.6.7'
好的。幸苦了
me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:100) 补丁安装成功之后,杀掉app,然后再打开,就白屏,持续时间估计有一分钟。之后每次杀掉重新启动都这样。会是什么问题呢?