Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to define v7 appcompat dependency correctly?

I'm trying to get an (inherited) Android project to build. I'm using Ant & command line tools (and IDEA).

In styles.xml, there are references that cannot be resolved such as:

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

This is the original error I ran into:

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

I then noticed that project.properties has this appcompat reference which is broken on my (OS X) machine:

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

I tried to fix that by making the reference relative to ${sdk.dir}:

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

So now that path should be correct. But now when I run 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/

So, any ideas? What's the simplest way to get this project built?

(Please note that Ecplise-specific advice won't be useful to me.)

Edit: The Android SDK installation looks like this:

enter image description here

like image 753
Jonik Avatar asked Aug 13 '13 12:08

Jonik


People also ask

How do I fix Appcompat error v7?

How do I fix AppCompat error v7? "You must have the latest versions of SDK Tools / Build Tools / Platform Tools." This trick resolved my problem. I have all updated Tools except "Build Tools". So I just update the "Build Tools", restarted eclipse then clean "appcompat" project and found my problem is solved.

How do I add the v7 Appcompat support library?

In the Properties window, select the "Android" properties group at left and locate the Library properties at right. Select /path/to/appcompat/ and Click Remove. Click Add to open the Project Selection dialog. From the list of available library projects, select v7 appcompat library and click OK.

What is appcompat?

426. An Android support library that enables the use of the ActionBar and Material Design specific implementations such as Toolbar for older devices down to Android v2.


1 Answers

As Jay indicated, only relative paths will work on Unix/Mac.

For the Ant build to work, I also needed to generate build.xml for the appcompat project, using the command android update project -p <dir>, in my case:

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

The exact config for me was:

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

(This also works in local.properties, which I think is a better place since the same path won't work for all developers.)


I merely promoted my comment from 6 months ago into an answer as someone suggested.

By the way, now that I actually know something about Android development, I'd urge anyone who has the chance to ditch Ant and look into the new Gradle-based build system which is totally sweet in comprarison. It is CI-friendly and makes it easy to automate useful things (like using different package name and app icon for different build types). Stack Overflow will help when you run into problems.

Using the support libraries with Gradle, you'd skip all the above hassle and simply do:

dependencies {
    compile "com.android.support:appcompat-v7:18.0.+"
}
like image 58
Jonik Avatar answered Sep 19 '22 20:09

Jonik