1

在我的项目中声明内容提供者时,我遇到了一个奇怪的问题。我正在从我自己的另一个项目中复制类和清单声明。它在我的另一个项目上运行良好。

这是我的清单的一部分:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.qr"
    android:installLocation="auto"
    android:versionCode="540"
    android:versionName="5.4" >

(...)

<application
        android:name=".Application"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:logo="@drawable/ic_launch" >

(...)

<provider
            android:name=".provider.HistoryProvider"
            android:authorities="com.example.qr.History"
            android:exported="true"
            android:multiprocess="true"
            android:readPermission="com.example.qr.History.read"
            android:writePermission="com.example.qr.History.write" />

(...)

    </application>
</manifest>

当我运行我的应用程序时,我得到了这个堆栈跟踪:

 FATAL EXCEPTION: main
 java.lang.NullPointerException
    at android.app.ActivityThread.installProvider(ActivityThread.java:4783)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4430)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4372)
    at android.app.ActivityThread.access$1300(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5039)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)

这是整个堆栈跟踪。不包含“ com.example ”跟踪。当然,我的应用程序中的一些代码会产生这种情况,但实际崩溃发生在 Android 中。

因为我自己的类不包含在堆栈跟踪中,所以我真的不知道在哪里看。

我已经在带有 Android 4.2 的模拟器中运行了代码,并将它与该版本 Android 的源代码进行了比较,所以我知道崩溃是在这行 ActivityThread 中产生的:

4782            ApplicationInfo ai = info.applicationInfo;
4783            if (context.getPackageName().equals(ai.packageName)) {

这是这个类的源代码的链接

如果我不声明内容提供者(即如果我删除来自我的清单),该应用程序运行良好。

我在我的 Application 类以及主 Activity 类中添加了一些日志。崩溃是在任一启动之前产生的。

所以,我的问题是:我的代码中的什么可以在安装过程中产生contextcontext.getPackageName()info.applicationInfo

编辑

在模拟器中多次触发堆栈跟踪时,我只在跟踪之间得到这个:

09-11 23:10:21.250: E/AndroidRuntime(933):  at dalvik.system.NativeStart.main(Native Method)
09-11 23:10:21.470: D/dalvikvm(933): GC_CONCURRENT freed 142K, 9% free 2951K/3224K, paused 78ms+3ms, total 225ms
09-11 23:10:44.030: I/Process(933): Sending signal. PID: 933 SIG: 9
09-11 23:10:46.940: D/dalvikvm(947): GC_CONCURRENT freed 164K, 10% free 2711K/2996K, paused 13ms+114ms, total 201ms
09-11 23:10:47.170: I/ActivityThread(947): Pub com.example.qr.History: com.example.qr.provider.HistoryProvider
09-11 23:10:47.170: D/AndroidRuntime(947): Shutting down VM
09-11 23:10:47.170: W/dalvikvm(947): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
09-11 23:10:47.180: E/AndroidRuntime(947): FATAL EXCEPTION: main
4

0 回答 0