使用Proguard后,ContentProvider类无法使用

时间:2014-03-12 13:18:14

标签: android maven proguard

我已在Manifest中定义了此提供程序。

    <provider
        android:name="com.jon.aqclient.sync.StubProvider"
        android:authorities="com.jon.aqclient.provider"
        android:exported="false"
        android:syncable="true" />

应用包是com.jon.aqclientclass位于同步包内,因此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

1 个答案:

答案 0 :(得分:0)

Pff,我已经解决了。这是一个Maven的事情。我不知道是Maven还是Proguard,但是在错误出现之前我做了哪些主要的修改。

Maven将默认输出文件夹更改为target / ...而不是bo bin / classes ...因此设备无法找到类。

要解决这个问题,我必须转到Project-&gt; Properties-&gt; Source,并在底部放置默认输出文件夹{project} / bin / classes。