首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法获取提供程序: ClassNotFoundException

无法获取提供程序: ClassNotFoundException
EN

Stack Overflow用户
提问于 2012-10-11 01:10:18
回答 5查看 13.6K关注 0票数 5

我的应用程序中有MyContentProvider,当我在调试模式下开发和运行时,它工作得很好。

代码语言:javascript
运行
复制
<provider android:name=".MyContentProvider"
        android:authorities="com.contactcities"
        android:exported="false">
</provider>

但当我导出应用程序,下载并运行它时,它立即崩溃:

代码语言:javascript
运行
复制
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。我已经尝试添加

代码语言:javascript
运行
复制
-keep public class com.contactcities.MyContentProvider

但没那么走运。

当我禁用proguard时,通过不在我的project.properties中放置proguard.config=proguard.cfg。它仍然在发布版本中给出相同的错误。Debug也没问题。也许这样禁用proguard还不够呢?

也许暗示是它在这次崩溃中引用了maps.jar。我不确定为什么它会这么做

代码语言:javascript
运行
复制
in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar

任何线索都将不胜感激。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-16 18:00:55

啊,我以为我试过了,但看起来我没有。

Project->clean使其发挥作用

面部掌心

票数 4
EN

Stack Overflow用户

发布于 2014-03-10 18:17:19

我也收到了同样的错误,原来我在AndroidManifest.xml中的提供者标记的android:name属性值是错误的

代码语言:javascript
运行
复制
<provider
    android:authorities="com.example.ProviderClass"
    android:name=".ProviderClass"
    android:exported="false" >
</provider>

因此,仔细检查这个值是否与上面的.ProviderClass相同,或者您的类名是什么(前缀是一个点)。然后执行Project > Clean,它就会起作用。

票数 1
EN

Stack Overflow用户

发布于 2016-02-11 21:07:05

authority属性需要与内容授权匹配,而name属性需要与Custom Provider类的类名匹配。

例如:

代码语言:javascript
运行
复制
      <provider
         android:authorities="com.richa.myapp"
         android:name=".data.CustomProvider"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12824751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档