2016-03-22 7 views
0

Ich habe ein Problem beim Kompilieren meines JavaFX-Projekts für Android. Das Projekt enthält eine Reihe von Bibliotheken, darunter Undertow Websockets. Ich habe alle benötigten JARs in mein lib-Verzeichnis heruntergeladen und sie in den Block dependencies/compile files der Datei build.gradle aufgenommen.Stark abgeschnitten Attribut während des Kompilierens von JavaFX Undertow Websets-Projekt für Android mit Jfxmobile-Plugin

konnte ich andere Probleme mit jar-Dateien Abhängigkeiten lösen (meist DuplicateFileException), aber eine Undertow Bibliothek - undertow-Core-1.3.14.Final.jar gibt mir ein wenig Kopfschmerzen.

Als ich hinzufügen, es zu Kompilierung Datei Block gradle.build Datei ‚gradlew android‘ gibt mir eine Fehlermeldung:

Was schief gelaufen ist: Die Ausführung für Aufgabe gescheitert ‚: createMainDexList‘.

Exception in thread „main“ com.android.dx.cf.iface.ParseException: stark abgestumpfte Attribut bei com.android.dx.cf.direct.StdAttributeFactory.throwSeverelyTruncated (StdAttributeFactory.java:736) bei com.android.dx.cf.direct.StdAttributeFactory.runtimeVisibleParameterAnnotations (StdAttributeFactory.java:661) bei com.android.dx.cf.direct.StdAttributeFactory.parse0 (StdAttributeFactory.java:162) bei com.android .dx.cf.direct.AttributeFactory.parse (AttributeFactory.java:96) um com.android.dx.cf.direct.AttributeListParser.parse (AttributeListParser.java:141) bei com.android.dx.cf.direct.AttributeListParser.parseIfNecessary (AttributeListParser.java:115) bei com.android.dx.cf.direct.AttributeListParser.getEndOffset (AttributeListParser.java:96) bei com.android.dx.cf.direct.MemberListParser.parse (MemberListParser.java:213) bei com.android.dx.cf.direct.MemberListParser.parseIfNecessary (MemberListParser.java:108) bei com.android. dx.cf.direct.MethodListParser.getList (MethodListParser.java:54) bei com.android.dx.cf.direct.DirectClassFile.parse0 (DirectClassFile.java:542) bei com.android.dx.cf. direct.DirectClassFil e.parse (DirectClassFile.java:406) bei com.android.dx.cf.direct.DirectClassFile.parseToEndIfNecessary (DirectClassFile.java:397) bei com.android.dx.cf.direct.DirectClassFile.getAttributes (DirectClassFile.java:311) bei com.android.multidex.MainDexListBuilder.hasRuntimeVisibleAnnotation (MainDexListBuilder.java:191) bei com.android.multidex.MainDexListBuilder.keepAnnotated (MainDexListBuilder.java:167) bei com.android .multidex.MainDexListBuilder. (MainDexListBuilder.java:121) um com.android.multidex.MainDexListBuilder.main (MainDexListBuilder.java:91) um com. android.multidex.ClassReferenceListBuilder.main (ClassReferenceListBuilder.java:58) ... beim Analysieren des Attributs RuntimeVisibleParameterAnnotations bei Offset 0009c07> ... beim Analysieren von Attributen [3] ... beim Parsen von Methoden [1] ... beim Parsen von io/undertow/client/http /HttpResponseParser$$generated.class

Unten ist mein Build.gradle Dateiinhalt:

task wrapper(type: Wrapper) { 
    gradleVersion = '2.10' 
} 
buildscript { 
    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'org.javafxports:jfxmobile-plugin:1.0.7'   

    }  
} 


apply plugin: 'org.javafxports.jfxmobile' 

apply plugin: 'java' 
apply plugin: 'application' 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    jcenter() 
} 

mainClassName = 'com.simlayserstudio.SimlayserStudio' 

jfxmobile { 
    android { 
     manifest = 'src/android/AndroidManifest.xml' 
//  compileSdkVersion = 16 // version 4.2.1 
     compileSdkVersion = 23 // version 6 
     packagingOptions { 
      exclude 'META-INF/LICENSE.txt' 
      exclude 'META-INF/NOTICE.txt' 
      exclude 'META-INF/INDEX.LIST' 
      exclude 'META-INF/services/io.undertow.attribute.ExchangeAttributeBuilder' 
      exclude 'META-INF/services/io.undertow.predicate.PredicateBuilder' 
      exclude 'META-INF/services/io.undertow.server.handlers.builder.HandlerBuilder' 
      //exclude 'META-INF/services/javax.annotation.processing.Processor' 

     } 
    } 
    ios { 
     infoPList = file('src/ios/Default-Info.plist') 
    } 
} 

