1

我在我的应用程序中使用了 JEXL 库,似乎新的 Android 类收缩器无法处理它。

这是我的依赖:

compile 'org.apache.commons:commons-jexl:2.1.1'

我的构建类型定义如下:

    debug {
        versionNameSuffix "-dev"
        minifyEnabled true
        useProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

当我尝试构建它时,我得到了这个错误:

What went wrong: Execution failed for task ':app:transformClassesWithNewClassShrinkerForDebug'.
com.android.build.gradle.shrinker.ClassLookupException: Invalid class reference: javax/script/AbstractScriptEngine

尽管如果我启用useProguard选项或将minifyEnableduseProguard都设置为 false ,它的构建没有任何问题

我知道JEXL 内部使用的javax.script在 Android 上不可用,但我使用的部分工作得很好,所以我在使用这个库时没有任何问题,除此之外。出于这个原因, Lint 也会引发InvalidPackage类型的错误,但它可以很容易地被禁用并且不会损害构建过程。

是否可以让新的收缩器忽略它并像 Lint 那样继续下一步?

4

1 回答 1

0

JEXL 库引用了 javax.script.AbstractScriptEngine 和许多其他不属于 Android 运行时 (android.jar) 的类,因此 ProGuard 会警告某些内容可能已损坏。如果您确定您的应用程序仍然可以正常工作,您可以在 proguard-android.txt 中指定以下行

-dontwarn javax.script.**
-dontwarn org.apache.commons.logging.**
-dontwarn java.beans.**

现在,大部分警告都消失了,但经过大量搜索后,我仍然不知道如何修复最后一个警告:

[proguard] Warning: org.apache.commons.jexl3.scripting.JexlScriptEngine: can't find referenced field 'javax.script.ScriptContext context' in class org.apache.commons.jexl3.scripting.JexlScriptEngine
于 2016-05-15T14:39:14.793 回答