最近,我在Android上完成了一个大项目,发布之前的最后一个要求是,它将在启用Proguard的情况下编译,我认为这将是该项目中最简单的部分,但事实证明,这对我来说是一段地狱般的经历。
在这个项目中,我使用了几个第三方库,至少从我目前的检查来看,它们似乎都可以很好地与我的Proguard配置配合使用。
有问题的库是JWT:JSON Web Token for Java和Android,它没有关于如何使用Proguard配置它的文档,我尝试了这么多不同的配置,但都没有解决这个问题。
只有当我将这一行放入代码中(从该库调用类)时,才会发生错误:
Jwts.builder
误差如下:
Java语言lang.ExceptionInInitializerError在io。jsonwebtoken。Jwts。建造商(ProGuard:116)位于com。电影世界。应用程序。screen_选项。网页。购买网页。com上的GenerateToken(ProGuard:216)。电影世界。应用程序。screen_选项。网页。购买网页。android上的onCreateView(ProGuard:142)。应用程序。碎片android上的performCreateView(Fragment.java:1699)。应用程序。碎片管理。android上的moveToState(FragmentManager.java:885)。应用程序。碎片管理。android上的moveToState(FragmentManager.java:1057)。应用程序。回溯记录。在android上运行(backbackrecord.java:682)。应用程序。碎片管理。android上的ExependingActions(FragmentManager.java:1435)。应用程序。FragmentManagerImpl 1美元。在android上运行(FragmentManager.java:441)。操作系统。处理程序。android上的handleCallback(Handler.java:725)。操作系统。处理程序。android上的dispatchMessage(Handler.java:92)。操作系统。活套。android上的loop(Looper.java:137)。应用程序。活动线程。java上的main(ActivityThread.java:5041)。郎。反思。方法java上的InvokEnable(本机方法)。郎。反思。方法在com上调用(Method.java:511)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:793)。Android内部的操作系统。合子岩。dalvik的main(ZygoteInit.java:560)。系统国家艺术。主要(本机方法)原因:java。lang.ExceptionInInitializerError在io。jsonwebtoken。impl。DefaultJwtBuilder。(ProGuard:42)在io。jsonwebtoken。Jwts。建造商(ProGuard:116)
有人能告诉我处理这个问题的正确方法吗?
如果您想简单地防止整个Java包被混淆,因为找出一件出错的事情太耗时,请尝试将其添加到您的proguard规则文件中:
-keep class io.jsonwebtoken.** {
public protected private *;
}
规则通常位于项目的proguard-rules.pro文件中。
第三方库 ThinkCMF 内置了以下第三方库,如果你项目中需要增加其它第三库,也可以通过 composer自己安装,但以后升级应注意不要覆盖 vendor目录,而是使用 composer update去更新第三方库 "topthink/think-orm": "^2.0", "topthink/think-captcha": "^3.0",
你们要爱惜光阴,用智慧与外人交往。你们的言语要常常带着和气,好像用盐调和,就可知道怎样回答各人。(COLOSSIANS 4:5-6) 第三方库 标准库的内容已经非常多了,前面仅仅列举几个,但是Python给编程者的支持不仅仅在于标准库,它还有不可胜数的第三方库。因此,如果作为一个Pythoner,即使你达到了master的水平,在做某个事情之前最好在网上搜一下是否有标准库或者第三方库替你完成。因为
从Gradle Plugin for ProGuard version 4.10之后就开始支持ProGuard。ProGuard插件是自动添加进来的。如果Build Type的runProguard属性被设置为true,对应的task将会自动创建。 android { buildTypes { release { runProguard true
我正在尝试配置ProGuard,但我无法让它工作。 我尝试过这样的事情: 没有任何运气。 不管怎样,我真的不认为忽视是答案。因为那可能意味着有些东西坏了。 有什么提示吗? 谢啦!
数据库 默认情况下,Tendermint使用 syndtr/goleveldb 包作为其进程内键值数据库。不幸的是,LevelDB 的这个实现似乎在重载下受到了影响(参见#226)。最好安装 LevelDB 的真正 c 实现,并使用 make build_c 编译 Tendermint。有关详细信息,请参阅安装说明。 Tendermint 在 $TMROOT/data 中保存多个不同级别的 db