2013-08-20 18 views
6

Edit finale:Android Studio w/Gradle: Pacchetto r non esiste

Questa era una specie di lunga domanda con vari interventi di modifica, e non era necessariamente facendo la cosa giusta ad ogni passo del cammino . Per chiunque sia incappato in questa domanda e stia riscontrando problemi nella conversione di un progetto in gradle in Android Studio, suggerirei di verificare this repository menzionato in question # 16718026 e provare a importarlo e compilarlo ed eseguirlo. Una volta che hai lavorato qualcosa, è più facile vedere cosa potrebbe esserci di sbagliato nel tuo progetto.

Per riassumere, ecco cosa ho fatto per convertire un progetto di Android Studio non Gradle in uno di Gradle funzionante, utilizzando Android Studio .2.5, che ha installato automaticamente Gradle 1.6 e il Gradle Plugin .5 per me.

(1) Creato un nuovo progetto Android Studio vuoto con un'icona e un'attività. NOTA: all'inizio non l'avevo capito perché stavo imparando Android e Gradle contemporaneamente, ma Android Studio (comunque in questa versione) in realtà ti imposta con una configurazione multi-progetto, il che è stato per me fonte di confusione. Multiprogetto significa che c'è un'altra cartella sopra il progetto nella gerarchia, che fornisce una posizione per memorizzare le impostazioni per tutti i progetti. AS ha fatto non creare un file build.gradle nella cartella del sottoprogetto (nel mio caso, FrontlineSMS), nonostante una guida video che lo indicasse. Così ho dovuto creare il file sottoprogetto build.gradle e anche creare un semplice settings.gradle (vedi Update 2 sotto.)

(2) Copiato src /, res /, .git /, lib /, .gitignore e AndroidManifest.xml alla radice del nuovo progetto.

(3) Utilizzare git mv per spostare questi elementi nelle posizioni appropriate in base alle convenzioni nella Guida dell'utente al plugin Gradle, sostituendo o rimuovendo alcuni file o cartelle esistenti nel progetto vuoto, laddove necessario.

(4) Creato un build.gradle nella mia cartella sottoprogetto e ha dato alcune impostazioni di base (vedi sotto o nella questione linkato sopra)

(5) importato il progetto come descritto nella Update 4

domanda originale:

sono uno sviluppatore Android novizio cercando di convertire un progetto di Studio Android che attualmente non utilizza Gradle (e compila e funziona bene) a quella che utilizza Gradle su OS X. sono bloccato su un errore di risorsa, che penso possa avere a che fare con la mia struttura del progetto, le impostazioni nell'IDE, le impostazioni nei file build.gradle o una combinazione di queste.

Il modo in cui ho fatto la conversione è stato innanzitutto creare un nuovo progetto in Android Studio, copiare i file in posizioni appropriate, quindi aggiungere alcune impostazioni nei file IDE e build.gradle. La mia struttura del progetto risultante è,

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

Più in particolare, forse, è ho messo la res/cartelle allo stesso livello di java/e AndroidManifest.xml. Sto cercando di seguire le convenzioni menzionate nel Manuale utente del plugin Gradle, quindi non devo personalizzare troppo nei file build.gradle.

Ho anche contrassegnato la cartella FrontlineSMS/src/main/java/net come sorgente perché se non lo faccio, nulla tenta di compilare. Ho creato un nuovo file build.gradle in FrontlineSMS/build.gradle perché non esisteva quando ho realizzato il nuovo progetto, anche se un video didattico sul sito web di Gradle lo ha detto.

Nell'IDE ho anche impostato le dipendenze per le librerie esterne che ho in/lib.

Quando provo a compilare tramite l'IDE ottengo molti errori Package r does not exist, ad indicare che la classe R generata automaticamente non viene generata o riconosciuta. Questo è definito nel progetto come,

import net.frontlinesms.android.R; 

in diversi file. Cosa posso fare per far sì che Android Studio/Gradle riconosca le risorse che ho definito in src/main/res?

Leggendo le domande degli altri, ho notato che alcune soluzioni a questo errore riguardavano la marcatura di una cartella "gen /" come root di origine o "pulizia" del progetto. Ho provato a creare una cartella/gen nella directory radice e contrassegnarla come sorgente ma non ha funzionato. E ricostruire il progetto mi dà solo gli stessi errori.

Il mio file di root build.gradle ha la seguente,

dependencies { 
    compile project(':FrontlineSMS') 
} 

E quello sotto FrontlineSMS/build.gradle ha,

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 provo a costruire dalla riga di comando utilizzando ./gradlew clean ottengo questo errore,

(removed error) 

Oltre alla mia domanda precedente, apprezzerei qualsiasi suggerimento da prestare su come strutturare questo progetto. Questo non è pensato per essere una configurazione multi-progetto. Grazie per l'aiuto.

Update 1

sono stato in grado di generare un APK dalla riga di comando. Il mio problema principale è che stavo chiamando gradle clean dalla directory sbagliata. Chiamato da FrontlineSMS ha funzionato. Immagino che Android Studio mi abbia configurato con una configurazione multi-progetto quando ho appena avuto un progetto e non ho inserito tutte le impostazioni per questo, cioè non avevo creato un file settings.gradle.

Update 2

creato il seguente file settings.gradle, che mi permette di correre gradle clean && gradle build dalla directory principale (in cui risiede settings.gradle):

