【问题标题】:How to define v7 appcompat dependency correctly?如何正确定义 v7 appcompat 依赖项?
【发布时间】:2013-08-13 12:25:33
【问题描述】:

我正在尝试构建一个(继承的)Android 项目。我正在使用Ant & command line tools(和 IDEA)。

styles.xml中有无法解析的引用如:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">

这是我遇到的原始错误:

[...]/res/values/styles.xml:8: error: Error retrieving parent for item:
No resource found that matches the given name '@style/Theme.AppCompat.Light'.

然后我注意到project.properties 有这个 appcompat 引用,它在我的 (OS X) 机器上被破坏了:

target=android-18
android.library.reference.1=../../../../adt-bundle-linux-x86_64/sdk/extras/android/support/v7/appcompat

我试图通过使引用相对于${sdk.dir} 来解决这个问题:

android.library.reference.1=${sdk.dir}/extras/android/support/v7/appcompat

所以现在该路径应该是正确的。但是现在当我运行ant debug:

BUILD FAILED
/opt/android-sdk-macosx/tools/ant/build.xml:573: 
  /opt/android-sdk-macosx/extras/android/support/v7/appcompat resolve to a 
  path with no project.properties file for project /Users/joka/devel/project/

那么,有什么想法吗?构建此项目的最简单方法是什么?

(请注意,特定于 Ecpise 的建议对我没有用处。)

编辑:Android SDK 安装如下所示:

【问题讨论】:

  • 你有/opt/android-sdk-macosx/extras/android/support/的支持包吗?
  • @Rajesh:是的,我愿意。更具体地说,/opt/android-sdk-macosx/extras/android/support/v7/appcompat/ 似乎安装得很好。

标签: android ant android-support-library android-build


【解决方案1】:

As Jay indicated,只有 relative 路径可以在 Unix/Mac 上运行。

为了使 Ant 构建工作,我还需要 generate build.xmlappcompat 项目,在我的例子中使用命令 android update project -p &lt;dir&gt;

/opt/android-sdk-macosx/tools/android update project 
    -p /opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat

对我来说确切的配置是:

android.library.reference.1=../../../../../../../opt/android-sdk-macosx/extras/‌​android/support/v7/appcompat

(这也适用于local.properties,我认为这是一个更好的地方,因为同一路径不适用于所有开发人员。)


我只是按照某人的建议将我 6 个月前的 comment 提升为答案。

顺便说一句,既然我实际上对 Android 开发有所了解,我会敦促任何有机会放弃 Ant 并查看 new Gradle-based build system 的人,相比之下,这完全是甜蜜的。它是 CI 友好的,并且可以轻松地自动化有用的东西(例如为不同的构建类型使用不同的包名称和应用程序图标)。 Stack Overflow will help 遇到问题时。

将支持库与 Gradle 一起使用,您将跳过上述所有麻烦和simply do

dependencies {
    compile "com.android.support:appcompat-v7:18.0.+"
}

【讨论】:

  • 我还需要在 /opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat/project 中将 target=android-19 更改为 target=android-21。 stackoverflow.com/questions/26457096/… 描述的属性
【解决方案2】:

我遇到了同样的问题,所以我尝试使用相对路径并为我解决了问题。看起来只有相对路径适用于 android.library.reference。我进行了快速搜索以验证这一点,发现this stackoverflow link 表明绝对路径可以在 Windows 上与 android.library.reference 一起使用,但在 Unix 或 Mac 上则不行。

和平。

【讨论】:

  • 啊,确实。我得到它与android.library.reference.1=../../../../../../../opt/android-sdk-macosx/extras/android/support/v7/appcompat 一起工作这也适用于local.properties,我认为这是一个更好的地方,因为相同的路径不适用于所有开发人员。
  • (另外,为了使 Ant 构建工作,我需要为 appcompat 项目使用 generate build.xml,使用 /opt/android-sdk-macosx/tools/android update project -p /opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat。)
  • 我在我的项目目录root =&gt; / 中放了一个符号链接,然后我可以将绝对路径设为相对路径:)
  • @Jonik 您应该添加您的评论作为答案。这正是对我有用的方法。
  • @Code-Guru:Done。感谢您的想法!
【解决方案3】:

您的路径似乎是错误的(您缺少“兼容性”部分)。 v7-appcompat 库位于

{sdkpath}/extras/android/compatibility/v7/appcompat

对我来说(Max OS X 10.7.5 上的 SDK 工具版本 22.0.5)

【讨论】:

  • 嗯,对我来说,{sdkpath}/extras/android 仅包含 supportm2repository 子目录。 (而{sdkpath}/extras/android/support/v7/appcompat 似乎正是我所需要的。)如果我缺少 SDK 的某些部分,我应该如何安装它?我也在使用 Android SDK Tools 22.0.5。
  • 您是否安装了当前版本的支持库? (在发表此评论时,我们处于第 18 版)您可以通过运行 SDK 更新管理器的 GUI 进行检查(在 tools 子目录中执行“android”程序。)支持库对我来说几乎位于列表的底部.
  • 是的,according to Android SDK Manager 我确实安装了 Android 支持库,第 18 版。
  • 我很抱歉 - 显然 SDK 为我维护了一个旧的路径模式(也许不会破坏现有项目)。当我卸载并重新安装它时,它移动到了没有“兼容性”目录的路径。所以这似乎不是这里的问题......对不起。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2016-04-23
相关资源
最近更新 更多