2016-03-25 5 views
1

Ich benutze JEXL-Bibliothek in meiner App und es scheint, als ob der neue Android Klasse Shrinker es nicht verarbeiten kann.ClassLookupException: Ungültige Klassenreferenz bei Verwendung von Shroker ohne Progard

Hier ist meine Abhängigkeit:

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

Mein Buildtyp wie folgt definiert ist:

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

Und wenn ich versuche, es ich diesen Fehler zu bauen:

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

Obwohl es ohne Probleme baut, wenn ich benutzeProguard opt Ion oder setzen beide minifyEnabled und useProguard auf false

ich weiß, dass javax.script verwendet von JEXL intern auf Android nicht verfügbar ist, aber die Teile, die ich Arbeit ziemlich gut verwenden, so habe ich keine Probleme mit der Verwendung von diese Bibliothek außer dem. Lint löst auch InvalidPackage Art von Fehler aus diesem Grund, aber es kann leicht deaktiviert werden und nicht den Build-Prozess zu verletzen.

Ist es möglich, den neuen Shrinker zu ignorieren und mit den nächsten Schritten wie Lint fortzufahren?

+0

Ich bin mit dem gleichen Problem mit anderen Bibliothek konfrontiert. Haben Sie einen Workaround gefunden? – JFreeman

Antwort

0

Die JEXL-Bibliothek bezieht sich auf javax.script.AbstractScriptEngine und viele andere Klassen, die nicht Teil der Android-Laufzeitumgebung (android.jar) sind. Daher warnt ProGuard, dass etwas kaputt gehen könnte. Wenn Sie sicher sind, dass Ihre Anwendung funktioniert trotzdem, Sie Linien unten in proguard-android.txt

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

Jetzt angeben können, wurden die meisten der Warnungen gegangen, aber nach viel Suche habe ich noch keine Ahnung, So beheben Sie die letzte Warnung:

[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 
Verwandte Themen