Как заставить 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 или что-то в ваших настройках?