eleme / Amigo

A hotfix library for Android platform, and not just this...
Other
1.37k stars 213 forks source link

java.lang.StackOverflowError #241

Closed fengfutong closed 7 years ago

fengfutong commented 7 years ago

me.ele.amigo.utils.component.ActivityFinder.getActivityInfoInNewApp(ActivityFinder.java:100) 补丁安装成功之后,杀掉app,然后再打开,就白屏,持续时间估计有一分钟。之后每次杀掉重新启动都这样。会是什么问题呢?

FtheGFW commented 7 years ago

请把详细的重现步骤列一下(rom, code, sdk version, etc),谢谢

fengfutong commented 7 years ago

那我就重新描述一下,重新生成补丁包之后,首次打开一切正常。如果按回退键退出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 : meta-data at /storage/emulated/0/cancer/patch/kaws_patch.apk Binary XML file line #40 05-22 09:23:46.793 13126-13126/? W/PackageParser: Unknown element under : meta-data at /storage/emulated/0/cancer/patch/kaws_patch.apk Binary XML file line #40 05-22 09:23:48.749 30601-31214/? I/InputDispatcher: touch process [13126], send to pg 05-22 09:23:50.003 30601-31214/? I/InputDispatcher: Window 'Window{dcefd5b u0 com.dzy.activity/com.dzy.activity.LoginActivity}' spent 2557.5ms processing the last input event: MotionEvent(deviceId=2, source=0x00001002, action=0, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (124.0, 1103.0)]), policyFlags=0x62000000 05-22 09:23:50.005 30601-31214/? I/InputDispatcher: Window 'Window{dcefd5b u0 com.dzy.activity/com.dzy.activity.LoginActivity}' spent 2381.3ms processing the last input event: MotionEvent(deviceId=2, source=0x00001002, action=1, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (124.0, 1103.0)]), policyFlags=0x62000000 05-22 09:24:04.403 13442-13442/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:24:18.319 13612-13612/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:24:18.466 13612-13612/? E/amigo_patch_cleaner: clear old patches 05-22 09:24:18.469 13612-13612/? D/AmigoDirs: deleted old patches 05-22 09:24:18.469 13612-13612/? I/Amigo: #attachPatchApk: success 05-22 09:24:18.493 13612-13612/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:24:18.702 13612-13612/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:24:18.725 13612-13612/? D/ContentProviderFinder: installPatchContentProviders: there is no any new provider 05-22 09:24:18.725 13612-13612/? I/Amigo: installPatchContentProviders done 05-22 09:24:18.738 13612-13612/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:24:19.327 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:19.328 30601-31723/? D/WifiMonitor: WifiMonitor:wlan0 cnt=95 dispatchEvent: CTRL-EVENT-SCAN-STARTED 05-22 09:24:20.157 13612-13612/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 05-22 09:24:21.683 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:21.683 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:21.683 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:21.683 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:21.683 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:21.684 30601-31723/? D/WifiMonitor: Dispatching event to interface: wlan0 05-22 09:24:21.684 30601-31723/? D/WifiMonitor: WifiMonitor:wlan0 cnt=101 dispatchEvent: CTRL-EVENT-SCAN-RESULTS

下面是白屏时间出现的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 : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:26:46.832 13894-13894/? I/Amigo: hook Resources success 05-22 09:26:46.865 13894-13894/? E/amigo_patch_cleaner: clear old patches 05-22 09:26:46.866 13894-13894/? D/AmigoDirs: deleted old patches 05-22 09:26:46.866 13894-13894/? I/Amigo: #attachPatchApk: success 05-22 09:26:46.896 13894-13894/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:26:46.995 13894-13894/? D/Amigo: installAndHook: there is no any new activity, skip hooking instrumentation & mH's callback 05-22 09:26:47.051 13894-13894/? I/Amigo: installHookFactory success 05-22 09:26:47.063 13894-13894/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40 05-22 09:26:47.078 13894-13894/? I/Amigo: dynamic register new receivers done 05-22 09:26:47.081 13894-13894/? I/Amigo: installPatchContentProviders done 05-22 09:26:47.093 13894-13894/? W/PackageParser: Unknown element under : meta-data at /data/data/com.dzy.activity/files/amigo/3301199285/patch.apk Binary XML file line #40

用的手机包括华为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() {

                            }
                        });

                    }
                });

    }
JackCho commented 7 years ago

收到,我们会尽快按照描述的步骤重现一下

fengfutong commented 7 years ago

我将amigo生成的补丁apk包导出,将原有的app卸载,通过直接安装补丁apk包的方式,没有出现这个问题

JackCho commented 7 years ago

升下级 compile 'me.ele:amigo-lib:0.6.7'

fengfutong commented 7 years ago

好的。幸苦了