安卓应用启动时代码出现异常

9
在Google Play开发者控制台的“崩溃和ANR”中,我收到了这样的报告:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.res.Resources.getAssets()' on a null object reference
at android.app.LoadedApk.getAssets(LoadedApk.java:590)
at android.app.LoadedApk.makeApplication(LoadedApk.java:646)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5088)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5944)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

这个有问题的设备是Galaxy S4,并且运行Android 5.0。可能的原因是:我的代码中没有任何一行,为什么会失败?非常感谢!

但是你的应用在你的设备/大多数用户的设备上运行正常吗? - Anubian Noob
是的。但我最近已经将其部署到生产环境中,因此没有太多的统计数据。 - sberezin
你确认了吗 - 你已经在5.0上测试过了,对吧? - Anubian Noob
是的。它在几个已知的5.0设备上都可以正常运行。 - sberezin
2
我也遇到过这个问题,而且经常发生。getAssets()不是我们代码中的内容,而是操作系统的代码。很可能是这个bug:https://code.google.com/p/android/issues/detail?id=56296。请给它点赞以引起更多关注。 - Randy Sugianto 'Yuku'
我刚刚遇到了同样的错误,有没有新的解决方案? - Lucky_girl
3个回答

4
我也在我的控制台中看到了这个问题。当用户在应用程序正在更新时启动应用程序或刚刚更新后启动应用程序时,似乎会出现此问题。
一个可能的解决方法是检查应用程序启动时getResources是否返回null,如果是,则杀死它:
public class DevToolsApplication extends Application { 
    private static final String TAG = "DevToolsApplication"; 

    @Override 
    public void onCreate() { 
        super.onCreate(); 
        AppLogger.i(TAG, "app start..."); 
        checkAppReplacingState(); 
    } 

    private void checkAppReplacingState() { 
        if (getResources() == null) { 
            AppLogger.w(TAG, "app is replacing...kill"); 
            Process.killProcess(Process.myPid()); 
        } 
    } 
} 

请查看此链接以获取更多信息:https://issuetracker.google.com/issues/36972466

1

请确保无论何处调用getAssets(),都按以下方式调用:

getApplicationContext().getAssets()

似乎你正在调用getAssets()的类中没有可用的应用程序上下文,因此它为null。

2
谢谢您的建议,但我没有在任何地方调用getAssets()。顺便说一下 - 我的应用程序的资产文件夹是空的。 - sberezin

0

AndroidManifest.xml文件中添加以下覆盖层时,我遇到了相同的异常。即使删除了覆盖层代码,仍然会出现上述异常。

<overlay android:targetPackage="com.android.systemui"
             android:priority="1"/>

先完全关闭Android Studio。然后再次打开项目。清理并构建,异常就会被清除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接