Не удалось создать приложение для Android (обратитесь к ActionBarSherlock и ViewPagerTabs) с помощью Ant - PullRequest
8 голосов
/ 02 марта 2012

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

  1. перейдите в папку ActionBarSherlock, запустите "обновление Android lib-project --path."
  2. перейдите в папку ViewPagerTabs, запустите "обновление Android lib-project --path." тоже
  3. перейдите в папку приложения, запустите "обновление Android проект --path."
  4. запустите «and debug» в папке приложения, и я получил следующие ошибки:

[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: У меня есть правильные ссылки на библиотеки в файле project.properties приложения, и ActionBarSherlock & ViewPagerTabs могут быть успешно созданы, почему я по-прежнему получаю эти ошибки?

Для решения этой проблемы есть обходной путь - скопируйте все classes.jar из папки 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

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

Спасибо!

Ответы [ 3 ]

24 голосов
/ 03 марта 2012

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

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

3 голосов
/ 29 марта 2013

Вы указали это, потому что обе библиотеки имеют 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 останавливает исправление двойного импортавопрос.

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

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

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

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

...