2013-08-20 14 views
6

końcowy EDIT:Android Studio w/Gradle: Pakiet R nie istnieje

To był rodzaj długiej pytanie z kilkoma modyfikacjami, a ja nie zawsze postępuje właściwie na każdym etapie drogi . Dla każdego, kto natknie się na to pytanie i ma problemy z konwersją projektu na gradle w Android Studio, sugeruję wypróbowanie this repository wspomnianego w question # 16718026 i spróbowanie zaimportować to i skompilować i uruchomić. Gdy już coś wykonasz, łatwiej będzie zobaczyć, co może być nie tak z twoim projektem.

Podsumowując, oto, co zrobiłem, aby przekonwertować projekt inny niż Gradle Android Studio na działający Gradle jeden, używając Android Studio .2.5, który automatycznie zainstalował Gradle 1.6 i Gradle Plugin .5 dla mnie.

(1) Utworzono nowy pusty projekt Android Studio z ikoną i działaniem. UWAGA: Początkowo nie zdawałem sobie z tego sprawy, ponieważ uczyłem się jednocześnie Androida i Gradle, ale Android Studio (i tak w tej wersji) faktycznie ustawia cię w konfiguracji z wieloma projektami, co było dla mnie kłopotliwe. Multi-Project oznacza, że ​​w hierarchii znajduje się inny folder nad projektem, podając lokalizację do przechowywania ustawień dla wszystkich projektów. AS zrobił nie utworzyć plik build.gradle w folderze podprojektu (w moim przypadku, FrontlineSMS), mimo że przewodnik wideo wskazuje, że będzie. Więc musiałem stworzyć ten plik podprojektem build.gradle a także stworzyć bardzo prosty settings.gradle (patrz Aktualizacja 2 poniżej.)

(2) Skopiowane src/res /, .git /, lib /, .gitignore i AndroidManifest.xml do katalogu głównego nowego projektu.

(3) Używane git mv do przenoszenia tych elementów do odpowiednich miejsc zgodnie z konwencjami w Podręczniku użytkownika wtyczki Gradle, zastępując lub usuwając niektóre istniejące pliki lub foldery w pustym projekcie, w razie potrzeby.

(4) Utworzony build.gradle w moim folderze podprojektu i dał kilka podstawowych ustawień (patrz poniżej lub w kwestii związanej powyżej)

(5) Importowana projekt jak opisano w Update 4

Oryginalne pytanie:

Jestem początkującym Android deweloper próbuje przekształcić projekt Android Studio, które obecnie nie korzystać Gradle (i kompiluje i działa dobrze) do jednego, który używa Gradle na OS X. jestem utknęły w błędzie Resource, co prawdopodobnie może mieć związek albo z moją strukturą projektu, ustawieniami w IDE, ustawieniami w plikach build.gradle, albo z pewną ich kombinacją.

Sposób, w jaki zrobiłem konwersję polegał na utworzeniu nowego projektu w Android Studio, skopiowaniu plików do odpowiednich lokalizacji, a następnie dodaniu niektórych ustawień w plikach IDE i build.gradle. My powstała struktura projektu jest

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

Przede wszystkim, być może, to kładę RES/folderu na tym samym poziomie jak Java/i AndroidManifest.xml. Próbuję postępować zgodnie z konwencjami wymienionymi w Podręczniku użytkownika wtyczki Gradle, więc nie muszę dostosowywać zbyt wiele w plikach build.gradle.

Również oznaczyłem folder FrontlineSMS/src/main/java/net jako źródło, ponieważ jeśli tego nie zrobię, nic nie będzie próbowało się skompilować. Stworzyłem nowy plik build.gradle w FrontlineSMS/build.gradle, ponieważ nie istniało, gdy robiłem nowy projekt, mimo że film instruktażowy na stronie internetowej Gradle powiedział, że tak.

W środowisku IDE ustawiam również zależności dla bibliotek zewnętrznych, które mam w/lib.

