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.applicationInfonullにすることができるものは何ですか?

編集

エミュレーターでスタック トレースを数回トリガーすると、トレース間でのみ次のようになります。

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