2016-03-25 10 views
1

Я использую JEXL-библиотеку в своем приложении, и похоже, что новая усадка класса Android не может ее обработать.ClassLookupException: Недопустимая ссылка класса при использовании shrinker без proguard

Вот моя зависимость:

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 opt ион или установить как minifyEnabled и useProguard ложной

Я знаю, что javax.script используется JEXL внутренне не доступна на Android, но части, которые я использую, работает очень хорошо, поэтому у меня нет никаких проблем с использованием эта библиотека кроме этого. Lint также вызывает ошибку InvalidPackage, но ее можно легко отключить и не повредить процесс сборки.

Возможно ли, чтобы новая термоусадочная пленка игнорировала его и переходила к следующим шагам, например, Lint?

+0

Я столкнулся с той же проблемой с другой библиотекой. Вам удалось найти обходной путь? – JFreeman

ответ

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