Не удалось создать приложение Android (см. Как ActionBarSherlock & ViewPagerTabs) с Ant

У меня есть одно приложение для Android, которое использует ActionBarSherlock и ViewPagerTabs. Я использую Eclipse для записи и сборки, и он работает хорошо, пока я не попытаюсь построить его с помощью Ant. Вот что я сделал:

  • перейдите в папку ActionBarSherlock, запустите "android update lib-project --path."
  • перейдите в папку ViewPagerTabs, запустите "android update lib-project --path." тоже
  • перейдите в папку приложения, запустите "android update project --path."
  • запустите "и отлаживаем" папку приложения, и я получил следующие ошибки:

:

[javac] C:\Android\TestApp\src\com\test\App\TestActivity.java:46: cannot find symbol
[javac] symbol : method getSupportActionBar()
[javac] location: class com.test.App.TestActivity
[javac] final ActionBar ab = getSupportActionBar();
[javac] ^

Итак, вопрос №. 1: У меня есть правильные ссылки библиотек в app project.properties, и ActionBarSherlock и ViewPagerTabs могут быть успешно созданы, почему я все еще получаю эти ошибки?

Там обходной путь для этой проблемы - скопируйте все classes.jar в папку bin bin в папку приложений libs и снова запустите "ant debug". Но мне нужно удалить эти .jar файлы в папке приложений libs после того, как все файлы .java приложения могут быть скомпилированы.

Запуск "ant debug" снова после этого, я получу следующие ошибки:

[dx] processing archive C:\Android\ActionBarSherlock\library\bin\classes.jar...
[dx] ignored resource META-INF/MANIFEST.MF
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl.class...
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.class...
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.class...
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.class...
[dx] processing android/support/v4/app/ActionBar$LayoutParams.class...
[dx] processing android/support/v4/app/ActionBar$OnMenuVisibilityListener.class...
[dx] processing android/support/v4/app/ActionBar$OnNavigationListener.class...
[dx] processing android/support/v4/app/ActionBar$Tab.class...
[dx] processing android/support/v4/app/ActionBar$TabListener.class...
[dx] processing android/support/v4/app/ActionBar.class...
[dx] processing android/support/v4/app/ActivityCompatHoneycomb.class...
[dx] 
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompatHoneycomb;
[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

Мой вопрос NO.2: как я могу исправить эту проблему?

Спасибо!

3 ответа

Я, наконец, разрешаю это сам. Я нахожу, что в папке libs в ViewPagerTabs есть android-support-v4.jar. Решение - удаляет эту поддержку android-v4.jar, а затем заставляет ViewPagerTabs зависеть от ActionBarSherlock (потому что ActionBarSherlock фактически имеет одну копию пакета поддержки).

Я надеюсь, что это полезно для людей, которые хотят использовать ActionBarSherlock и ViewPagerTabs в одном приложении и использовать Ant для создания своего приложения. Удачи.


Вы заявили об этом, потому что обе библиотеки имеют android-support-v4.jar. См. Ответ @porter-liu для сборки без maven.

Для пользователей, использующих maven, установите ViewPager зависимость как:

<dependency>
 <groupid>com.viewpagerindicator</groupid>
 <artifactid>library</artifactid>
 <version>2.4.1</version>
 <type>apklib</type>
 <exclusions>
 <exclusion>
 <groupid>com.google.android</groupid>
 <artifactid>support-v4</artifactid>
 </exclusion>
 </exclusions>
 </dependency>

Тег exclusion останавливает двойной импорт, устраняя проблему.


Когда вы обновляете lib-проект, вы обновляете проект, чтобы он компилировался как библиотека. Здесь есть отдельный шаг для обновления основного проекта, чтобы он видел нужную библиотеку.

Для каждого проекта библиотеки, который вы собираетесь использовать, запустите

Проект обновления Android - библиотека. /pathToTheLibrary

licensed under cc by-sa 3.0 with attribution.