2016-03-22 6 views
0

У меня возникла проблема при компиляции моего проекта JavaFX для Android. Проект включает в себя кучу библиотек, среди них - Undertow Websockets. Я загрузил все необходимые банки в каталог lib и включил их в блок зависимостей/компиляции файлов файла build.gradle.Значительно усеченный атрибут при компиляции проекта JavaFX Undertow Websockets для Android с jfxmobile-plugin

я был в состоянии решить другие проблемы с JAR-файлы зависимостей (в основном DuplicateFileException), но одна Undertow библиотека - прибойный-ядро-1.3.14.Final.jar дает мне немного головной боли.

Когда я добавляю его в файл компиляции блок gradle.build файла «gradlew андроида» дает мне сообщение об ошибке:

Что пошло не так: Не удалось завершить выполнение задачи по «: createMainDexList».

Исключение в потоке «основного» com.android.dx.cf.iface.ParseException: сильно усеченного атрибута в 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) at com.android.multidex.MainDexListBuilder.main (MainDexListBuilder.java:91) at com. android.multidex.ClassReferenceListBuilder.main (ClassReferenceListBuilder.java:58) ... при разборе RuntimeVisibleParameterAnnotations атрибута со смещением 0009c07> ... при разборе атрибутов [3] ... при разборе методов [1] ... при разборе Io/прибойный/клиента/HTTP /HttpResponseParser$$generated.class

Ниже приведена моя сборка.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 
    )  


} 

ли кто-нибудь управлять генерируя APK с прибойный WebSockets, или сталкиваются с аналогичными проблемами с 3-й библиотек партии?

Любая помощь будет высоко оценена. Спасибо!

ответ

0

Я был в состоянии воспроизвести ту же ошибку, вы в курсе, только с помощью этой зависимости и работает ./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' 
    } 
} 

Так что для того, чтобы узнать о возможной проблеме, я скачал в io.undertow` источники из here, добавлены необходимые зависимости (возможно, я не используя точные версии):

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

И чтобы избежать дублированные классов из javax.annotation, я скачал источники org.jboss.spec.javax.annotation:jboss-annotations-api_1.1_spec от here и удалили эти три класса: Generated.java, PostConstruct.java и PreDestroy.java.

Я смог успешно запустить ./gradlew android, но я его не тестировал.

Если у вас все еще есть проблемы с его созданием или последующим запуском на устройстве, возможно, вы можете рассмотреть другие альтернативы для веб-сайтов, например, проект Tyrus.

Это project были ли мы успешно использованы.

+0

Большое спасибо Хосе! Это было именно то, что мне нужно. Я последовал за твоими шагами и смог создать apk. Ура! У меня не было возможности развернуть и запустить его, но, по крайней мере, компиляция работает сейчас. Благодарим вас за советы по рассмотрению альтернатив для websockets. Я обязательно посмотрю. – velena

 Смежные вопросы

  • Нет связанных вопросов^_^