Проблема
Как показано в этой статье, механизм импорта Android Studio создает новый проект в новом каталоге, что приводит к перерыву в истории контроля версий. Вы хотите вместо этого навсегда преобразовать проект из Eclipse в Android Studio, но не теряя годы ценной истории управления версиями.
Решение
Один из подходов заключается в использовании команды move программы управления версиями для реструктуризации проекта на месте, в форме, которую может понять среда Studio/Gradle.
Среда Eclipse больше не может обрабатывать проект после того, как он был перестроен; кажется, нет способа сообщить ему новое местоположение для манифеста Android и файлов ресурсов. Если вы хотите использовать обе среды IDE, см. вот эту статью вместо рецепта, который вы сейчас читаете.
Обсуждение
Процесс будет сильно отличаться в зависимости от используемой системы управления исходным кодом (source code management — SCM). Одной из старейших широко используемых систем SCM была CVS (Concurrent Versions System). Система CVS не поддерживала перемещение файлов, поэтому, если ваш проект попрежнему находится в системе CVS (или RCS или SCCS, двух еще более старых систем SCM), необходимо сначала перенести его в Git и научиться его использовать, если вы действительно хотите сохранить историю. Я знаю, что этот процесс может работать хорошо, потому что мои общедоступные хранилища GitHub содержат некоторые файлы с датами модификации за десять лет до написания Git. Соответственно этот пример предполагает, что у вас есть проект Eclipse Android в системе Git SCM. И я расскажу о шагах в виде командной строки Unix/Linux/macOS, потому что это наиболее сжатый формат. Поймите, что это только общее руководство; ваши действия, безусловно, будут другими!
План А: перемещение файлов
Я использовал этот подход для конвертации приложения для платформы Android, состоящего из 30 файлов Java и многочисленных файлов ресурсов, из формата Eclipse в формат Android Studio; я получил это решение через час или два, оставив историю версий нетронутой.
Во-первых, создайте копию, чтобы, если преобразование слишком сильно испортится, можно было удалить все это и начать все сначала (пуристы Git могут утверждать, что вы должны просто использовать ветку, но это мой способ сделать это):
$ cp -r ~/git/myproject /tmp/myproject
$ cd /tmp/myproject
Теперь нужно преобразовать структуру проекта. Среда Eclipse использовала простую папку src, тогда как современные инструменты построения, такие как Maven и Gradle (см. рецепт 1.10), используют структуру, такую как src/main/java
. Если у вас автономные (Java без Android) модульные тесты, они могут находиться в папке с именем test, которая должна стать src/test/java
. Кроме того, папка ресурсов (res
) и файл манифеста Android должны перейти в папку src/main
:
$ rm -fr bin build gen target # Start with a cleanup
$ mkdir -p src/main/java
$ mkdir -p src/test/java
$ git mv src/com src/main/java
$ git mv test/com src/test/java/
$ git mv res src/main/
$ git mv AndroidManifest.xml src/main/
$ rmdir test
Следующим шагом будет преобразование информации о зависимостях из файла .classpath
или файла pom.xml
в файл build.gradle
:
$ cat ../__SomeExistingStudioProject__/build.gradle pom.xml > build.gradle
$ vi build.gradle # Объединяем зависимости вручную
$ git rm -f pom.xml
$ git add build.gradle
Создайте файл local.properties
, содержащий путь к пакету Android SDK на вашем компьютере-разработчике, используя, например, одну из следующих функций:
$ cp ../__SomeExistingStudioProject__/local.properties .
$ echo 'sdk.dir=/Users/ian/android-sdk-macosx' > local.properties
Теперь вам нужно скопировать несколько файлов из существующего проекта Android Studio: по крайней мере, gradlew (для Unix/Linux/macOS) и/или gradlew.bat
(для Windows cmd.exe
).
Если в вашем проекте нет файла .gitignore, создайте его и добавьте к нему файл local.properties
:
$ echo local.properties >> .gitignore
Теперь попробуйте создать проект, набрав команду gradlew или открыв его в среде Android Studio. Затем переделайте его, пока он не заработает. Когда вам станет удобно, выполните команду git commit
. Когда вы действительно достигнете цели, выполните команду git push
.
План Б: Перемещение файлов в новый проект
Альтернативный подход заключается в следующем. Я не проверял его сам, но он кажется более простым.
- Создайте новый проект, используя мастер Studio
New Project
. - Скопируйте файлы из вашего существующего проекта в новый проект, используя предыдущие команды перемещения в качестве руководства.
- Скопируйте историю изменений в новый проект:
$ cp -r oldProject/.git newProject/.git
- Проверив, что проект организован нормально, сохраните изменения, предположив, что репозиторий Git распознает перемещенные файлы (обычно так и бывает):
$ git commit -m "Reorganize project for Android Studio"
- Перестройте его при необходимости, пока он не будет работать правильно.
- Выполните команду
git commit
, чтобы сохранить все последние изменения, а затем выполните командуgit push
.