1

Jodd 是一个很棒的库,但是当我在 Proguard 的应用程序的发布版本中使用它时遇到了麻烦。它发生在以下代码行引发下面详述的异常L

            BeanCopy.beans(source, destination).copy();

然而,在异常发生之前,如果我选择在 gradle 构建期间不禁止显示警告,则会出现几个涉及未包含在 Android 运行时中的类的警告,例如:

Warning:jodd.util.ClipboardUtil: can't find referenced class java.awt.datatransfer.StringSelection

这是抛出的异常:

11-19 23:45:00.458 16897-16897/com.myfab5.mobile.debug D/AndroidRuntime: Shutting down VM
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime: FATAL EXCEPTION: main
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime: Process: com.myfab5.mobile.debug, PID: 16897
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime: java.lang.ExceptionInInitializerError
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.e.c.a(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.a.g.a(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.a.g.a(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.a.g.b(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.a.a.a(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at com.myApp.android.services.copyBeans(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at com.google.android.gms.location.internal.zzk$zzb.handleMessage(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:145)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:6837)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:  Caused by: java.lang.IllegalArgumentException: Invalid module: class b.e.j
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.a.a(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:     at b.e.j.a(Unknown Source)
11-19 23:45:00.468 16897-16897/com.myfab5.mobile.debug E/AndroidRuntime:    

有谁知道如何解决这一问题?Jodd 可以与 Proguard 一起成功使用吗?

4

1 回答 1

1

是的:) 你有几个选择:

  • 首先,您可以使用jodd-mobile.jar. 这个移动版本是核心、bean 和 props 模块的小包,没有所有系统类,比如ClipboardUtil(顺便说一句,我今天要删除 :)

  • 其他解决方案是微调 proguard 以跳过 Jodd 类,因此您可以在您的 proguard 配置中放置类似这样的内容:

-keep class javax.** { *; }
-keep class jodd.** { *; }
-keep class twitter4j.** { *; }
  • 如果您喜欢冒险,您可以通过自己的脚本从 Jodd jar 中删除有问题的类。

就是这样。享受乔德!

于 2015-11-20T08:34:28.530 回答