在 Android 上使用 Jodd 和 proguard
Using Jodd on Android with proguard
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 一起使用吗?
是 :) 您有多种选择:
首先,您可能会使用jodd-mobile.jar
。 This mobile version 是核心、bean 和 props 模块的一小包, 没有 所有系统 类,就像 ClipboardUtil
(顺便说一句,我要删除今天:)
其他解决方案是微调 proguard 以跳过 Jodd 类,因此您可以在您的 proguard 配置中放置类似这样的内容:
-keep class javax.** { *; }
-keep class jodd.** { *; }
-keep class twitter4j.** { *; }
- 如果您喜欢冒险,可以通过自己的脚本从 Jodd jars 中删除有问题的 类。
就是这样。享受乔德!
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 一起使用吗?
是 :) 您有多种选择:
首先,您可能会使用
jodd-mobile.jar
。 This mobile version 是核心、bean 和 props 模块的一小包, 没有 所有系统 类,就像ClipboardUtil
(顺便说一句,我要删除今天:)其他解决方案是微调 proguard 以跳过 Jodd 类,因此您可以在您的 proguard 配置中放置类似这样的内容:
-keep class javax.** { *; }
-keep class jodd.** { *; }
-keep class twitter4j.** { *; }
- 如果您喜欢冒险,可以通过自己的脚本从 Jodd jars 中删除有问题的 类。
就是这样。享受乔德!