我已在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
位于同步包内,因此class
位于com.jon.aqclient.sync.StubProvider
。我让应用程序运行得很完美,但是在第一次尝试Proguard
并且 mavenizing 项目后,它崩溃了classnotfoundexception
。
我已经对该项目进行了去保护,我尝试使用-keep public class com.jon.aqclient.sync
,然后在Proguard
文件中对project.properties
行进行评论,如下所示
# 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
是相同的,classnotfoundexception
com.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
答案 0 :(得分:0)
Maven将默认输出文件夹更改为target / ...而不是bo bin / classes ...因此设备无法找到类。
要解决这个问题,我必须转到Project-&gt; Properties-&gt; Source,并在底部放置默认输出文件夹{project} / bin / classes。