【发布时间】:2014-03-12 13:18:14
【问题描述】:
我在Manifest 中定义了这个提供程序。
<provider
android:name="com.jon.aqclient.sync.StubProvider"
android:authorities="com.jon.aqclient.provider"
android:exported="false"
android:syncable="true" />
应用包是com.jon.aqclient,class在sync包里面,所以class在com.jon.aqclient.sync.StubProvider里面。我的应用程序运行良好,但在第一次尝试 Proguard 并mavenizing项目后,它会因 classnotfoundexception 而崩溃。
我已经对项目进行了反maven化,我尝试使用-keep public class com.jon.aqclient.sync,现在在project.properties 文件中注释Proguard 行如下。
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
我已经清理了项目,但什么也没有。奇怪的是,如果我将Manifest 中的提供程序定义更改为StubProviderNew,而不进行任何其他更改,error 是相同的,classnotfoundexceptioncom.jon.aqclient.sync.StubProvider,而不是StubProviderNew。
读取该类名的项目在哪里?我怎样才能完全清除这些?
请帮忙!
编辑:
堆栈跟踪:
03-12 15:04:56.259: E/AndroidRuntime(7506): FATAL EXCEPTION: main
03-12 15:04:56.259: E/AndroidRuntime(7506): java.lang.RuntimeException: Unable to get provider com.jon.aqclient.sync.StubProvider: java.lang.ClassNotFoundException: com.jon.aqclient.sync.StubProvider in loader dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.jon.aqclient-2.apk]
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread.installProvider(ActivityThread.java:3709)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread.installContentProviders(ActivityThread.java:3461)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3417)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread.access$2200(ActivityThread.java:123)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:977)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.os.Looper.loop(Looper.java:130)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread.main(ActivityThread.java:3835)
03-12 15:04:56.259: E/AndroidRuntime(7506): at java.lang.reflect.Method.invokeNative(Native Method)
03-12 15:04:56.259: E/AndroidRuntime(7506): at java.lang.reflect.Method.invoke(Method.java:507)
03-12 15:04:56.259: E/AndroidRuntime(7506): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
03-12 15:04:56.259: E/AndroidRuntime(7506): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
03-12 15:04:56.259: E/AndroidRuntime(7506): at dalvik.system.NativeStart.main(Native Method)
03-12 15:04:56.259: E/AndroidRuntime(7506): Caused by: java.lang.ClassNotFoundException: com.jon.aqclient.sync.StubProvider in loader dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.jon.aqclient-2.apk]
03-12 15:04:56.259: E/AndroidRuntime(7506): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
03-12 15:04:56.259: E/AndroidRuntime(7506): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
03-12 15:04:56.259: E/AndroidRuntime(7506): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
03-12 15:04:56.259: E/AndroidRuntime(7506): at android.app.ActivityThread.installProvider(ActivityThread.java:3694)
03-12 15:04:56.259: E/AndroidRuntime(7506): ... 12 more
【问题讨论】:
-
尝试将 authority 属性更改为“com.jon.aqclient.StubProvider”
-
您可能想要发布完整的堆栈跟踪。
-
完成 CommonsWare,这是完整的堆栈跟踪。