【问题标题】:Failed to build Android app (refer to both ActionBarSherlock & ViewPagerTabs) with Ant使用 Ant 构建 Android 应用程序失败(参考 ActionBarSherlock 和 ViewPagerTabs)
【发布时间】:2012-03-02 02:13:39
【问题描述】:

我有一个使用 ActionBarSherlock 和 ViewPagerTabs 的 Android 应用程序。我使用 Eclipse 来编写和构建它,在我尝试使用 Ant 构建它之前它运行良好。这是我所做的:

  1. 进入 ActionBarSherlock 文件夹,运行“android update lib-project --path.”
  2. 进入 ViewPagerTabs 文件夹,运行“android update lib-project --path”。太
  3. 进入应用文件夹,运行“android update project --path.”
  4. 在app文件夹下运行“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]                              ^

所以问NO。 1:我在应用的project.properties中有正确的库引用,并且可以成功构建ActionBarSherlock和ViewPagerTabs,为什么我仍然会出现这些错误?

有一个解决这个问题的方法——将库的 bin 文件夹下的所有 classes.jar 复制到应用程序的 libs 文件夹中,然后再次运行“ant debug”。但是在编译完app的所有.java文件后,我需要删除app的libs文件夹下的这些.jar文件。

在此之后再次运行“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

我的第二个问题是:我该如何解决这个问题?

谢谢!

【问题讨论】:

    标签: android ant android-viewpager actionbarsherlock


    【解决方案1】:

    我终于自己解决了。我发现 ViewPagerTabs 的 libs 文件夹中有一个 android-support-v4.jar。解决办法是——删除这个android-support-v4.jar,然后让ViewPagerTabs依赖ActionBarSherlock(因为ActionBarSherlock其实有一份Support Package)。

    我希望它对想要在一个应用程序中使用 ActionBarSherlock 和 ViewPagerTabs 并使用 Ant 构建他/她的应用程序的人有用。祝你好运。

    【讨论】:

    • 谢谢!在我升级到 ADTv17 之前,我的设置没有这个问题,但这解决了它。
    • 请注意,您还必须让 ActionBarSherlock 导出 android-support(它位于 Project Structure->Modules 对话框中)。我想你还是会的。它的行为有点奇怪......
    • 虽然它编译得很好,但 IntelliJ 会在整个项目中散布大量编译错误。 :-/
    • 啊哈我发现了问题:依赖关系的顺序很重要。您必须在应用源之前拥有 ActionBarSherlock。
    • 是的,通常是包含的库项目中有重复的support-v4.jar文件的情况。
    【解决方案2】:

    你说它是因为两个库都有 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 标记停止双重导入以解决问题。

    【讨论】:

      【解决方案3】:

      当您更新 lib-project 时,您正在更新项目,以便将其编译为库。有一个单独的步骤来更新您的 main 项目,以便它看到它需要的库。

      对于您要使用的每个库项目,运行

      android 更新项目 --library ../pathToTheLibrary

      【讨论】:

      • 亚历山大,感谢您的回复!我已经用 Eclipse 构建了我的应用程序,所以我的应用程序的 project.properties 中有所有库引用。如果我运行“android update project --library ../pathToTheLibrary”,重复的库引用将被添加到 project.properties。
      猜你喜欢
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多