Как заставить Android Studio использовать относительные пути?
Каждый проект, созданный в Android Studio 1.0.2, содержит несколько файлов, которые ссылаются на собственный абсолютный путь проекта. Я даже не могу переместить свой собственный каталог проектов, если хочу, не говоря уже о том, чтобы поделиться проектом с другими разработчиками.
Исключая файлы в app/build
, это файлы, содержащие абсолютные пути:
.idea/workspace.xml
.idea/modules.xml
.idea/libraries/support_v4_21_0_3.xml
.idea/libraries/appcompat_v7_21_0_3.xml
.idea/gradle.xml
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin
app/app.iml
Как заставить Android Studio использовать относительные пути для всего?
Изменить. Экспериментируя с vanilla IDEA, я сузил происхождение этих абсолютных путей к определенному типу модуля, который, по-видимому, всегда использует Android Studio, не предлагая вам выбор. Но я все еще не понимаю, как их искоренить.
В IDEA 14.0.2, если вы создаете пустой проект или проект Android с помощью "Application Module", проект не содержит никаких абсолютных путей. Если вы создаете проект с "Gradle: Android Module", то он содержит абсолютные пути в тех же файлах, что и проект Android Studio.
Изменить # 2: Создано IDEA-134587
Ответы
Ответ 1
Я столкнулся с той же проблемой, но предлагаемое выше решение противоречит рекомендации JetBrains, а также этот ответ. Кроме того, у моего коллеги, работающего из того же исходного кода (с нерасширенными путями) и версии Android Studio, не было проблемы, поэтому я продолжал ударять головой о стену.
В конце концов мы решили проблему, когда поняли, что многие из используемых мной путей включали символические ссылки. В моем случае у меня была создана символическая ссылка для ~/work
, чтобы она указывала на /some/drive/with/space
. В Android Studio весь мой источник был отнесен от ~/work/source
, а не /some/drive/with/space/source
. Когда я изменил все, чтобы Android Studio сослалась на вещи с их фактическими путями, переменные $PROJECT_DIR$
и $MODULE_DIR$
волшебным образом начали работать, а мои .IML файлы больше не повреждались. YMMV.
TL; DR: не используйте символические ссылки в ваших путях проекта!
Ответ 2
В общем, не рассматривайте ни один из файлов .iml или содержимое папки .idea, чтобы быть частью проекта, и не делите любой из этих файлов, не проверяйте их в исходном элементе управления и не перемещайте их с проектом. Подумайте о них как кэш файлах.
Файлы Gradle являются источником правды, поэтому, если у вас возникают проблемы с абсолютными путями, закройте проект, удалите неприменимые файлы и повторно импортируйте его из сценариев сборки Gradle.
Ответ 3
Кроме того, не забудьте хранить файлы внутри .gradle как часть вашего общего проекта.
Кроме того, один набор файлов, который вы хотите использовать, это ваши файлы под лицензией .idea/copyright, хотя это позволяет вам иметь общие настройки авторских прав.
Таким образом, возможно, файл .gitignore может быть:
.gradle
.idea
!.idea/авторское право /[YourCopyrightFile].xml
!.idea/авторское право /profile _settings.xml
*.iml
строить
local.properties
Ответ 4
Хм. Я просто не вижу одинаковых абсолютных путей в этих файлах, я вижу только ссылки на MODULE_DIR и PROJECT_DIR, например:
./app/app.iml: <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
или
./.idea/workspace.xml: <entry file="file://$PROJECT_DIR$/.idea/libraries/appcompat_v7_21_0_2.xml">
Интересно, это только проблема Linux или что-то в ваших настройках?