【问题标题】:Android App is crashing when installing through Eclipse通过 Eclipse 安装时,Android 应用程序崩溃
【发布时间】:2012-03-12 12:27:29
【问题描述】:

每次通过 Eclipse 重新安装时,都会出现以下异常。 每次我重新安装当前处于前台的应用程序时都会发生这种情况。

我希望这个错误只会在开发过程中发生,因为我会通过 Eclipse 卸载正在运行的应用程序。

有人在用户手机上看到过这个错误吗?

当我切换到带有 ICS 的 Galaxy Nexus 时,这开始发生在我身上。

02-22 11:31:07.098: E/AndroidRuntime(479): FATAL EXCEPTION: main
02-22 11:31:07.098: E/AndroidRuntime(479): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.LoadedApk.makeApplication(LoadedApk.java:466)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.ActivityThread.access$2200(ActivityThread.java:117)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.os.Looper.loop(Looper.java:123)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-22 11:31:07.098: E/AndroidRuntime(479):  at java.lang.reflect.Method.invokeNative(Native Method)
02-22 11:31:07.098: E/AndroidRuntime(479):  at java.lang.reflect.Method.invoke(Method.java:507)
02-22 11:31:07.098: E/AndroidRuntime(479):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-22 11:31:07.098: E/AndroidRuntime(479):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-22 11:31:07.098: E/AndroidRuntime(479):  at dalvik.system.NativeStart.main(Native Method)
02-22 11:31:07.098: E/AndroidRuntime(479): Caused by: java.lang.NullPointerException
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:346)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.LoadedApk.getClassLoader(LoadedApk.java:291)
02-22 11:31:07.098: E/AndroidRuntime(479):  at android.app.LoadedApk.makeApplication(LoadedApk.java:458)
02-22 11:31:07.098: E/AndroidRuntime(479):  ... 11 more

在上面的日志中,我没有找到任何与我的应用程序相关的东西。但它仍然崩溃。

谁能告诉我这是什么原因?这是 Galaxy Nexus 上冰淇淋三明治中的错误吗?

【问题讨论】:

  • 你能上传你的代码吗?
  • 为什么要对此投反对票,这与我的应用程序无关>
  • 你被否决了,因为你什么都没问。
  • 您说通过 Eclipse 重新安装时会发生这种情况。在这次崩溃之后,您可以通过从已安装应用程序列表中选择它来正常启动应用程序吗?还是总是崩溃?
  • @DavidWasser 不,它没有崩溃。我可以通过从已安装的应用程序中选择它来启动和使用它。

标签: android eclipse crash


【解决方案1】:

当 XML 中的某些内容出错时我遇到了这个问题,也许你只需要重新生成你的 R.java

【讨论】:

    【解决方案2】:

    我最近遇到了这个问题,但出现在 IDEA 中。我不得不将中间项目切换到 Eclipse - 哎哟!我在这里没有得到很好的答案,最终,在我完成项目后,我回到 IDEA 并再次尝试。最终的解决方案是将项目移出我的工作区,删除除我的源和资源之外的所有内容,然后从现有源创建一个新项目。我浪费了几个小时试图弄清楚这一点,它可能只适用于 Eclipse。值得一试...

    祝你好运

    【讨论】:

      【解决方案3】:

      initializeJavaContextClassLoader 方法的第 346 行有一个空指针。

      02-22 11:31:07.098: E/AndroidRuntime(479): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:346)
      

      编辑

      这里是来自GrepCode/com.google.android/android/2.3_r1/ android.app.LoadedApk的方法(从line 326开始)

      private void initializeJavaContextClassLoader() {
          IPackageManager pm = ActivityThread.getPackageManager();
          android.content.pm.PackageInfo pi;
          try {
              pi = pm.getPackageInfo(mPackageName, 0);
          } catch (RemoteException e) {
              throw new AssertionError(e);
          }
          /*
           * Two possible indications that this package could be
           * sharing its virtual machine with other packages:
           *
           * 1.) the sharedUserId attribute is set in the manifest,
           *     indicating a request to share a VM with other
           *     packages with the same sharedUserId.
           *
           * 2.) the application element of the manifest has an
           *     attribute specifying a non-default process name,
           *     indicating the desire to run in another packages VM.
           */
          boolean sharedUserIdSet = (pi.sharedUserId != null);
          boolean processNameNotDefault =
                  (pi.applicationInfo != null &&
                  !mPackageName.equals(pi.applicationInfo.processName));
          boolean sharable = (sharedUserIdSet || processNameNotDefault);
          ClassLoader contextClassLoader =
                  (sharable)
                  ? new WarningContextClassLoader()
          : mClassLoader;
                  Thread.currentThread().setContextClassLoader(contextClassLoader);
      }
      

      您似乎正在尝试与另一个包共享虚拟机。

      【讨论】:

      • 是的,我知道,但是这个 LoadedApk.java 是系统相关的类,我可以用我的代码做什么。是不是我的模拟器问题。
      • 不,它不是你的模拟器。是的 LoadedApk.java 是一个与系统相关的文件,但它是您对该方法所做的事情。这是你的代码,我几乎可以保证!
      • 我在代码中的任何地方都没有使用这种方法。将 apk 加载到设备时使用此类,然后我在代码中为此做了什么。
      • @DDoSAttack 我总是责怪程序员而不是框架。并且它仍然可能是导致此错误的应用程序设置中的错误。但是空指针异常完全超出了程序员的范围。你的回答没有帮助。
      • @Janusz 我不同意。正如您所说,这可能是应用程序设置错误。这仍然在开发人员的能力范围内。在正常情况下,开发人员没有理由需要更改我发布的代码。我有它来显示它失败的地方和原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多