【问题标题】:Using Jodd on Android with proguard在带有 proguard 的 Android 上使用 Jodd
【发布时间】:2015-11-20 05:06:06
【问题描述】:

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 一起成功使用吗?

【问题讨论】:

    标签: android android-proguard jodd


    【解决方案1】:

    是的 :) 您有多种选择:

    • 首先,您可以使用jodd-mobile.jarThis mobile version 是一小部分核心、bean 和 props 模块,没有所有系统类,例如 ClipboardUtil(顺便说一句,我今天要删除 :)

    • 其他解决方案是微调 proguard 以跳过 Jodd 类,因此您可以在 proguard 配置中添加如下内容:

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

    就是这样。享受乔德!

    【讨论】:

    • 非常感谢您的回答!我在我的 gradle 脚本中包含了 jodd,如下所示: compile 'org.jodd:jodd-bean:3.6.6' 我认为这只会包含必需的类,我现在将尝试使用移动 jar。再次感谢!
    • 我尝试了移动jar,我现在得到的唯一错误是:code Warning:jodd.util.PropertiesUtil$1: can't find referenced class jodd.io.findfile.* (multiple variations of this) code Warning:jodd.datetime.JDateTime: can't find referenced class jodd.util.HashCode code Warning:jodd.datetime.format.Iso8601JdtFormatter: can't find referenced class jodd.util.DateFormatSymbolsEx
    • 好吧,我可能有一段时间没有更新移动应用了:) 无论如何,这些只是警告,你应该可以继续使用它,对吧?
    • 我忽略了警告,它编译得很好,但是尝试 BeanCopy 从上面抛出了同样的异常。 :(
    • 天哪,我太傻了。我的包名有错别字。现在效果很好,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多