include ':FrontlineSMS' 

Nota: la versione di gradle Sto usando qui è quello installato da homebrew, 1.6. Se io uso l'involucro gradlew che è stato installato si dice,

Gradle version 1.6 is required. Current version is 1.7 

prenotare online un questo errore sembra indicare che Android non supporta 1.7, a questo punto, solo l'1,6 (e forse è sempre una versione o due dietro), tuttavia questa è la versione che è stata installata da Android Studio quando ho creato un nuovo progetto!

Update 3 (edit: questo è fondamentalmente tutto sbagliato, non seguire questa)

cercando di costruire il progetto da Android Studio produce lo stesso errore come sopra per quanto riguarda 1.6 sia necessario. Ho provato a reimportare il progetto, anche se ha detto che non riusciva a trovare alcun file sorgente. Immagino che questo significhi o (1) ho la versione sbagliata di gradle e ho bisogno di risolverlo e forse (2) ho bisogno di definire i file sorgente nel file build.gradle dopo tutto, anche se pensavo di seguire il convenzioni dalla guida.

Ho provato a copiare gradle-wrapper-1.6.jar per sostituire gradle/wrapper/gradle-wrapper.jar ma che ha appena restituito un errore di classe o metodo non trovato quando l'ho eseguito tramite ./gradlew clean.

soluzione Tentativo: In gradle/wrapper/gradle-wrapper.properties c'è una linea distributionUrl= e ho cambiato questo per puntare alla versione 1.6,

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

Quindi la prossima volta che mi sono imbattuto ./gradlew clean è scaricato una nuova versione di di Gradle nella mia casa directory ~/.gradle (che fino ad ora non avevo realizzato esistere) e ora quando digito ./gradlew --version dice che è in 1.6, e tutto si costruisce tramite la riga di comando usando ./gradlew clean && ./gradlew build, risultante in apk. Così sembra lavorare da linea di comando, ma voglio anche far funzionare tutto questo dall'IDE

Nell'IDE ora dice

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

Così ho aggiornare il file build.gradle dire

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

e riaprire l'IDE, che mi dice,

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

Are Android Studio Gradle plu versioni di gin e gradle legate insieme? Se sì cosa voglio, gradle plugin .4 + gradle 1.6 o gradle plugin .5 e gradle 1.7? E come installarli correttamente?

Aggiornamento 4

ho finalmente ottenuto questo per compilare sia tramite la riga di comando e l'IDE. Il trucco consisteva nell'importare il progetto usando Gradle dopo aver creato i file Gradle di base. Grazie, Ethan! Durante il processo Import Project c'è un passaggio in cui si sceglie "Crea progetto da origini esistenti" o "Importa progetto da modello esterno". Avevo scelto il primo quando avrei dovuto scegliere quest'ultimo e scelto Gradle. Successivamente ho selezionato "use gradle-wrapper (recommended)" e ho controllato "use auto-import" e ho fatto clic su Finish. E mi ha avvertito di un paio di cose ho dovuto cambiare, ad esempio utilizzando l'ultimo plugin Gradle, per la quale ho fatto questo cambiamento nel mio file build.gradle,

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

che viene suggerito nei problemi noti per il plugin Gradle Android .

+0

Puoi pubblicare il tuo file settings.gradle? – Ethan

risposta

2

Sembra che manchi il file settings.gradle dalla directory principale del progetto.

Avrete bisogno del file settings.gradle per accedere al sottoprogetto che si trova all'interno del repository di origine.

Quando si importa il progetto, assicurarsi di selezionare Gradle come sorgente!

0

campioni (con progetto multi-modulo e progetti multi-lib) zippati.

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

di scorrimento verso il basso.

riguardo

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

questo barattolo non è nel centro di Maven, è dotato di Android 0.2 Studio. + Di solito succede se si esegue l'aggiornamento Android Studio dal pre 0.2 che non ha repo m2 interna. Installa un nuovo studio Android e dovrebbe funzionare. Stessa storia con la libreria di supporto.

1

In realtà un paio di punti:

andare su File -> Impostazioni -> Gradle e individuare:

selezionare Usa distribuzione Gradle locali e individuare:

C: \ Utenti \. Gradle/involucro/dists/Gradle-1.6-bin/72srdo3a5eb3bic159kar72vok/Gradle-1.6

questo funziona, ma si deve cancellare tutte le cose precedenti out, andando a:

File -> Invalidate caches/riavviare

Poi si dovrebbe tornare in, verrà reimportare (potrebbe richiedere di configurare nuovamente Gradle se quanto sopra non era esattamente corretto credo)

Ora dovrebbe lavoro ... non è necessario creare manualmente i file build.gradle.

the settings.gradle attualmente sotto il progetto di livello superiore.

Infine, se la struttura del progetto non ti mostra molto (il mio solo mi ha mostrato le impostazioni della piattaforma e non ha tutte le altre selezioni nella maggior parte delle guide) puoi fare clic con il tasto destro del mouse sul progetto di primo livello, ad esempio HelloWorldProject e quindi selezionare Impostazioni del modulo e questo potrebbe portarti dove ti serve.

Alcuni screenshots per quanto sopra può essere utile - si presenta come stanno cambiando i layout ecc e nascondere roba così le guide ufficiali non sono sempre corrette:

Lame non è possibile inviare le immagini ...

Problemi correlati