Как правильно определить зависимость v7 appcomp?
Я пытаюсь создать (унаследованный) проект 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
Я столкнулся с той же проблемой, поэтому я попытался использовать относительный путь и устранил проблему для меня. Похоже, только относительные пути работают с android.library.reference. Я сделал быстрый поиск, чтобы проверить это, и наткнулся на fooobar.com/questions/409698/..., которая указывает, что абсолютные пути будут работать с android.library.reference в Windows, но не на Unix или Mac.
Мир.
Ответ 2
Как указал Джей, в Unix/Mac будут работать только относительные пути.
Для создания Ant для сборки мне также понадобилось сгенерировать build.xml
для проекта appcompat, используя команду 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
, что я считаю лучшим местом, поскольку тот же путь не будет работать для всех разработчиков.)
Я только что продвинул comment от 6 месяцев назад в ответ, как было предложено кем-то.
Кстати, теперь, когда я действительно что-то знаю о разработке Android, я призываю всех, у кого есть шанс повернуть Ant и посмотреть новая система сборки Gradle, которая полностью сладка в составе. Это CI-friendly и упрощает автоматизацию полезных вещей (например, использование имени и названия пакета для разных типов сборки). Переполнение стека поможет при возникновении проблем.
Используя библиотеки поддержки с Gradle, вы пропустите все вышеперечисленные проблемы и просто выполните:
dependencies {
compile "com.android.support:appcompat-v7:18.0.+"
}
Ответ 3
Ваш путь кажется неправильным (вам не хватает части "совместимости" ).
Библиотека v7-appcompat находится в
{sdkpath}/extras/android/compatibility/v7/appcompat
для меня (SDK Tools версии 22.0.5 на Max OS X 10.7.5)