由于特定的第三方库,java Proguard产生运行时错误
最近我用Android完成了一个大项目的构建,发布之前的最后一个要求是,它将使用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 安卓.app.Fragment.performCreateView(Fragment.java:1699) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) at 安卓.app.BackStackRecord.run(BackStackRecord.java:682) at 安卓.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) at 安卓.app.FragmentManagerImpl$1.run(FragmentManager.java:441) at 安卓.os.Handler.handleCallback(Handler.java:725) at 安卓.os.Handler.dispatchMessage(Handler.java:92) at 安卓.os.Looper.loop(Looper.java:137) at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.安卓.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 安卓.app.Fragment.performCreateView(Fragment.java:1699) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) at 安卓.app.BackStackRecord.run(BackStackRecord.java:682) at 安卓.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) at 安卓.app.FragmentManagerImpl$1.run(FragmentManager.java:441) at 安卓.os.Handler.handleCallback(Handler.java:725) at 安卓.os.Handler.dispatchMessage(Handler.java:92) at 安卓.os.Looper.loop(Looper.java:137) at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.安卓.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 安卓.app.Fragment.performCreateView(Fragment.java:1699) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) at 安卓.app.BackStackRecord.run(BackStackRecord.java:682) at 安卓.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) at 安卓.app.FragmentManagerImpl$1.run(FragmentManager.java:441) at 安卓.os.Handler.handleCallback(Handler.java:725) at 安卓.os.Handler.dispatchMessage(Handler.java:92) at 安卓.os.Looper.loop(Looper.java:137) at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.安卓.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 安卓.app.Fragment.performCreateView(Fragment.java:1699) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) at 安卓.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) at 安卓.app.BackStackRecord.run(BackStackRecord.java:682) at 安卓.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) at 安卓.app.FragmentManagerImpl$1.run(FragmentManager.java:441) at 安卓.os.Handler.handleCallback(Handler.java:725) at 安卓.os.Handler.dispatchMessage(Handler.java:92) at 安卓.os.Looper.loop(Looper.java:137) at 安卓.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke
有人能告诉我处理这个问题的正确方法吗
# 1 楼答案
如果您想简单地防止整个Java包被混淆,因为找出一个错误太费时,请尝试将其添加到proguard规则文件中:
这些规则通常在项目的proguard规则中。专业文件