Android Studio com gradle: o pacote r não existe

Edição final:

Esta foi uma longa pergunta com várias edições, e eu não estava necessariamente fazendo a coisa certa em cada passo do caminho. Para quem se depara com esta questão e está com dificuldades em converter um projeto para gradle no Android Studio, sugiro que efetue o checkouteste repositório mencionado empergunta # 16718026 e tentando importar isso e compilá-lo e executá-lo. Uma vez que você tenha algo funcionando, é mais fácil ver o que pode estar errado com seu próprio projeto.

Para resumir, eis o que fiz para converter um projeto Non-Gradle do Android Studio em um Gradle em funcionamento, usando o Android Studio .2.5, que instalou automaticamente o Gradle 1.6 e o ​​Gradle Plugin .5 para mim.

(1) Criamos um novo projeto em branco do Android Studio com um ícone e uma atividade. NOTA: Eu não percebi isso no começo porque eu estava aprendendo Android e Gradle ao mesmo tempo, mas o Android Studio (nesta versão, de qualquer maneira) realmente configura você com uma configuração multi-projeto, o que foi confuso para mim. Multi-Project significa que há outra pasta acima do seu projeto na hierarquia, dando um local para armazenar as configurações de todos os projetos. AS feznão crie um arquivo build.gradle na pasta do subprojeto (no meu caso, FrontlineSMS), apesar de um guia de vídeo indicar que seria. Então eu tive que criar esse arquivo subproject build.gradle e também criar um settings.gradle muito simplesAtualização 2 abaixo.)

(2) Copiado src /, res /, .git /, lib /, .gitignore e AndroidManifest.xml para a raiz do novo projeto.

(3) Usadogit mv para mover esses itens para os locais apropriados de acordo com as convenções do Guia do Usuário do Plugin Gradle, substituindo ou removendo alguns arquivos ou pastas existentes no projeto em branco, quando necessário.

(4) criou umbuild.gradle na pasta do meu subprojeto e defini algumas configurações básicas (veja abaixo ou na pergunta acima)

(5) Importou o projeto como descrito emAtualização 4

Pergunta original:

Eu sou um novato desenvolvedor Android tentando converter um projeto Android Studio que atualmente não usa Gradle (e compila e executa muito bem) para um que usa Gradle no OS X. Eu estou preso em um erro de recurso, que eu acho que pode tem a ver com a estrutura do meu projeto, as configurações no IDE, as configurações nos arquivos build.gradle ou alguma combinação delas.

A maneira como fiz a conversão foi primeiro criar um novo projeto no Android Studio, copiar os arquivos nos locais apropriados e adicionar algumas configurações nos arquivos IDE e build.gradle. Minha estrutura de projeto resultante é,

├── 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
           │                   ├── ...

Mais notavelmente, talvez, eu coloquei a pasta res / no mesmo nível de java / e AndroidManifest.xml. Estou tentando seguir as convenções mencionadas no Guia do Usuário do Plugin Gradle, portanto não preciso personalizar muito nos arquivos build.gradle.

Eu também marquei a pasta FrontlineSMS / src / main / java / net como fonte, porque se não, nada tenta compilar. Eu criei um novo arquivo build.gradle no FrontlineSMS / build.gradle porque ele não existia quando eu fiz o novo projeto, mesmo que um vídeo instrucional no site da Gradle tenha dito que seria.

No IDE eu também defino as dependências para as bibliotecas externas que eu tenho em / lib.

Quando tento compilar através do IDE, recebo muitosPackage r does not exist erros, indicando que a classe R gerada automaticamente não está sendo gerada ou reconhecida. Isso é definido no projeto como,

import net.frontlinesms.android.R;

em vários arquivos. O que posso fazer para que o Android Studio / Gradle reconheça os recursos que defini em src / main / res?

Ao ler as perguntas dos outros, percebo que algumas soluções para esse erro envolviam marcar uma pasta "gen /" como raiz de origem ou "limpar" o projeto. Eu tentei criar uma pasta gen / no diretório raiz e marcá-lo como fonte, mas isso não funcionou. E a reconstrução do projeto só me dá os mesmos erros.

Meu arquivo build.gradle raiz tem o seguinte,

dependencies {
   compile project(':FrontlineSMS')
}

