2024年Go最新Google App Crash 参考解决方案(3),2024年最新Golangframework面试题

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

              throw e.rethrowFromSystemServer();

          } catch (IllegalArgumentException e) {

              //com.google.android.gms.ui Service not registered Crash

                              android.util.Log.e("wjwj","---ContextImpl GMS Crash---");

              e.printStackTrace();

          }



      } else {

          throw new RuntimeException("Not supported in system context");

      }

  }

  ... ... 

}




*   3.修改思路:  

    在`ContextImpl`的`unbindService` 方法中`try-catch`抓住代码中抛出的异常`IllegalArgumentException`。

    



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWJ6V3J6cGlidHpUR2g2Sk9tWDRHM3FRVnlpYlVTV1Y3ZzNuaWFaT0kwWERxN2FwMGt1Y3NZRFBERGcvNjQw?x-oss-process=image/format,png)



在ContextImpl的unbindService 方法中try-catch IllegalArgumentException



二、gms.ui BadTokenException Crash

================================



1.Crash Log如下:

--------------



12-31 21:01:26.711 3776 3776 E AndroidRuntime: FATAL EXCEPTION: main

12-31 21:01:26.711 3776 3776 E AndroidRuntime: Process: com.google.android.gms.ui, PID: 3776

12-31 21:01:26.711 3776 3776 E AndroidRuntime: android.view.WindowManager$BadTokenException:

                                              Unable to add window -- token android.os.BinderProxy@f176911 is not valid; is your activity running?

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at android.app.Dialog.show(Dialog.java:319)

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at com.google.android.location.network.ConfirmAlertChimeraActivity.a(:com.google.android.gms:164)

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at rzo.onServiceConnected(:com.google.android.gms:71)

12-31 21:01:26.711 3776 3776 E AndroidRuntime: at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1223)




![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWJlSzZSelNaVEY3YU4xUEdtRm4yQU80ZXBWUENZekxpYnJ6a01aM0JIZEtvOEkwUHJWRENpY1B4US82NDA?x-oss-process=image/format,png)



Unable to add window -- token android.os.BinderProxy@f176911 is not valid; is your activity running



2.解决方案如下

--------



主要修改类:  

`frameworks/base/core/java/android/view/ViewRootImpl.java`



在 `ViewRootImpl`类中,解决恢复出厂设置后的问题,修改方案如下:



public class ViewRootImpl extends AbsViewRootImpl implements ViewParent,

       View.AttachInfo.Callbacks, ThreadedRenderer.DrawCallbacks {



        ... ...

     

    public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {

      synchronized (this) {

           if (mView == null) {

               mView = view;

          ... ...



            if (res < WindowManagerGlobal.ADD_OKAY) {

                   mAttachInfo.mRootView = null;

                   mAdded = false;

                   mFallbackEventHandler.setView(null);

                   unscheduleTraversals();

                   setAccessibilityFocus(null, null);

                   switch (res) {

                       case WindowManagerGlobal.ADD_BAD_APP_TOKEN:

                       case WindowManagerGlobal.ADD_BAD_SUBWINDOW_TOKEN:

                           // add by wangjie for com.google.android.gms.ui crash

                           int deviceProvisioned = android.provider.Settings.Global.getInt(mContext.getContentResolver(), android.provider.Settings.Global.DEVICE_PROVISIONED,0);

                           if(deviceProvisioned==0){

                              android.util.Log.e("wjwj","---ViewRootImpl GMS Crash---");

                              return;

                           }else{

                               throw new WindowManager.BadTokenException(

                                    "Unable to add window -- token " + attrs.token

                                    + " is not valid; is your activity running?");

                           }

                           // add by wangjie for com.google.android.gms.ui crash

                       case WindowManagerGlobal.ADD_NOT_APP_TOKEN:

                           throw new WindowManager.BadTokenException(

                                   "Unable to add window -- token " + attrs.token

                                   + " is not for an application");

                  ... ...

           }

       }

   }

            ... ...

}




修改差异点如下



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWJvd0lXM2xBQzVxZENMaWJld29aZGljSFhONkJuZDdpYTJleGVzSFhZelNsVHIzalAwTUVudDZGaWFRLzY0MA?x-oss-process=image/format,png)



Unable to add window -- token android.os.BinderProxy@f176911 is not valid; is your activity running?



三、setupwizard ConcurrentModificationException Crash

===================================================



1.Crash Log如下:

--------------



--------- beginning of crash

01-01 12:00:00.918 1583 1583 E AndroidRuntime: FATAL EXCEPTION: main

01-01 12:00:00.918 1583 1583 E AndroidRuntime: Process: com.google.android.setupwizard, PID: 1583

01-01 12:00:00.918 1583 1583 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.TIME_SET flg=0x25200010 } in com.google.android.setupwizard.time.DateTimeMonitor$1@7465601

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.app.LoadedApk R e c e i v e r D i s p a t c h e r ReceiverDispatcher ReceiverDispatcherArgs.lambda − a n d r o i d a p p L o a d e d A p k -android_app_LoadedApk androidappLoadedApkReceiverDispatcher$Args_52497(LoadedApk.java:1323)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.app.- L a m b d a Lambda LambdaaS31cHIhRx41653CMnd4gZqshIQ.$m$7(Unknown Source:4)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.app.- L a m b d a Lambda LambdaaS31cHIhRx41653CMnd4gZqshIQ.run(Unknown Source:39)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:790)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.os.Looper.loop(Looper.java:164)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6523)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: Caused by: java.util.ConcurrentModificationException

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at java.util.ArrayList$Itr.next(ArrayList.java:860)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at com.google.android.setupwizard.time.DateTimeMonitor.updateStatus(DateTimeMonitor.java:134)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at com.google.android.setupwizard.time.DateTimeMonitor.-wrap0(Unknown Source:0)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at com.google.android.setupwizard.time.DateTimeMonitor$1.onReceive(DateTimeMonitor.java:73)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: at android.app.LoadedApk R e c e i v e r D i s p a t c h e r ReceiverDispatcher ReceiverDispatcherArgs.lambda − a n d r o i d a p p L o a d e d A p k -android_app_LoadedApk androidappLoadedApkReceiverDispatcher$Args_52497(LoadedApk.java:1313)

