我的应用程序中有MyContentProvider
,当我在调试模式下开发和运行时,它工作得很好。
<provider android:name=".MyContentProvider"
android:authorities="com.contactcities"
android:exported="false">
</provider>
但当我导出应用程序,下载并运行它时,它立即崩溃:
10-10 18:24:37.682 E/AndroidRuntime(10428): FATAL EXCEPTION: main
10-10 18:24:37.682 E/AndroidRuntime(10428): java.lang.RuntimeException: Unable to get provider com.contactcities.MyContentProvider: java.lang.ClassNotFoundException: com.contactcities.MyContentProvider in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.contactcities-1.apk]
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.app.ActivityThread.installProvider(ActivityThread.java:4509)
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.app.ActivityThread.installContentProviders(ActivityThread.java:4281)
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4237)
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.app.ActivityThread.access$3000(ActivityThread.java:125)
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 18:24:37.682 E/AndroidRuntime(10428): at android.os.Looper.loop(Looper.java:123)
我可以在我的所有设备上重现它,2.2,4.0,4.1
今天我读了很多帖子。他们中的一些人将此归咎于ProGuard。我已经尝试添加
-keep public class com.contactcities.MyContentProvider
但没那么走运。
当我禁用proguard时,通过不在我的project.properties
中放置proguard.config=proguard.cfg
。它仍然在发布版本中给出相同的错误。Debug也没问题。也许这样禁用proguard还不够呢?
也许暗示是它在这次崩溃中引用了maps.jar。我不确定为什么它会这么做
in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar
任何线索都将不胜感激。
发布于 2012-10-16 18:00:55
啊,我以为我试过了,但看起来我没有。
Project
->clean
使其发挥作用
面部掌心
发布于 2014-03-10 18:17:19
我也收到了同样的错误,原来我在AndroidManifest.xml中的提供者标记的android:name
属性值是错误的
<provider
android:authorities="com.example.ProviderClass"
android:name=".ProviderClass"
android:exported="false" >
</provider>
因此,仔细检查这个值是否与上面的.ProviderClass
相同,或者您的类名是什么(前缀是一个点)。然后执行Project > Clean,它就会起作用。
发布于 2016-02-11 21:07:05
authority属性需要与内容授权匹配,而name属性需要与Custom Provider类的类名匹配。
例如:
<provider
android:authorities="com.richa.myapp"
android:name=".data.CustomProvider"/>
https://stackoverflow.com/questions/12824751
复制相似问题