Kiedy próbuję skompilować przez IDE, otrzymuję wiele błędów Package r does not exist, wskazując, że automatycznie generowana klasa R nie jest generowana ani rozpoznawana. Jest to zdefiniowane w projekcie jako,

import net.frontlinesms.android.R; 

w kilku plikach. Co mogę zrobić, aby Android Studio/Gradle rozpoznawał zasoby zdefiniowane w src/main/res?

Odczytując inne pytania, zauważam, że niektóre rozwiązania tego błędu polegały na oznaczeniu folderu "gen /" jako źródłowego katalogu źródłowego lub "wyczyszczeniu" projektu. Próbowałem stworzyć gen/folder w katalogu głównym i oznaczać go jako źródło, ale to nie zadziałało. A przebudowa projektu powoduje po prostu te same błędy.

Mój plik korzeń build.gradle ma następującą,

dependencies { 
    compile project(':FrontlineSMS') 
} 

a jeden pod FrontlineSMS/build.gradle ma,

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

Kiedy próbuję zbudować z wiersza poleceń za pomocą ./gradlew clean otrzymuję ten błąd,

(removed error) 

Oprócz mojego poprzedniego pytania, doceniam wszelkie wskazówki, które możesz pożyczyć, jak ten projekt powinien być skonstruowany. To nie ma być konfiguracja wielu projektów. Dzięki za pomoc.

Update 1

byłem w stanie wygenerować plik APK z wiersza poleceń. Mój główny problem polega na tym, że wywołałem gradle clean z niewłaściwego katalogu. Dzwonienie z FrontlineSMS działało. Zgaduję, że Android Studio ustawił mnie z konfiguracją wielu projektów, kiedy miałem tylko jeden projekt, i nie wprowadziłem wszystkich ustawień dla tego, tj. Nie utworzyłem pliku settings.gradle.

Aktualizacja 2

Utworzono następujące settings.gradle plik, który pozwala mi uruchomić gradle clean && gradle build od katalogu głównego (gdzie rezyduje settings.gradle):

include ':FrontlineSMS' 

Uwaga: Wersja z gradle Używam tutaj jest ten zainstalowany przez homebrew, 1.6. Jeśli używam gradlew opakowanie, które zostało zainstalowane mówi,

Gradle version 1.6 is required. Current version is 1.7 

wyszukiwanie w sieci dla tego błędu wskazuje na to, że Android nie obsługuje 1.7 w tym momencie, tylko 1.6 (a może to jest zawsze wersja lub dwa z tyłu), ale jest to wersja, która została zainstalowana przez Android Studio, kiedy stworzyłem nowy projekt!

Update 3 (edit: to w zasadzie wszystko jest złe, nie wykonuj tego)

Próbując zbudować projekt z Android Studio daje ten sam błąd jak wyżej w odniesieniu 1.6 są wymagane. Próbowałem ponownie zaimportować projekt, chociaż powiedział, że nie może znaleźć żadnych plików źródłowych. Myślę, że to oznacza albo (1) mam złą wersję gradle i muszę to naprawić i może (2) będę musiał zdefiniować pliki źródłowe w pliku build.gradle mimo wszystko, chociaż myślałem, że podążam za konwencje z przewodnika.

Próbowałem skopiować gradle-wrapper-1.6.jar w celu zastąpienia gradle/wrapper/gradle-wrapper.jar, ale to właśnie dało błąd klasy lub metody, która nie została znaleziona, gdy uruchomiłem ją przez ./gradlew clean.

próba rozwiązanie: W gradle/wrapper/gradle-wrapper.properties istnieje linia distributionUrl= i zmieniłem to zwrócić się do wersji 1.6,

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

Wtedy następnym razem wpadłem ./gradlew clean go pobrać nową wersję z Gradle do mojego domu katalog ~/.gradle (który do tej pory nie zdawałem sobie sprawy, że istnieje) i teraz, gdy wpisuję ./gradlew --version, mówi, że jest na 1.6, a wszystko buduje się za pomocą wiersza poleceń, używając ./gradlew clean && ./gradlew build, co powoduje apk. Wygląda więc na to, aby pracować z wiersza polecenia, ale również chcę to do pracy z IDE