01-01 12:00:00.918 1583 1583 E AndroidRuntime: … 9 more

--------- beginning of system




![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWI4dXF5eXdhMDJyN0pNdzI1eTlkVlNRT1o1Q3o1RHdxcjA2bHVpYTRoaWFlVUdvU1RqWmpadUxSUS82NDA?x-oss-process=image/format,png)



ConcurrentModificationException



2.解决方案如下:

---------



此问题关键在于解决`ConcurrentModificationException`,但是没有`GMS`源码,只能尝试规避方案。  

修改类如下:  

`/frameworks/base/core/java/android/app/LoadedApk.java`



修改点如下:



public final class LoadedApk {

 ... ... 



    final class Args extends BroadcastReceiver.PendingResult {





          public final Runnable getRunnable() {



           ... ...



                  Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "broadcastReceiveReg");

                  try {

                      ClassLoader cl = mReceiver.getClass().getClassLoader();

                      intent.setExtrasClassLoader(cl);

                      intent.prepareToEnterProcess();

                      setExtrasClassLoader(cl);

                      receiver.setPendingResult(this);

                      receiver.onReceive(mContext, intent);

                  } catch (Exception e) {

                      if (mRegistered && ordered) {

                          if (ActivityThread.DEBUG_BROADCAST) Slog.i(ActivityThread.TAG,

                                  "Finishing failed broadcast to " + mReceiver);

                          sendFinished(mgr);

                      }

                      if (mInstrumentation == null ||

                              !mInstrumentation.onException(mReceiver, e)) {

                          Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);

                          //setupwizard TIME_SET RuntimeException Crash

                          if("android.intent.action.TIME_SET".equals(intent.getAction())){

                              if(mReceiver.toString().contains("com.google.android.setupwizard")){

                                  android.util.Log.e("wjwj","---LoadedApk GMS  setupwizard Crash---");

                                  return;

                              }

                          }

                          //setupwizard TIME_SET RuntimeException Crash

                          throw new RuntimeException(

                                  "Error receiving broadcast " + intent

                                          + " in " + mReceiver, e);

                      }

                  }

                         ... ... 

              };

          }

      }  

 

 ... ...

}




修改差异点如下:



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWJtNGxpYnJ3WWpMWFMxYXNtYjU2d0VLb3k2UWlhY3ZJaDF3YnNpY1dpY09rYWxYaWM5ZEhLWDM1TGZQQS82NDA?x-oss-process=image/format,png)



throw new RuntimeException 异常没有被try-catch 导致crash



四、setupwizard ActivityNotFoundException Crash

=============================================



1.Crash Log如下:

--------------



--------- beginning of crash

12-12 15:19:11.984 1471 1471 E AndroidRuntime: FATAL EXCEPTION: main

12-12 15:19:11.984 1471 1471 E AndroidRuntime: Process: com.google.android.setupwizard, PID: 1471

12-12 15:19:11.984 1471 1471 E AndroidRuntime: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.android.wizard.NEXT (has extras) }

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1843)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1557)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:4228)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:4187)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at com.google.android.setupwizard.BaseActivity.startActivityForResult(BaseActivity.java:665)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at com.google.android.setupwizard.BaseActivity.nextAction(BaseActivity.java:651)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at com.google.android.setupwizard.BaseActivity.nextAction(BaseActivity.java:637)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at com.google.android.setupwizard.user.SuggestedActionsActivity.onItemSelected(SuggestedActionsActivity.java:226)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at com.android.setupwizardlib.items.RecyclerItemAdapter$1.onClick(RecyclerItemAdapter.java:106)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at android.view.View.performClick(View.java:5624)

12-12 15:19:11.984 1471 1471 E AndroidRuntime: at android.view.View$PerformClick.run(View.java:22285)




![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWIwWnROSDROU3MwQmJ6dXFGWGVCZGI4S3dOd3VHaHF0ZmtOdjBKek00OE9pYUMxT2VBOVJ0cGlhdy82NDA?x-oss-process=image/format,png)



