web-dev-qa-db-ja.com

v7 appcompatの依存関係を正しく定義する方法は?

(継承された)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

14
Jonik

同じ問題が発生したので、相対パスを使用してみたところ、問題は解決しました。相対パスのみがAndroid.library.referenceで機能するようです。これを確認するためにクイック検索を行ったところ、 このstackoverflowリンク が見つかりました。これは、絶対パスがWindowsではAndroid.library.referenceで機能するが、UnixやMacでは機能しないことを示しています。

平和。

6
Jay

Jayが示したようにrelatedパスのみがUnix/Macで機能します。

Antビルドが機能するためには、コマンドbuild.xmlを使用して、 Android update project -p <dir>を生成appcompatプロジェクトも必要でした。

/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か月前の コメント を回答に昇格させただけです。

ちなみに、私は実際にAndroid開発について何かを知っているので、Antを捨てて、 new Gradle-ベースのビルドシステム これは比較すると完全に優れています。CIに対応しており、便利なものを簡単に自動化できます(ビルドタイプごとに異なるパッケージ名やアプリアイコンを使用するなど)。 スタックオーバーフロー助けになります 問題が発生したとき。

Gradleでサポートライブラリを使用すると、上記の煩わしさをすべてスキップし、 単に行う

dependencies {
    compile "com.Android.support:appcompat-v7:18.0.+"
}
9
Jonik

パスが間違っているようです(「互換性」の部分がありません)。 v7-appcompatライブラリは

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

私にとって(Max OS X10.7.5上のSDKToolsバージョン22.0.5)

0
Patrick