Сборка Android работает в Eclipse, но не с Ant («уже добавлено») - PullRequest
6 голосов
/ 23 февраля 2011

Мой проект Android использует несколько подмодулей git, помеченных как библиотеки Android.Все эти подмодули по-разному используют jar-файлы ORMlite для Android и, следовательно, jar-файлы ORMlite включены в их каталог libs.Eclipse правильно обрабатывает эту ситуацию: он включает в себя jar-файлы ORMlite один раз во время обработки dex и генерирует действительный .apk, но когда я запускаю сборку через ant debug, я получаю:

 [echo] Converting compiled files and external libraries into /home/webedit/.hudson/jobs/xyz/workspace/bin/classes.dex...
[apply] 
[apply] UNEXPECTED TOP-LEVEL EXCEPTION:
[apply] java.lang.IllegalArgumentException: already added: Lcom/j256/ormlite/android/AndroidCompiledStatement;
[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:338)
[apply]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:315)
[apply]     at com.android.dx.command.dexer.Main.access$100(Main.java:56)
[apply]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:266)
[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:284)
[apply]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:220)
[apply]     at com.android.dx.command.dexer.Main.run(Main.java:176)
[apply]     at com.android.dx.command.dexer.Main.main(Main.java:157)
[apply]     at com.android.dx.command.Main.main(Main.java:89)

Есть лилюбой способ иметь несколько копий одного и того же JAR, разбросанных по нескольким библиотекам?Могу ли я изменить настройку сборки Ant, чтобы она заработала?

Ответы [ 4 ]

4 голосов
/ 16 января 2012

Я получил ту же проблему, используя maven, потому что он правильно добавил ormlite-core-jarfile, который содержит пакеты и классы в качестве core-jar с несколькими дополнительными классами.

Я добавил исключение, и теперь оно работает

            <dependency>
                <groupId>com.j256.ormlite</groupId>
                <artifactId>ormlite-android</artifactId>
                <version>4.9</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.j256.ormlite</groupId>
                        <artifactId>ormlite-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
1 голос
/ 14 июня 2011

Моя проблема заключалась в том, что были включены все jar-файлы в любой папке ./libs, а не только те, которые указаны в моем eclipse .classpath. Так что у меня там лежали дубликаты. Мне просто нужно было почистить свои ./libs. Вы можете узнать, что входит в ant в его "classpath", запустив "ant -v debug" где-то в верхней половине вывода.

1 голос
/ 11 ноября 2011

Была такая же проблема, но с android-support-v4.jar - она ​​использовалась в ссылочной библиотеке проектов и приложениях проекта. Вот решение

Обход: 1. Удалите файл android-support-v4.jar из приложения / библиотеки 2. В Eclipse добавьте jar, на который ссылается ReibrencedProjectLibrary / libs / android-support-v4.jar

Работает также в Eclipse и Ant;)

1 голос
/ 24 февраля 2011

Я решил свою проблему, создав третий проект Android с только JAR ORMlite, от которого зависели два других проекта.

...