Android Studio с gradle: пакет r не существует

Окончательное редактирование:

Это был довольно длинный вопрос с несколькими правками, и я не обязательно поступал правильно на каждом этапе пути. Всем, кто натыкается на этот вопрос и испытывает проблемы с преобразованием проекта в 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.


person Rob Hawkins    schedule 20.08.2013    source источник
comment
Можете ли вы опубликовать свой файл settings.gradle?   -  person Ethan    schedule 20.08.2013


Ответы (3)


Похоже, вам не хватает файла settings.gradle в корневом каталоге проекта.

Вам понадобится файл settings.gradle для доступа к подпроекту, который находится внутри исходного репозитория.

При импорте проекта обязательно выберите Gradle в качестве источника!

person Ethan    schedule 22.08.2013

Собственно пару моментов:

Перейдите в файл -> настройки -> gradle и перейдите к:

выберите «Использовать локальное распространение градиента» и перейдите к:

c:\users\.gradle/wrapper/dists/gradle-1.6-bin/72srdo3a5eb3bic159kar72vok/gradle-1.6

Это работает, но вам нужно очистить все предыдущие вещи, перейдя к:

Файл -> Недействительные кеши/перезагрузка

Затем вы должны вернуться, он будет повторно импортирован (может предложить вам снова настроить gradle, если вышеизложенное было не совсем правильно, я думаю)

Теперь это должно работать... вам не нужно вручную создавать файлы build.gradle.

На самом деле settings.gradle под проектом верхнего уровня.

Наконец, если структура проекта не показывает вам многого (мой показал мне только настройки платформы и не имел всех других вариантов выбора в большинстве руководств), вы можете щелкнуть правой кнопкой мыши свой проект верхнего уровня, например HelloWorldProject, а затем выбрать «Настройки модуля» и это может привести вас туда, где вам нужно.

Некоторые скриншоты для вышеперечисленного могут быть полезны — похоже, они меняют макеты и т. Д. И прячут вещи, поэтому официальные руководства не всегда верны:

Lame не может размещать ваши изображения...

person tmx    schedule 18.09.2013

образцы (с проектом с несколькими модулями и проектами с несколькими библиотеками) заархивированы.

http://tools.android.com/tech-docs/new-build-system/

прокрутите вниз.

касательно

Could not find com.android.tools.build:gradle:0.5.

эта банка не находится в центральном maven, она поставляется с Android Studio 0.2.+ Обычно это происходит, если вы обновляете Android Studio до версии 0.2, которая не имеет внутреннего репозитория m2. Установите новую студию Android, и она должна работать. Та же история с библиотекой поддержки.

person robotoaster    schedule 21.08.2013