w IDE to teraz mówi

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

więc zaktualizować plik build.gradle powiedzieć

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

i ponownym otwarciu IDE, który mówi mi,

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

Are Android Studio Gradle plu wersje gin i gradle powiązane razem? Jeśli tak, czego chcę, gradle plugin .4 + gradle 1.6 lub gradle plugin .5 i gradle 1.7? A jak właściwie je zainstalować?

Aktualizacja 4

I wreszcie to do kompilowania zarówno poprzez linię poleceń i IDE. Sztuką było zaimportowanie projektu za pomocą programu Gradle po utworzeniu podstawowych plików Gradle. Dzięki Ethan! Podczas procesu importowania projektu jest krok, w którym wybierasz "Utwórz projekt z istniejących źródeł" lub "Importuj projekt z zewnętrznego modelu". Wybrałem ten pierwszy, kiedy powinienem wybrać to drugie i wybrać Gradle. Potem wybrałem "use gradle-wrapper (recommended)" i zaznacz "use auto-import" i kliknij Finish. To ostrzegł mnie o paru rzeczach musiałem zmienić, takich jak przy użyciu najnowszych Gradle wtyczki, dla którego zrobiłem tę zmianę w moim pliku build.gradle,

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

która jest sugerowane w znanych problemów dla android wtyczki Gradle .

+0

Czy możesz opublikować swój plik settings.gradle? – Ethan

Odpowiedz

2

Wygląda na to, że brakuje pliku settings.gradle z katalogu głównego projektu.

Będziesz potrzebować pliku settings.gradle, aby uzyskać dostęp do podprojektu, który znajduje się w repozytorium źródłowym.

Podczas importowania projektu należy wybrać Gradle jako źródło!

0

próbki (z projektem wielomodułowym i projektami z wieloma bibliotekami) zip.

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

przewijania do dołu.

dotyczące

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

ten słoik nie jest w Maven centralny, chodzi o Android Studio 0.2 . + Zwykle bywa w przypadku uaktualnienia z pre Android Studio 0.2, które nie posiadają wewnętrzne m2 repo. Zainstaluj świeże studio Android i powinno działać. Ta sama historia z biblioteką wsparcia.

1

Właściwie kilka punktów:

przejdź do Plik -> Ustawienia -> Gradle i przejdź do:

wybierz Użyj lokalnej dystrybucji Gradle i przejdź do:

C: \ Users \. Gradle/wrapper/dists/Gradle-1.6-bin/72srdo3a5eb3bic159kar72vok/Gradle-1,6

To działa, ale trzeba usunąć wszystkie poprzednie rzeczy na zewnątrz, przechodząc do:

File -> unieważnia pamięci podręcznej/restart

Następnie należy wrócić się, że ponownie import (może poprosi ponownie skonfigurować Gradle jeśli powyższe nie było dokładnie poprawne chyba)

Teraz powinno działa ... nie musisz ręcznie kompilować plików build.gradle.

the settings.gradle faktycznie pod projektem najwyższego poziomu.

Wreszcie, jeśli struktura projektu nie pokazuje zbyt wiele (moje pokazywało mi tylko ustawienia platformy i nie zawiera wszystkich innych opcji w większości przewodników), można kliknąć prawym przyciskiem myszy na projekt na najwyższym poziomie, np. HelloWorldProject, a następnie wybrać Ustawienia modułu i to może cię tam, gdzie potrzebujesz.

Niektóre screeny na powyższe mogą być pomocne - wygląda na to, że zmieniają się układy etc i ukrywanie rzeczy więc oficjalne prowadnice nie zawsze są poprawne:

Lame Nie możesz pisać ci obrazów ...

Powiązane problemy