Окончательное редактирование:
Это был довольно длинный вопрос с несколькими правками, и я не обязательно поступал правильно на каждом этапе пути. Всем, кто натыкается на этот вопрос и испытывает проблемы с преобразованием проекта в gradle в Android Studio, я бы посоветовал проверить этот репозиторий, упомянутый в вопрос # 16718026 и пытается импортировать его, скомпилировать и запустить. Когда у вас что-то работает, становится легче увидеть, что может быть не так с вашим собственным проектом.
Подводя итог, вот что я сделал, чтобы преобразовать проект Android Studio без Gradle в рабочий проект Gradle, используя Android Studio .2.5, который автоматически установил Gradle 1.6 и Gradle Plugin .5 для меня.
(1) Создал новый пустой проект Android Studio со значком и действием. ПРИМЕЧАНИЕ. Сначала я этого не понял, потому что одновременно изучал Android и Gradle, но Android Studio (по крайней мере, в этой версии) на самом деле настраивает вас с настройкой нескольких проектов, что меня сбивало с толку. Мультипроект означает, что над вашим проектом в иерархии есть еще одна папка, в которой хранятся настройки для всех проектов. AS не создала файл build.gradle в папке подпроекта (в моем случае FrontlineSMS), несмотря на видео-руководство, указывающее на это. Поэтому мне пришлось создать этот файл подпроекта build.gradle, а также создать очень простой файл settings.gradle (см. Обновление 2 ниже).
(2) Скопированы файлы src/, res/, .git/, lib/, .gitignore и AndroidManifest.xml в корень нового проекта.
(3) Использовал git mv
для перемещения этих элементов в соответствующие места в соответствии с соглашениями в Руководстве пользователя плагина Gradle, заменяя или удаляя некоторые существующие файлы или папки в пустом проекте, где это необходимо.
(4) Создал build.gradle
в папке моего подпроекта и задал ему некоторые основные настройки (см. ниже или в вопросе, указанном выше)
(5) Импортировал проект, как описано в Обновлении 4.
Исходный вопрос:
Я начинающий разработчик Android, пытающийся преобразовать проект Android Studio, который в настоящее время не использует Gradle (и отлично компилируется и работает), в проект, использующий Gradle в OS X. Я застрял в ошибке ресурса, которая, я думаю, может связаны либо со структурой моего проекта, либо с настройками в среде IDE, либо с настройками в файлах build.gradle, либо с их комбинацией.
То, как я выполнил преобразование, заключалось в том, чтобы сначала создать новый проект в Android Studio, скопировать файлы в соответствующие места, а затем добавить некоторые настройки в файлы IDE и build.gradle. Моя результирующая структура проекта такова:
├── frontlinesms-for-android
├── build.gradle
├── gradle
├── gradlew
├── gradle.bat
├── settings.gradle (added in update 2)
├── local.properties
├── lib
└── lib1.jar
└── lib2.jar
└── ...
├── frontlinesms-for-android.iml
├── FrontlineSMS
└── build.gradle
└── src
├── main
│ └── res
│ └── AndroidManifest.xml
│ └── java
│ └── net
│ └── frontlinesms
│ └── android
│ ├── FrontlineSMS.java
│ ├── ...
В частности, возможно, я поместил папку res/ на тот же уровень, что и java/ и AndroidManifest.xml. Я пытаюсь следовать соглашениям, упомянутым в Руководстве пользователя плагина Gradle, поэтому мне не нужно слишком много настраивать в файлах build.gradle.
Я также пометил папку FrontlineSMS/src/main/java/net как источник, потому что если я этого не сделаю, то ничего не будет пытаться скомпилироваться. Я создал новый файл build.gradle в FrontlineSMS/build.gradle, потому что он не существовал, когда я создавал новый проект, хотя в обучающем видео на веб-сайте Gradle говорилось, что он будет.
В IDE я также устанавливаю зависимости для внешних библиотек, которые у меня есть в /lib.
Когда я пытаюсь скомпилировать через IDE, я получаю много ошибок Package r does not exist
, указывающих на то, что автоматически сгенерированный класс R не создается или не распознается. Это определяется в проекте как,
import net.frontlinesms.android.R;
в нескольких файлах. Что я могу сделать, чтобы Android Studio/Gradle распознал ресурсы, которые я определил в src/main/res?
Читая вопросы других, я заметил, что некоторые решения этой ошибки включали пометку папки «gen/» в качестве корня исходного кода или «очистку» проекта. Я попытался создать папку gen/ в корневом каталоге и пометить ее как источник, но это не сработало. И перестройка проекта просто дает мне те же ошибки.
Мой корневой файл build.gradle имеет следующее:
dependencies {
compile project(':FrontlineSMS')
}
А тот, что находится под FrontlineSMS/build.gradle,
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile file('../lib/acra-3.1.1.jar')
compile file('../lib/activation.jar')
compile file('../lib/additionnal.jar')
compile file('../lib/annotations.jar')
compile file('../lib/libGoogleAnalytics.jar')
compile file('../lib/mail.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
Когда я пытаюсь выполнить сборку из командной строки с помощью ./gradlew clean
, я получаю эту ошибку,
(removed error)
В дополнение к моему предыдущему вопросу, я был бы признателен за любые советы, которые вы можете дать о том, как должен быть структурирован этот проект. Это не предназначено для настройки нескольких проектов. Спасибо за вашу помощь.
Обновление 1
Мне удалось сгенерировать APK из командной строки. Моя главная проблема в том, что я звонил gradle clean
из неправильного каталога. Звонок из FrontlineSMS сработал. Я предполагаю, что Android Studio настроила меня на настройку нескольких проектов, когда у меня был только один проект, и я не ввел для него все настройки, т. Е. Я не создал файл settings.gradle.
Обновление 2
Создал следующий файл settings.gradle, который позволяет мне запускать gradle clean && gradle build
из корневого каталога (где находится settings.gradle):
include ':FrontlineSMS'
Примечание: версия gradle, которую я использую здесь, — это версия, установленная доморощенным пивом, 1.6. Если я использую установленную оболочку gradlew, она говорит:
Gradle version 1.6 is required. Current version is 1.7
Поиск в Интернете этой ошибки, по-видимому, указывает на то, что Android на данный момент не поддерживает 1.7, только 1.6 (и, возможно, это всегда версия или две), но это версия, которая была установлена Android Studio, когда я создал новый проект!
Обновление 3 (изменить: в основном это неправильно, не следуйте этому)
Попытка собрать проект из Android Studio приводит к той же ошибке, что и выше, относительно необходимости версии 1.6. Я попытался повторно импортировать проект, хотя он сказал, что не может найти исходные файлы. Я предполагаю, что это означает либо (1) у меня неправильная версия gradle, и мне нужно ее исправить, и, возможно, (2) мне все-таки нужно будет определить исходные файлы в файле build.gradle, хотя я думал, что следую условности из руководства.
Я попытался скопировать gradle-wrapper-1.6.jar
, чтобы заменить gradle/wrapper/gradle-wrapper.jar
, но это просто дало ошибку класса или метода, когда я запускал его через ./gradlew clean
.
Попытка решения: в gradle/wrapper/gradle-wrapper.properties
есть строка distributionUrl=
, и я изменил ее, чтобы она указывала на версию 1.6,
distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip
Затем в следующий раз, когда я запустил ./gradlew clean
, он загрузил новую версию gradle в мой домашний каталог ~/.gradle
(о котором до сих пор я не знал), и теперь, когда я набираю ./gradlew --version
, он говорит, что это 1.6, и все собирается через командная строка с использованием ./gradlew clean && ./gradlew build
, в результате чего файлы apks. Так что это работает из командной строки, но я также хочу, чтобы это работало из IDE.
В IDE теперь написано
Project is using an old version of the Android Gradle plug-in. The minimum supported version is 0.5.0
Поэтому я обновляю файл build.gradle
, чтобы сказать
classpath 'com.android.tools.build:gradle:0.5'
И снова откройте IDE, которая говорит мне,
Could not find com.android.tools.build:gradle:0.5.
Связаны ли версии плагина Android Studio gradle и версии gradle? Если да, то что мне нужно, gradle plugin .4 + gradle 1.6 или gradle plugin .5 и gradle 1.7? И как правильно их установить?
Обновление 4
Наконец-то я смог скомпилировать это как из командной строки , так и из IDE. Хитрость заключалась в том, чтобы импортировать проект с помощью Gradle после создания основных файлов Gradle. Спасибо Итан! В процессе импорта проекта есть шаг, на котором вы выбираете «Создать проект из существующих источников» или «Импортировать проект из внешней модели». Я выбирал первое, когда должен был выбрать второе и выбрать Gradle. После этого я выбрал «использовать gradle-wrapper (рекомендуется)», проверил «использовать автоматический импорт» и нажал «Готово». Он предупредил меня о нескольких вещах, которые мне пришлось изменить, например, об использовании последнего плагина Gradle, для которого я внес это изменение в свой файл build.gradle
,
classpath 'com.android.tools.build:gradle:0.5.+'
который предлагается в известных проблемах для плагина Android Gradle.