2016-03-22 3 views
0

Je rencontre un problème lors de la compilation de mon projet JavaFX pour Android. Le projet comprend un tas de bibliothèques, Undertow Websockets est parmi eux. J'ai téléchargé tous les jars requis dans mon répertoire lib et les ai inclus dans le bloc dépendances/compilation du fichier build.gradle.Attribut gravement tronqué lors de la compilation du projet JavaFX Undertow Websockets pour Android avec jfxmobile-plugin

j'ai pu résoudre d'autres problèmes avec dépendances jar-fichiers (la plupart du temps DuplicateFileException), mais une bibliothèque Undertow - undertow-core-1.3.14.Final.jar me donne un peu d'un mal de tête.

Quand j'ajouter à fichier de compilation bloc de fichier gradle.build « gradlew android » me donne un message d'erreur:

Qu'est-ce qui a mal tourné: Échec de l'exécution de la tâche « : createMainDexList ».

Exception in thread « main » com.android.dx.cf.iface.ParseException: attribut sévèrement tronqué à com.android.dx.cf.direct.StdAttributeFactory.throwSeverelyTruncated (StdAttributeFactory.java:736) à com.android.dx.cf.direct.StdAttributeFactory.runtimeVisibleParameterAnnotations (StdAttributeFactory.java:661) à com.android.dx.cf.direct.StdAttributeFactory.parse0 (StdAttributeFactory.java:162) à com.android .dx.cf.direct.AttributeFactory.parse (AttributeFactory.java:96) at com.android.dx.cf.direct.AttributeListParser.parse (AttributeListParser.java:141) à com.android.dx.cf.direct.AttributeListParser.parseIfNecessary (AttributeListParser.java:115) à com.android.dx.cf.direct.AttributeListParser.getEndOffset (AttributeListParser.java:96) à com.android.dx.cf.direct.MemberListParser.parse (MemberListParser.java:213) à com.android.dx.cf.direct.MemberListParser.parseIfNecessary (MemberListParser.java:108) à com.android. dx.cf.direct.MethodListParser.getList (MethodListParser.java:54) à com.android.dx.cf.direct.DirectClassFile.parse0 (DirectClassFile.java:542) à com.android.dx.cf. direct.DirectClassFil e.parse (DirectClassFile.java:406) à com.android.dx.cf.direct.DirectClassFile.parseToEndIfNecessary (DirectClassFile.java:397) à com.android.dx.cf.direct.DirectClassFile.getAttributes (DirectClassFile.java:311) à com.android.multidex.MainDexListBuilder.hasRuntimeVisibleAnnotation (MainDexListBuilder.java:191) à com.android.multidex.MainDexListBuilder.keepAnnotated (MainDexListBuilder.java:167) à com.android .multidex.MainDexListBuilder. (MainDexListBuilder.java:121) à com.android.multidex.MainDexListBuilder.main (MainDexListBuilder.java:91) à com. android.multidex.ClassReferenceListBuilder.main (ClassReferenceListBuilder.java:58) ... lors de l'analyse de l'attribut RuntimeVisibleParameterAnnotations au décalage 0009c07> ... lors de l'analyse des attributs [3] ... lors de l'analyse des méthodes [1] ... lors de l'analyse de io/undertow/client/http /HttpResponseParser$$generated.class

Ci-dessous est ma construction.le contenu du fichier Gradle:

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 
    )  


} 

Quelqu'un at-il apk avec la génération gèrent Undertow Websockets, ou rencontrer des problèmes similaires avec 3 rd bibliothèques du parti?

Toute aide serait grandement appréciée. Merci!

Répondre

0

Je suis en mesure de reproduire la même erreur que vous avez posté, juste en utilisant ces dépendances et en cours d'exécution ./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' 
    } 
} 

Ainsi, afin de connaître la question possible, je l'ai téléchargé les sources io.undertow` de here, a ajouté les dépendances nécessaires (peut-être je ne suis pas en utilisant les versions exactes):

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' 
} 

Et pour éviter les classes dupliquées de javax.annotation, je l'ai téléchargé les sources de org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec de here, et enlevé ces trois classes: Generated.java, PostConstruct.java et PreDestroy.java.

J'ai réussi à exécuter ./gradlew android, mais je ne l'ai pas testé.

Si vous rencontrez encore des problèmes lors de sa construction ou plus tard en l'exécutant sur l'appareil, vous pouvez peut-être envisager d'autres alternatives pour les Websockets comme le projet Tyrus.

Ceci est un project si nous l'avons utilisé avec succès.

+0

Merci beaucoup José! C'était exactement ce dont j'avais besoin. J'ai suivi vos pas et j'ai pu générer l'apk. Hourra! Je n'ai pas encore eu l'occasion de le déployer et de l'exécuter, mais au moins la compilation fonctionne maintenant. Merci de votre conseil pour envisager des alternatives pour les websockets. Je vais certainement jeter un coup d'oeil. – velena