dependencies {  

     compile ('commons-codec:commons-codec:1.10', 
        'commons-io:commons-io:2.4', 
        'commons-lang:commons-lang:2.6', 
//     'io.undertow:undertow-servlet:1.3.14.Final' // Duplicate zip entry [allclasses.jar:javax/annotation/Generated.class 
      ) 

    compile files(   
     '/lib/jboss-logging-3.2.1.Final.jar', //ok wtih exclude 'META-INF/INDEX.LIST' 
//  '/lib/undertow-core-1.3.14.Final.jar', // ERROR com.android.dx.cf.iface.ParseException: severely truncated attribute 
     '/lib/undertow-servlet-1.3.14.Final.jar', // ok wtih exclude ExchangeAttributeBuilder, PredicateBuilder, HandlerBuilder  
     '/lib/undertow-websockets-jsr-1.3.14.Final.jar', //ok with exclude 'META-INF/INDEX.LIST' 
     '/lib/xnio-api-3.3.4.Final.jar', //ok with exclude 'META-INF/INDEX.LIST' 
     '/lib/xnio-nio-3.3.4.Final.jar', //ok with exclude 'META-INF/INDEX.LIST' 

     '/lib/apache-commons.jar',  //ok 
     '/lib/com.thoughtworks.xstream.jar', //ok       
     '/lib/javax.websocket-api-1.0.jar', //ok 
     '/lib/log4j-1.2.17.jar', //ok    
     '/lib/xmlpull-xpp3-1.1.4c.jar', //ok 
    )  


} 

Hat jemand verwalten apk mit Undertow Websockets zu erzeugen, oder ähnliche Probleme auftreten mit 3-rd Party-Bibliotheken?

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

Antwort

0

Ich habe in der Lage, die gleichen Fehler zu reproduzieren Sie geschrieben haben, nur durch diese Abhängigkeiten mit und läuft ./gradlew android:

dependencies { 
    compile ('io.undertow:undertow-servlet:1.3.19.Final') { 
     exclude group: 'org.jboss.spec.javax.annotation' 
    } 
    compile ('io.undertow:undertow-core:1.3.19.Final') { 
     exclude group: 'org.jboss.spec.javax.annotation' 
    } 
    compile ('io.undertow:undertow-websockets-jsr:1.3.19.Final') { 
     exclude group: 'org.jboss.spec.javax.annotation' 
    } 
} 

Also, um über die mögliche Ausgabe zu erfahren, ich heruntergeladen haben die io.undertow` Quellen aus here, hinzugefügt, um die erforderlichen Abhängigkeiten (vielleicht die genauen Versionen ich nicht verwenden):

dependencies { 
    compile 'org.jboss.logging:jboss-logging-annotations:2.0.1.Final' 
    compile 'org.jboss.classfilewriter:jboss-classfilewriter:1.0.4.Final' 
    compile 'org.eclipse.jetty.alpn:alpn-api:1.0.0' 
    compile 'org.jboss.xnio:xnio-nio:3.3.4.Final' 
    compile 'org.jboss.xnio:xnio-api:3.3.4.Final' 
    compile 'org.jboss.logging:jboss-logging:3.2.1.Final' 
    compile 'org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:1.1.0.Final' 
    compile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.1_spec:1.0.0.Final' 
} 

und duplizierte Klassen zu vermeiden javax.annotation ich die Quellenheruntergeladen habenvon here, und entfernte diese drei Klassen: Generated.java, PostConstruct.java und PreDestroy.java.

Ich konnte ./gradlew android erfolgreich ausführen, aber ich habe es nicht getestet.

Für den Fall, dass Sie immer noch Probleme beim Erstellen oder später auf dem Gerät ausführen, können Sie möglicherweise andere Alternativen für Websockets wie das Tyrus Projekt in Betracht ziehen.

Dies ist ein project wo wir es erfolgreich verwendet haben.

+0

Vielen Dank José! Das war genau das, was ich brauchte. Ich folgte deinen Schritten und war in der Lage, die apk zu generieren. Hurra! Ich hatte noch keine Gelegenheit, es zu implementieren und auszuführen, aber zumindest funktioniert die Kompilation jetzt. Vielen Dank für Ihren Rat, Alternativen für Websockets in Betracht zu ziehen. Ich werde es mir auf jeden Fall ansehen. – velena

Verwandte Themen