2014-06-19 27 views
25

Mam zestaw projektów, które używają tego samego modułu, który zawiera prawie cały rzeczywisty kod. Projekt jest ustawiony jak:Jak mogę dodać smaki do modułu w Android Studio?

project/ 
    - app/ 
    - build.gradle 
    - libraries/ 
    - module/ 
     - build.gradle 
    - build.gradle 
    - settings.gradle 

Zależności są ustawione poprawnie i mogę zbudować i uruchomić aplikacje świetne, jednak mogę tylko dodać smaku do projektu, co nie jest idealnym rozwiązaniem. settings.gradle zawiera następujące elementy:

include ':app', ':libraries:module' 

w App książce telefonicznej za build.gradle pliku dodałem poniższy fragment:

productFlavors { 
    alpha 
    production 
} 

Korzystanie Gradle 0.11, ten synchronizuje i tworzy assembleAlphaDebug, assembleAlphaRelease, assemblacjaProdukcjaDebug, assembletProduct Zadania ionRelease. Gdy próbuję to zrobić w module zamiast tego pojawia się błąd:

No resource found that matches the given name (at 'theme' with value '@style/MyCustomTheme')

w wybudowanym app/src/main/AndroidManifest.xml. Z jakiegoś powodu moduł nie jest budowany, więc niestandardowy motyw nie działa. Co ja robię źle?

+0

Zgodnie z moim rozumieniem nawet aplikacja jest modułem takim samym jak "moduł" i umieszczanie smaków w dowolnym module będzie działać. Jaki błąd pojawia się podczas kompilacji kodu. – pyus13

+0

@ pyus13 Patrząc dalej, błąd wydaje się być problemem, gdy nie znajdujemy zasobu dla danego smaku. Mam zestaw motywów niestandardowych w manifeście aplikacji, ale otrzymuję komunikat "Nie znaleziono zasobu pasującego do podanej nazwy (w" temacie "z wartością" @ style/MyCustomTheme ")'. – Phil

+0

to twój moduł to projekt biblioteki. Czy ma wtyczkę "android-library" lub "android"? – pyus13

Odpowiedz

61

W build.gradle modułu biblioteki, trzeba kilka dodatkowych linii, aby poinformować go, aby wyeksportować i smaki, które budować wariant domyślnie używać, jeśli nie podano, kiedy jest włączone z innego modułu:

android { 
    defaultPublishConfig "productionRelease" 
    publishNonDefault true 

    productFlavors { 
     alpha { 
     } 
     production { 
     } 
    } 
} 

Ten bit publishNonDefault jest niezbędny tylko, jeśli ktoś chciałby polegać na czymś innym niż wariant inny niż productionRelease. Prawdopodobnie dzieje się tak, jeśli najpierw zainstalujesz w swojej bibliotece wiele smaków.

Teraz jeśli dodać zależność od innego modułu poprzez to w build.gradle:

dependencies { 
    compile project(':module') 
} 

będzie to zależeć od wariantu productionRelease domyślnie. Jeśli chcesz polegać na innym niż domyślnym wariancie:

dependencies { 
    compile project(path: ':module', configuration:'alphaDebug') 
} 
+0

Rozwiązałem mój problem, dzięki! – Phil

+1

Czy byłoby możliwe uzależnienie tylko od smaku, a nie od typu kompilacji? –

+0

Zakładam, że miałeś na myśli 'projekt kompilacji (' – Blundell

Powiązane problemy