Неожиданное исключение верхнего уровня после обновления SDK - PullRequest
0 голосов
/ 01 марта 2012

Я работаю над проектом Android, у которого в пути сборки есть проект библиотеки Android. Оба проекта имеют библиотеку AdWhirl SDK в папке libs и путь сборки.

Теперь, после обновления инструментов Android SDK до r15, сборка муравья основного проекта завершается с ошибкой:

[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
       [dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface;
       [dx]     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
       [dx]     at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
       [dx]     at com.android.dx.command.dexer.Main.processClass(Main.java:486)
       [dx]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
       [dx]     at com.android.dx.command.dexer.Main.access$400(Main.java:67)
       [dx]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
       [dx]     at com.android.dx.command.dexer.Main.processOne(Main.java:418)
       [dx]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
       [dx]     at com.android.dx.command.dexer.Main.run(Main.java:206)
       [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
       [dx]     at com.android.dx.command.Main.main(Main.java:95)
       [dx] 1 error; aborting

Теперь я попытался удалить библиотеку AdWhirl SDK из основного проекта и экспортировать ее из проекта библиотеки. Теперь сборка муравья работает, но при запуске приложения из eclipse на любом устройстве Android будут выданы некоторые исключения ClassNotFoundException.

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

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

С моей точки зрения, Android Library Project не очень хорошо спроектирован с самого начала, однако, это не может быть реальной проблемой для разработчика, если он остается таким и ведет себя одинаково во время каждого Обновление SDK.

Но это не так, команда разработчиков Android начала все переделывать во время нескольких последних выпусков (вероятно, начиная с r14) и обещает нам окончательное решение в следующем грядущем выпуске. Это делает нашу непрерывную разработку крайне нестабильной на данный момент, я не использую ant с моими проектами, но у меня были подобные проблемы с использованием Maven для управления изменением библиотеки при каждом обновлении SDK. Похоже, что команда разработчиков Android даже столкнулась с трудностями в управлении изменениями исключительно из своего официального плагина ADT (см. Этот блог ), не говоря уже о неофициальных поддерживаемых инструментах сборки, таких как Ant или Maven.

Я провел некоторый поиск для вас, в системе Android JIRA опубликована тема, которая очень похожа на вашу ситуацию и содержит некоторые обходные пути (грязное исправление в скрипте ant), посмотрите комментарии 16 от Крис , посмотрите, поможет ли это вам.

1 голос
/ 01 марта 2012

Попробуйте добавить этот jar в каталог libs.

0 голосов
/ 04 марта 2012

После обновления до последней версии adk я получил сообщение, в котором говорилось, что нужно запустить adb refresh, чтобы перестроить ant-скрипт.В последней версии ADK произошли оптимизации в процессе сборки.Я предполагаю, что одна из этих оптимизаций относится к пути сборки.

   [dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface;

Подразумевается, что AdWhirlLayout$AdWhirlInterface добавляется дважды.Попробуйте удалить AdWhirl SDK из одного из проектов.Я бы попытался удалить его из вашего Android-проекта.

"Android Project" imports "Android Library Project" imports "AdWhirl SDK"

вместо

"Android Project" imports "Adwhirl SDK" imports "Android Library Project" imports "AdWhirl SDK"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...