Создайте проект, содержащий lib проект, содержащий lib проект с муравьем - PullRequest
1 голос
/ 23 декабря 2011

У нас есть структура проекта, подобная следующей:

sharedlib (lib-проект, содержащий классы, которые полезны во многих приложениях)
-> основной проект (lib-проект, содержащий все для запуска приложения)
---> 2 фирменных проекта (с разными иконками / стилями для основного проекта)

В Eclipse основным проектом является библиотечный проект, ссылающийся на общие ресурсы в настройках Android, а два фирменных проекта ссылаются на основной проект как библиотеку.

Если мы скомпилируем фирменные проекты в Eclipse, все будет работать нормально, но мы не сможем заставить работать ant build (sdk tools r16). Мы попробовали несколько вариантов добавления библиотечных проектов в фирменные проекты. Мы получили либо ошибку, что не удалось найти файлы классов проекта библиотеки, либо следующую ошибку dex:

-dex:
 [echo] Converting compiled files and external libraries into .../bin/classes.dex...
[apply] 
[apply] UNEXPECTED TOP-LEVEL EXCEPTION:
[apply] java.lang.IllegalArgumentException: already added: L.../android/android/lib/R$attr;
[apply]     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[apply]     at com.android.dx.dex.file.DexFile.add(DexFile.java:143)
[apply]     at com.android.dx.command.dexer.Main.processClass(Main.java:372)
[apply]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:346)
[apply]     at com.android.dx.command.dexer.Main.access$400(Main.java:59)
[apply]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:294)
[apply]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
[apply]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:130)
[apply]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:108)
[apply]     at com.android.dx.command.dexer.Main.processOne(Main.java:313)
[apply]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:233)
[apply]     at com.android.dx.command.dexer.Main.run(Main.java:185)
[apply]     at com.android.dx.command.dexer.Main.main(Main.java:166)
[apply]     at com.android.dx.command.Main.main(Main.java:90)
[apply] 1 error; aborting

Так что проблема в том, что наша библиотека вообще не добавлена ​​или добавлена ​​дважды. Есть идеи, как должен выглядеть файл сборки ant для создания фирменных проектов?

1 Ответ

3 голосов
/ 30 декабря 2011

Я также столкнулся с той же ошибкой, и поиск в Google привел меня по следующей ссылке, и это решило мою проблему.

Давлик баг? Неожиданное исключение верхнего уровня: java.lang.IllegalArgumentException: уже добавлено: [classXXX]

Ниже приводится объяснение проблемы, взятое по ссылке:

The (admittedly ugly) message is trying to tell you that you have in
fact managed to include two classes with the same fully-qualified name
(package + name) in your dx commandline. If you are using dx
implicitly via the Eclipse plugin (looks like you are), then you have
somehow managed to add the same classes twice in the Eclipse UI. 

Здесь вы, возможно, добавили класс L.../android/android/lib/R дважды в вашем пути к классам. Кажется, что две или более версии автоматически сгенерированного класса R с тем же именем пакета находятся в вашем classpath. Проверьте и приложение, и библиотеки, чтобы убедиться, что класс R размещен во всех них в разных пакетах.

Надеюсь, это поможет:)

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