E aquele em FrontlineSMS / build.gradle tem,

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
    }
}

Quando tento construir a partir da linha de comando usando./gradlew clean Eu recebo este erro

(removed error)

Além da minha pergunta anterior, agradeço quaisquer dicas que você possa emprestar sobre como este projeto deve ser estruturado. Isso não deve ser uma configuração de vários projetos. Obrigado pela ajuda.

Atualização 1

Consegui gerar um APK a partir da linha de comando. Meu principal problema é que eu estava chamandogradle clean do diretório errado. Chamá-lo de FrontlineSMS funcionou. Imagino que o Android Studio tenha me configurado com vários projetos quando acabei de ter um projeto e não inseri todas as configurações para isso, ou seja, não criei um arquivo settings.gradle.

Atualização 2

Criei o seguinte arquivo settings.gradle, que me permite executargradle clean && gradle build a partir do diretório raiz (onde reside o settings.gradle):

include ':FrontlineSMS'

Nota: a versão do gradle que estou usando aqui é aquela instalada pelo homebrew, 1.6. Se eu usar o wrapper de gradlew que foi instalado, ele diz:

Gradle version 1.6 is required. Current version is 1.7

Pesquisando na web por este erro parece indicar que o Android não suporta 1.7 neste momento, apenas 1.6 (e talvez seja sempre uma versão ou duas por trás), mas esta é a versão que foi instalada pelo Android Studio quando eu criei um novo projeto!

Atualização 3 (Edit: isso é basicamente tudo errado, não siga isso)

Tentar construir o projeto no Android Studio produz o mesmo erro acima, com relação à exigência de 1,6. Eu tentei reimportar o projeto, embora ele disse que não conseguiu encontrar nenhum arquivo de origem. Eu acho que isso significa que (1) eu tenho a versão errada do gradle e preciso corrigi-lo e talvez (2) eu preciso definir arquivos de origem no arquivo build.gradle depois de tudo, mesmo que eu pensei que estava seguindo o convenções do guia.

Eu tentei copiargradle-wrapper-1.6.jar para substituirgradle/wrapper/gradle-wrapper.jar mas isso só deu uma classe ou método não encontrado erro quando eu corri via./gradlew clean.

Tentativa de solução: emgradle/wrapper/gradle-wrapper.properties existe uma linhadistributionUrl= e eu mudei isso para apontar para a versão 1.6,

distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip

Então da próxima vez que eu corri./gradlew clean ele baixou uma nova versão do gradle no meu diretório home~/.gradle (que até agora eu não sabia que existia) e agora quando eu digito./gradlew --version ele diz que é no 1.6, e tudo é construído através da linha de comando usando./gradlew clean && ./gradlew build, resultando em apks. Então, parece funcionar a partir da linha de comando, mas eu também quero que isso funcione a partir do IDE

No IDE, agora diz

Project is using an old version of the Android Gradle plug-in. The minimum supported version is 0.5.0

Então eu atualizo obuild.gradle arquivo para dizer

classpath 'com.android.tools.build:gradle:0.5'

E reabrir o IDE, que me diz

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

As versões de plug-in e gradle do Android Studio estão vinculadas? Se assim for o que eu quero, plugin gradle .4 + gradle 1.6 ou gradle plugin .5 e gradle 1.7? E como faço para instalá-los corretamente?

Atualização 4

Eu finalmente consegui isso para compilar através da linha de comandoe o IDE. O truque era importar o projeto usando o Gradle depois de criar os arquivos básicos do Gradle. Obrigado Ethan! Durante o processo Importar projeto, há uma etapa em que você escolhe "Criar projeto a partir de fontes existentes" ou "Importar projeto de modelo externo". Eu estava escolhendo o primeiro quando deveria ter escolhido o último e escolhido Gradle. Depois disso, selecionei "use gradle-wrapper (recommended)" e marquei "use auto-import" e cliquei em Finish. Ele me avisou sobre algumas coisas que eu tive que mudar, como usar o plugin mais recente do gradle, pelo qual eu fiz essa mudança na minhabuild.gradle Arquivo,

classpath 'com.android.tools.build:gradle:0.5.+'

o que é sugerido nos problemas conhecidos para o plugin android gradle.

questionAnswers(3)

yourAnswerToTheQuestion