2

SampleSyncAdapter に従っていますが、起動時に SyncAdapter が正しく構成されていないようです。メタデータを読み込もうとするとエラーが報告されます。どうすれば問題を切り分けることができますか? システムに正しく登録されている他のアカウントを確認できます。

ログキャット:

12-21 17:10:50.667 W/PackageManager(  121): Unable to load service info ResolveInfo{4605dcd0 com.myapp.syncadapter.MySyncAdapter p=0 o=0 m=0x108000}
12-21 17:10:50.667 W/PackageManager(  121): org.xmlpull.v1.XmlPullParserException: No android.content.SyncAdapter meta-data
12-21 17:10:50.667 W/PackageManager(  121):     at android.content.pm.RegisteredServicesCache.parseServiceInfo(RegisteredServicesCache.java:391)
12-21 17:10:50.667 W/PackageManager(  121):     at android.content.pm.RegisteredServicesCache.generateServicesMap(RegisteredServicesCache.java:260)
12-21 17:10:50.667 W/PackageManager(  121):     at android.content.pm.RegisteredServicesCache$1.onReceive(RegisteredServicesCache.java:110)
12-21 17:10:50.667 W/PackageManager(  121):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
12-21 17:10:50.667 W/PackageManager(  121):     at android.os.Handler.handleCallback(Handler.java:587)
12-21 17:10:50.667 W/PackageManager(  121):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-21 17:10:50.667 W/PackageManager(  121):     at android.os.Looper.loop(Looper.java:123)
12-21 17:10:50.667 W/PackageManager(  121):     at com.android.server.ServerThread.run(SystemServer.java:570)
12-21 17:10:50.747 D/Sources (  294): Creating external source for type=com.skype.contacts.sync, packageName=com.skype.raider
12-21 17:10:50.747 D/Sources (  294): Creating external source for type=com.twitter.android.auth.login, packageName=com.twitter.android
12-21 17:10:50.747 D/Sources (  294): Creating external source for type=com.example.android.samplesync, packageName=com.example.android.samplesync
12-21 17:10:50.747 W/PackageManager(  121): Unable to load service info ResolveInfo{460504b0 com.myapp.syncadapter.MySyncAdapter p=0 o=0 m=0x108000}
12-21 17:10:50.747 W/PackageManager(  121): org.xmlpull.v1.XmlPullParserException: No android.content.SyncAdapter meta-data
12-21 17:10:50.747 W/PackageManager(  121):     at android.content.pm.RegisteredServicesCache.parseServiceInfo(RegisteredServicesCache.java:391)
12-21 17:10:50.747 W/PackageManager(  121):     at android.content.pm.RegisteredServicesCache.generateServicesMap(RegisteredServicesCache.java:260)
12-21 17:10:50.747 W/PackageManager(  121):     at android.content.pm.RegisteredServicesCache$1.onReceive(RegisteredServicesCache.java:110)
12-21 17:10:50.747 W/PackageManager(  121):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
12-21 17:10:50.747 W/PackageManager(  121):     at android.os.Handler.handleCallback(Handler.java:587)
12-21 17:10:50.747 W/PackageManager(  121):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-21 17:10:50.747 W/PackageManager(  121):     at android.os.Looper.loop(Looper.java:123)
12-21 17:10:50.747 W/PackageManager(  121):     at com.android.server.ServerThread.run(SystemServer.java:570)

また、私の欠陥を指摘する方法でエラーを変更できるかどうかを確認するために、誤った構成を強制しようとしたことにも注意してください。残念ながら、設定ミスのほとんどは (プリ) コンパイラによって検出されます。

アンインストール/インストール後に、同期アダプターのサービス エントリの AndroidManifest.xml 内のメタデータ ノードに対応するこの logcat エントリを見つけることができました。私が調べている非常に重要な手がかりかもしれません。

12-21 18:46:36.026 D/AndroidRuntime(28641): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
12-21 18:46:36.026 D/AndroidRuntime(28641): CheckJNI is OFF
12-21 18:46:36.106 D/AndroidRuntime(28641): --- registering native functions ---
12-21 18:46:36.836 D/PackageParser(  121): Scanning package: /data/app/vmdl13904.tmp
12-21 18:46:36.856 W/PackageParser(  121): Unknown element under <intent-filter>: meta-data at /data/app/vmdl13904.tmp Binary XML file line #254
12-21 18:46:36.856 W/PackageParser(  121): Unknown element under <intent-filter>: meta-data at /data/app/vmdl13904.tmp Binary XML file line #257
12-21 18:46:37.166 D/PackageManager(  121): Scanning package com.myapp
4

2 に答える 2

2

見つけた!案の定、その起動メッセージがエラーを見つけるための鍵でした。マニフェストに間違いがありました。メタデータノードを同期アダプターのインテントフィルター内に配置しました。したがって、私のメタデータはintent-filter内に隠されていました。言うまでもなく、サービスは登録できませんでした。

私は今、私の次のバグに進んでいます:)

このセッションが他の人にも役立つことを願っています。

于 2010-12-22T03:03:44.133 に答える
1

この例外とメッセージを取得する別の方法は、マニフェストのメタデータで名前のスペルを間違えることです。例えば:

<meta-data
            android:name="android.cccontent.SyncAdapter"
            android:resource="@xml/syncadapter" />

あるべき場所:

<meta-data
            android:name="android.content.SyncAdapter"
            android:resource="@xml/syncadapter" />

したがって、代わりに「android.ccc ontent.SyncAdapter」があったため、「 No android.content.SyncAdapter meta-data」です。より微妙な例は、「androi d:c ontent.SyncAdapter」です。これらは両方とも例外をスローします。

org.xmlpull.v1.XmlPullParserException: No android.content.SyncAdapter meta-data
于 2016-04-07T21:58:53.473 に答える