Intereting Posts

Повторная упаковка .jar-s в Android .aar library

Исходный код

Библиотека

Проект, который использует библиотеку

описание проблемы

Я пишу библиотеку Android (.aar) в той библиотеке, в которой я использую библиотеки .jar.

Введите описание изображения здесь

Чтобы избежать дублирования зависимостей, я использую плагин ShadowJar для переупаковки, как показано ниже:

task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) { System.out.println("Relocating packages...") relocate 'retrofit' , 'com.codecraft.retrofit' relocate 'org.simpleframework.xml', 'com.codecraft.org.simpleframework.xml' relocate 'com.squareup.okhttp' , 'com.codecraft.com.squareup.okhttp' } 

В приложении, использующем библиотеку Android (.aar), я имею зависимость от приведенных ниже библиотек, просто для проверки того, что у меня нет проблем с дублированием зависимостей.

 dependencies { compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta1' } 

Но когда я пытаюсь запустить приложение на Android, я получил следующую ошибку

Введите описание изображения здесь

Ошибка: предупреждение: игнорирование атрибута InnerClasses для анонимного внутреннего класса Ошибка: (com.bea.xml.stream.util.CircularQueue $ 1), который не содержит атрибут EnclosingMethod, связанный с ошибкой: Этот класс, вероятно, был создан компилятором Error: не предназначенным для современного формата .class. Рекомендуемая ошибка: решение состоит в том, чтобы перекомпилировать класс из исходного кода, используя современный компилятор Error: и без указания каких-либо параметров типа «-target». Последствие игнорирования ошибки: это предупреждение о том, что рефлексивные операции над этим классом будут ошибочно. Ошибка: укажите, что это не внутренний класс. Ошибка: проблема с обработкой «javax / xml / XMLConstants.class»: ошибка: неправильное или ошибочное использование основного класса (java. * Или javax. *) Ошибка: при не создании базовой библиотеки. Ошибка. Это часто происходит из-за непреднамеренного включения файла основной библиотеки. Ошибка: в проекте вашего приложения при использовании IDE (например, Error: Eclipse). Если вы уверены, что вы не намеренно определяете класс Error: core, то это наиболее вероятное объяснение того, что такое ошибка: продолжайте. Ошибка. Однако вы можете попытаться определить класс в ядре «Ошибка: пространство имен», источником которого вы могли воспользоваться, например, «Ошибка: от проекта виртуальной машины, отличного от Android». Это будет большая ошибка: безусловно, не работает. Как минимум, это ставит под угрозу ошибку: совместимость вашего приложения с будущими версиями платформы. Ошибка: также часто вызывает сомнительную законность. Ошибка: если вы действительно намереваетесь создать основную библиотеку, которая является только ошибкой: она подходит как часть создания полной виртуальной машины. Ошибка: распространение, в отличие от компиляции приложения, – затем используйте «Ошибка»: «–core-library "Для подавления этого сообщения об ошибке. Ошибка: если вы продолжите работу и используете «–core-library», но на самом деле это ошибка: создание приложения, а затем предупредить о том, что ваше приложение Error: в какой-то момент все равно не будет создано или запущено. Ошибка: подготовлены для гневных клиентов, которые, например, обнаруживают, что приложение «Ошибка: приложение перестает функционировать после обновления операционной системы« Ошибка: система ». Вы будете виноваты в этой проблеме. Ошибка. Если вы допустимо используете какой-либо код, который находится в пакете Error: core, тогда самая простая безопасная альтернатива у вас есть Ошибка: переупаковка этого кода. То есть переместите рассматриваемые классы в Error: ваше собственное пространство имен пакетов. Это означает, что они никогда не будут в Error: конфликтуют с основными системными классами. JarJar – это инструмент, который может помочь Ошибка: вы в этом начинаете. Если вы обнаружите, что не можете этого сделать, то Ошибка: это указание на то, что путь, на котором вы находитесь, в конечном итоге Ошибка: привести к боли, страданиям, печали и плачам. Ошибка: 1 ошибка; Aborting: app: transformClassesWithDexForDebug FAILED Ошибка: выполнение выполнено для задачи ': app: transformClassesWithDexForDebug'.

Com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException

ОБРАТИТЕ ВНИМАНИЕ, что этот вопрос не появился в случае, если я добавлю только модифицированную зависимость

 dependencies { compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' } 

В чем причина и как я могу решить эту ошибку?

Solutions Collecting From Web of "Повторная упаковка .jar-s в Android .aar library"

Когда вы включаете Jars в свой lib или app – вы можете включать файлы, которые уже были скомпилированы с использованием другой версии Java или с другой конфигурацией, чем ваша, и это может вызвать проблемы, подобные тем, которые вы испытываете.

Я предполагаю, что используемая вами зависимость относится к библиотеке, которая вызывает проблему, создаваемую банкой.

Если для вас не важно использовать зависимости – рассмотрите возможность загрузки кода для используемой вами библиотеки (при условии, что они являются открытым исходным кодом, и нет никаких юридических ограничений) и компиляция их с вашим приложением в качестве дополнительных модулей в вашем проекте вместо добавления банки , Если вы это сделаете – вы должны определенно подумать о том, что написал jmols о размере и методе lib.

Удачи!

Исключение некоторых модулей помогло мне с той же ошибкой:

 compile ('com.squareup.retrofit2:converter-simplexml:2.1.0'){ exclude group: 'xpp3', module: 'xpp3' exclude group: 'stax', module: 'stax-api' exclude group: 'stax', module: 'stax' } 

Ссылка источника