2016-04-03 75 views
1

最近我完成了在Android的建设大项目,最后要求之前公布的是,它会被编译启用Proguard的,而且我认为他会在项目中最简单的部分,但对我来说却是非常糟糕的经历。Proguard的生产运行时错误

在我用了几个第三方库,至少从我目前的检查项目,似乎所有的人都工作正常,我的Proguard的配置。

有问题的库是JWT: JSON Web Token for Java and Android,它没有关于如何使用Proguard配置它的文档,我尝试了很多不同的配置,但没有解决这个问题。

Jwts.builder();

和错误如下:

java.lang.ExceptionInInitializerError at io.jsonwebtoken.Jwts.builder(ProGuard:116) at com.cineworld.app.screen_options.webpage.PurchaseWebPage.GenerateToken(ProGuard:216) at com.cineworld.app.screen_options.webpage.PurchaseWebPage.onCreateView(ProGuard:142) at android.app.Fragment.performCreateView(Fragment.java:1699) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) at android.app.BackStackRecord.run(BackStackRecord.java:682) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ExceptionInInitializerError at io.jsonwebtoken.impl.DefaultJwtBuilder.(ProGuard:42) at io.jsonwebtoken.Jwts.builder(ProGuard:116)  at com.cineworld.app.screen_options.webpage.PurchaseWebPage.GenerateToken(ProGuard:216)  at com.cineworld.app.screen_options.webpage.PurchaseWebPage.onCreateView(ProGuard:142)  at android.app.Fragment.performCreateView(Fragment.java:1699)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)  at android.app.BackStackRecord.run(BackStackRecord.java:682)  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)  at android.os.Handler.handleCallback(Handler.java:725)  at android.os.Handler.dispatchMessage(Handler.java:92)  at android.os.Looper.loop(Looper.java:137)  at android.app.ActivityThread.main(ActivityThread.java:5041)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:511)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.ExceptionInInitializerError at com.a.a.c.ad.(ProGuard:209) at io.jsonwebtoken.impl.DefaultJwtBuilder.(ProGuard:42)  at io.jsonwebtoken.Jwts.builder(ProGuard:116)  at com.cineworld.app.screen_options.webpage.PurchaseWebPage.GenerateToken(ProGuard:216)  at com.cineworld.app.screen_options.webpage.PurchaseWebPage.onCreateView(ProGuard:142)  at android.app.Fragment.performCreateView(Fragment.java:1699)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)  at android.app.BackStackRecord.run(BackStackRecord.java:682)  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)  at android.os.Handler.handleCallback(Handler.java:725)  at android.os.Handler.dispatchMessage(Handler.java:92)  at android.os.Looper.loop(Looper.java:137)  at android.app.ActivityThread.main(ActivityThread.java:5041)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:511)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.NoSuchFieldError: PUBLIC_ONLY at java.lang.Class.getDeclaredAnnotation(Native Method) at java.lang.Class.getAnnotation(Class.java:260) at com.a.a.c.f.ac.(ProGuard:172) at com.a.a.c.ad.(ProGuard:209)  at io.jsonwebtoken.impl.DefaultJwtBuilder.(ProGuard:42)  at io.jsonwebtoken.Jwts.builder(ProGuard:116)  at com.cineworld.app.screen_options.webpage.PurchaseWebPage.GenerateToken(ProGuard:216)  at com.cineworld.app.screen_options.webpage.PurchaseWebPage.onCreateView(ProGuard:142)  at android.app.Fragment.performCreateView(Fragment.java:1699)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)  at android.app.BackStackRecord.run(BackStackRecord.java:682)  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)  at android.os.Handler.handleCallback(Handler.java:725)  at android.os.Handler.dispatchMessage(Handler.java:92)  at android.os.Looper.loop(Looper.java:137)  at android.app.ActivityThread.main(ActivityThread.java:5041)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke

有人引导,只有当我把这个行代码(从调用该库中的类)发生

错误我以正确的方式来处理这个问题?

回答

1

如果你想简单地防止整个Java包被混淆,因为它太耗费时间搞清楚一两件事,地方出了错,你可以添加以下到您的ProGuard规则文件:

-keep class io.jsonwebtoken.** { 
    public protected private *; 
} 

规则通常在您项目的proguard-rules.pro文件中。

+0

这是什么是如此令人沮丧的,它只是一个** **的事情,但无论怎样我试过,没有奏效。我添加了你的建议,但崩溃仍然发生,也尝试了不同的变体,例如'-keepclassmembers class io.jsonwebtoken.Jwts {*; }',但同样,没有工作,我不知道该怎么做,似乎是在错误是,其中返回式_DefaultJwtBuilder_的新对象库中的特定功能来了,你能不能帮我缩小问题基于那个?我需要Proguard的简单地完全忽略这个库,但它似乎没有这样做... – Nadav96

+0

谷歌搜索“Java的PUBLIC_ONLY”认为这是第二击:http://stackoverflow.com/questions/27184247/java-lang -nosuchfielderror公有制只,同时,利用现成的API功能于Android的中签 –

相关问题