如何正确定义v7 appcompat依赖?

14

我正在尝试构建一个(继承的)Android项目。 我正在使用Ant和命令行工具(以及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/

那么,有什么想法吗?最简单的方式是如何构建这个项目呢?

(请注意,与Ecplise相关的建议对我没有用处。)

编辑: Android SDK安装过程如下图所示:

enter image description here


1
你是否在/opt/android-sdk-macosx/extras/android/support/目录下有支持包? - Rajesh
@Rajesh:是的,我有。而且更具体地说,/opt/android-sdk-macosx/extras/android/support/v7/appcompat/ 看起来已经安装好了。 - Jonik
3个回答

9

正如Jay所指出的,只有相对路径在Unix/Mac上才能工作。

为了使Ant构建工作,我还需要为appcompat项目生成build.xml,使用命令android update project -p <dir>,在我的情况下:

/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。我认为这是更好的地方,因为同样的路径并不适用于所有开发人员。)


我只是像有人建议的那样,将六个月前的评论变成了一个答案。

顺便说一句,现在我实际上知道一些关于Android开发的东西,我建议任何有机会的人都要放弃Ant,并了解基于Gradle的新构建系统,相比之下,它非常棒。它对CI非常友好,并且使自动化有用的事情变得容易(例如,对于不同的构建类型使用不同的包名称和应用程序图标)。当您遇到问题时,Stack Overflow将提供帮助。

使用Gradle与支持库,您可以跳过以上所有麻烦,只需执行以下操作:

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

我还需要按照https://dev59.com/-eo6XIcBkEYKwwoYIAgL中的描述,将/opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat/project.properties中的target=android-19更改为target=android-21。 - Matthew Grivich

6
我遇到了同样的问题,所以我尝试使用相对路径解决了这个问题。看起来只有相对路径可以与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,我认为这是更好的地方,因为相同的路径不适用于所有开发人员。 - Jonik
9
此外,要使 Ant 构建正常工作,我需要为 appcompat 项目生成 build.xml,使用 /opt/android-sdk-macosx/tools/android update project -p /opt/android-sdk-macosx-r22.0.1/extras/android/support/v7/appcompat 命令。 - Jonik
我在我的项目目录中放置了一个符号链接 root => /,这样我就可以将绝对路径变成相对路径 :) - singpolyma
@Jonik 你应该把你的评论作为答案添加。这正是对我有效的方法。 - Code-Apprentice
@Code-Guru:完成。感谢您的想法! - Jonik

0

您的路径似乎有误(缺少“compatibility”部分)。 v7-appcompat库位于

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

对于我来说(在Max OS X 10.7.5上使用SDK工具版本22.0.5)


1
嗯,对我来说,{sdkpath}/extras/android 只包含 supportm2repository 子目录。(而 {sdkpath}/extras/android/support/v7/appcompat 似乎正是我需要的。)如果我缺少 SDK 的某些部分,我应该如何安装它?我还使用 Android SDK 工具 22.0.5。 - Jonik
你是否安装了当前版本的支持库?(在本评论时,我们已经升级到18版本)您可以通过运行SDK更新管理器的GUI(执行tools子目录中的“android”程序)进行检查。对于我来说,支持库几乎在列表底部。 - Patrick
是的,根据Android SDK Manager(http://i.stack.imgur.com/adUuX.png),我已经安装了Android Support Library,版本为18。 - Jonik
抱歉 - 显然SDK对我维护了一个旧的路径模式(可能是为了不破坏现有项目)。 当我卸载并重新安装它时,它移动到您的路径而没有“兼容性”目录。 所以这似乎不是问题的原因... 对不起。 - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接