com.google.android.setupwizard 报错log



2.解决方案如下:

---------



在`Instrumentation`类中对`Google`开机向导进行特殊处理。  

主要修改类如下:  

`/frameworks/base/core/java/android/app/Instrumentation.java`  

主要修改方案如下:



public class Instrumentation {

  ... ... 



  /** @hide */

  public static void checkStartActivityResult(int res, Object intent) {

      if (!ActivityManager.isStartResultFatalError(res)) {

          return;

      }



      switch (res) {

          case ActivityManager.START_INTENT_NOT_RESOLVED:

          case ActivityManager.START_CLASS_NOT_FOUND:

              if (intent instanceof Intent && ((Intent)intent).getComponent() != null)

                  throw new ActivityNotFoundException(

                          "Unable to find explicit activity class "

                          + ((Intent)intent).getComponent().toShortString()

                          + "; have you declared this activity in your AndroidManifest.xml?");

                              //GMS  Setupwizard ActivityNotFoundException Crash

              if("com.android.wizard.NEXT".equals(((Intent)intent).getAction())){

                  android.util.Log.e("wjwj","Instrumentation  GMS  Setupwizard Crash ");

                  return;

              }

              //GMS  Setupwizard ActivityNotFoundException Crash

              throw new ActivityNotFoundException(

                      "No Activity found to handle " + intent);

          case ActivityManager.START_PERMISSION_DENIED:

              throw new SecurityException("Not allowed to start activity "

                      + intent);

          case ActivityManager.START_FORWARD_AND_REQUEST_CONFLICT:

              throw new AndroidRuntimeException(

                      "FORWARD_RESULT_FLAG used while also requesting a result");

          case ActivityManager.START_NOT_ACTIVITY:

              throw new IllegalArgumentException(

                      "PendingIntent is not an activity");

             ... ...

             }

        }

       ... ... 

}




主要修改差异点如下:



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWJYcmtGMVVpYzZpYzRnRmliZUhDVnlnZFRzdExuVUlOMVFYWTlpYUN3VG5rdVpkT2RmNWVCNWNuWnRRLzY0MA?x-oss-process=image/format,png)



Instrumentation 类中对Google 开机向导进行特殊处理下



五、setupwizard On-body ActivityNotFoundException Crash

=====================================================



1.Crash Log如下:

--------------



--------- beginning of crash

12-31 19:00:26.668 2010 2010 E AndroidRuntime: FATAL EXCEPTION: main

12-31 19:00:26.668 2010 2010 E AndroidRuntime: Process: com.google.android.setupwizard, PID: 2010

12-31 19:00:26.668 2010 2010 E AndroidRuntime: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.google.android.gms/com.google.android.gms.trustagent.discovery.OnbodyPromotionActivity}; have you declared this activity in your AndroidManifest.xml?

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:4229)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:4188)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at com.google.android.setupwizard.BaseActivity.startActivityForResult(BaseActivity.java:665)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at com.google.android.setupwizard.BaseActivity.startFirstRunActivityForResult(BaseActivity.java:719)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at com.google.android.setupwizard.user.SuggestedActionsActivity.onItemSelected(SuggestedActionsActivity.java:217)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at com.android.setupwizardlib.items.RecyclerItemAdapter$1.onClick(RecyclerItemAdapter.java:106)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.view.View.performClick(View.java:5675)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.view.View$PerformClick.run(View.java:22641)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:836)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:103)

12-31 19:00:26.668 2010 2010 E AndroidRuntime: at android.os.Looper.loop(Looper.java:203)




![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWJnTFBTT2FQUlpXdnp3aDdjbDQ1SGVyY1llQkdGY3EyaWN4RVZYeWxDcFZGTjdZZmxWVHVDOHdBLzY0MA?x-oss-process=image/format,png)



Unable to find explicit activity class Log



2.解决方案如下:

---------



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6L0tOMUZ1NWR6dzhwNTVCdUtjVnZnc1VpY3oxZXExOWxuaWIzZkFLUFBPcEZJME94R2NHT3o2TEU0aWJVaWFrcnJhNjhoUmhEbThlWUhPeUFNWGxJbTNCTmxiQS82NDA?x-oss-process=image/format,png)



com.google.android.setupwizard 解决方案



六、Google play Service NullPointerException Crash

================================================



1.Crash log

-----------



`Google play Service` 空指针的`Log`由于目前没有找到,后续补上。



2.解决方案如下:

---------



主要修改类:  

`frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java`  

修改方法如下:



public class PackageManagerService extends PackageManagerServiceExAbs

      implements PackageSender {

/**

  * Important: The provided filterCallingUid is used exclusively to filter out activities

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

og`由于目前没有找到,后续补上。

2.解决方案如下:


主要修改类:

frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

修改方法如下:


 public class PackageManagerService extends PackageManagerServiceExAbs

          implements PackageSender {



 /**

      * Important: The provided filterCallingUid is used exclusively to filter out activities


[外链图片转存中...(img-hV0Yx32d-1715380456166)]
[外链图片转存中...(img-dU5su6fn-1715380456166)]
[外链图片转存中...(img-Yeh4eox9-1715380456166)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值