2017-03-09 82 views
8

Chcę zbudować pojedynczą bibliotekę z mojego projektu, projekt wykorzystuje wiele zależności i zasobów. Jeśli widok kart jest zaimportowany jako słoik, nie będzie miał przy sobie zasobów, ale gdy zostanie dodany jako aar, zostanie dodany jako inny moduł. Więc nie mogę połączyć go w jedną bibliotekę. Nie chcę przesyłać mojego projektu do repozytorium. Jak mogę zbudować bibliotekę, dziękuję z góry!Jak stworzyć pojedynczą bibliotekę, łącząc różne moduły?

+0

Czy umieścisz swoje bieżące pliki konfiguracyjne? – Adonis

+0

Dlaczego nie możesz "skompilować" pliku com.android.support: cardview-v7: 25.2.0'' bez użycia Jar lub Aar? –

Odpowiedz

0

android-fat-aar powinien zająć się tym problemem.

Trzeba

apply from: 'fat-aar.gradle' 

z repozytorium GitHub a następnie zastąpić kompilacji zależności z wbudowanego uzależnienia. Więc zamiast definining modułu otherModule zależność jako

dependencies { 
    compile project(':otherModule') 
} 

że trzeba tylko określić go jako

dependencies { 
    embedded project(':otherModule') 
} 

skompilować konfiguracja zależy od konfiguracji osadzone, więc musiałbyś takie samo zachowanie, jak wcześniej.

Ostatecznie jest to problematyczna konfiguracja, szczególnie jeśli chcesz korzystać z niektórych bibliotek obsługi Androida. Najprawdopodobniej napotkasz problemy z duplikacją.

Jeśli tworzysz tę konfigurację w trybie offline pracy, lepiej rozważyć użycie Local Maven repository

repositories { 
    mavenLocal() 
} 

z kopią artefaktów bibliotecznych trzeba użyć. A może nawet osobiście zarządzane repozytorium dla siebie i każdego, kto tego potrzebuje.

0

Czy wiesz, że możesz używać modułu jako biblioteki (źródła, bez kompilowania AAR)? Będzie to oznaczać, że twoja biblioteka-projekt może korzystać ze wszystkich zależności gradle. Oto przykład z projektem biblioteki o nazwie "MyApiLibrary", który będzie samodzielnym modułem o nazwie "api"

Najpierw utwórz swoją bibliotekę jako nowy projekt (z nazwą modułu "api" dla tego przykładu, ale nazwa może bądź tym, co lubisz). W pliku Gradle dla tego modułu biblioteki użyć wtyczki biblioteki gdzie zazwyczaj użycie wtyczki aplikacji za

apply plugin: 'com.android.library' //not apply plugin: 'com.android.application' 

także upewnić się, że moduł biblioteki nie zadeklarować applicationId w defaultConfig jego Gradle pliku. Następnie zadeklaruj wszystkie zależności bibliotek, tak jak zwykle.

Następnie w projekcie konsumującym należy zaimportować bibliotekę, wprowadzając następujące ustawienia w ustawieniach .Gradle:

//this first line declares a pseudonym to refer to the library module 
include ':api' 
//this second line explains where the pseudonym links to 
//(the path to the module directory of the library project, relative to the root dir of the current project) 
project(':api').projectDir = new File('../MyApiLibrary/api/') 

W Gradle plik modułu spożywania, odwołanie projektu jako zależność:

dependencies { 
    ... 
    compile project(':api') 
} 

Teraz wszystko wewnątrz głównym projekt może uzyskać dostęp do wszystkich klas i importowane zależności od projektu biblioteki

0

Jeśli dobrze to rozumiem, masz projekt złożony z wielu modułów, który ma kilka projektów bibliotecznych, i chcesz skompilować pojedynczy plik, który obejmuje twoje moduły i ich zależności. Jeśli tak, to:

-Install maven. -Aplikuj wtyczkę gradle maven (https://github.com/dcendents/android-maven-gradle-plugin) do swoich modułów. użyj zadania instalacji, aby zainstalować moduły jako pojedyncze biblioteki.

-Utwórz nowy moduł, który importuje wszystkie zainstalowane wersje pojedynczych bibliotek i ich zależności. Zastosuj wtyczkę z Androidem (https://github.com/zawn/android-shade-plugin, dokumentacja tutaj: http://imperceptiblethoughts.com/shadow/) do tego modułu. Wynikiem tego będzie uber-aar i aar zawierający twoje moduły biblioteczne i ich zależności. Możesz zainstalować to w lokalnej instancji maven lub upuścić aar do katalogu libs w swoich aplikacjach.