Jak utworzyć plik .jar z projektu Android Studio


96

Używam AndroidStudio i mam ten projekt, jak pokazano:

wprowadź opis obrazu tutaj

To, co znajduje się wewnątrz niebieskiego koła, to myLib. myLib musi również korzystać z zewnętrznej biblioteki znajdującej się w czerwonym kółku i pakietu Apache (zielone kółko).

Dlatego chcę, aby całość stała się pojedynczym plikiem .jar, aby móc go używać w innych projektach.

Przewodnik krok po kroku byłby naprawdę mile widziany, jestem początkującym w świecie programistów.

Dzięki!


1
Myślę, że to, czego chcesz, to plik aar (archiwum Androida), który można połączyć po prostu jako zależność. Zasadniczo musisz utworzyć projekt biblioteki Androida. Ale nie potrafię napisać dokładnych kroków z pamięci.
rekire

2
Potrzebuję pliku .jar, aby móc używać go w dowolnym projekcie Java. Nie tylko androidy.
dum4ll3

1
Musi być prawie taki sam - stwórz projekt biblioteki i wyeksportuj go.
Thrash Bean

Ten błąd opisuje wadę wtyczki gradle Androida, która uniemożliwia łatwe zhakowanie pliku budowania gradle w celu dodania celu słoika ...
mmigdol

Odpowiedzi:


135
  • Otwórz plik build.gradle dla projektu biblioteki wprowadź opis obrazu tutaj

  • Napisz dwa zadania w build.gradle - deleteJar i createJar oraz dodaj regułę createJar.dependsOn (deleteJar, build) wprowadź opis obrazu tutaj

Kod z góry:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • Rozwiń panel ocen od prawej i otwórz wszystkie zadania w swojej bibliotece-> inne. Zobaczysz tam dwa nowe zadania - createJar i deleteJar wprowadź opis obrazu tutaj

  • Kliknij dwukrotnie plik createJar wprowadź opis obrazu tutaj

  • Po pomyślnym uruchomieniu zadania pobierz wygenerowany plik jar ze ścieżki wymienionej w zadaniu createJar, tj. Libs / xxxx.jar wprowadź opis obrazu tutaj

  • skopiuj nowo wygenerowany plik jar do folderu lib wymaganego projektu -> kliknij prawym przyciskiem myszy -> wybierz „dodaj jako bibliotekę”


4
Czasami ludzie rozumieją, raczej oglądając niż czytając. Widzisz, to dobry UX ☺
Abhinav Tyagi,

5
W takim razie powinienem ci powiedzieć, że nie jestem tego pewien release. Mam debugi default, ale nie mam releasefolderu. Jakiej wersji wtyczki używasz? Czy wiesz, czy jest to gdzieś udokumentowane?
Cameron Lowell Palmer

3
Nie mam releasefolderu.
Kamran Bigdely

4
Co próbujesz skopiować? Czy mamy kierować reklamy na foldery zawierające plik APK? Mam na myśli w wierszu z („budowanie / pośrednictwo / pakiety / domyślne”), co ten katalog zawiera dla Ciebie. W moim studiu z Androidem nie ma folderu z paczkami nazw i ciągle nie otrzymuję ŻADNEGO ŹRÓDŁA w zadaniu
createJar

12
zmiana z ('build / medium / bundles / release /') na from ('build /
interactates

59

Jeśli skonfigurujesz kod jako zwykły moduł Java w Gradle, to naprawdę łatwo jest poprosić Gradle o przekazanie pliku jar z zawartością. Ten plik jar będzie zawierał tylko twój kod, a nie inne biblioteki Apache, od których zależy. Zalecałbym dystrybucję w ten sposób; trochę dziwne jest pakowanie zależności w twojej bibliotece i bardziej normalne jest, że użytkownicy tych bibliotek muszą włączać te zależności samodzielnie (ponieważ w przeciwnym razie istnieją kolizje tych projektów, które już łączą kopie biblioteki, być może różnych wersji ). Co więcej, unikniesz potencjalnych problemów licencyjnych związanych z redystrybucją kodu innych osób, jeśli będziesz publikować swoją bibliotekę.

Weź kod, który również musi zostać skompilowany, do jar i przenieś go do oddzielnego, zwykłego modułu Java w Android Studio:

  1. Menu Plik > Nowy moduł ... > Biblioteka Java
  2. Skonfiguruj bibliotekę, nazwę pakietu Java i nazwy klas w kreatorze. (Jeśli nie chcesz, aby utworzyła dla Ciebie klasę, możesz ją po prostu usunąć po utworzeniu modułu)
  3. W kodzie Androida skonfiguruj zależność od nowego modułu, aby mógł używać kodu w nowej bibliotece:
  4. Plik > Struktura projektu > Moduły > (Twój moduł systemu Android) > Zależności > + > Zależność modułu . Zobacz zrzut ekranu poniżej: wprowadź opis obrazu tutaj
  5. Wybierz moduł z listy w wyświetlonym oknie dialogowym: wprowadź opis obrazu tutaj

Mam nadzieję, że Twój projekt powinien teraz budować się normalnie. Po wykonaniu kompilacji plik jar dla biblioteki Java zostanie umieszczony w katalogu build / libs w katalogu modułu. Jeśli chcesz ręcznie zbudować plik jar, możesz uruchomić jego zadanie budowania pliku jar z okna Gradle: wprowadź opis obrazu tutaj


Dziękuję Ci bardzo! Twoja odpowiedź była bardzo pomocna, większość na ostatnim zrzucie ekranu, który pokazuje zadania Gradle. Nie wiedziałem tego. Mogę wykonać twoje kroki, ale nadal brakuje mi org.apache.http.Header. Jak mogę go zaimportować do mojej biblioteki?
dum4ll3

Co masz na myśli, mówiąc, że tego brakuje?
Scott Barta,

1
Przejdź przez ten sam przepływ Struktura projektu> zależności, ale wybierz moduł biblioteki zamiast projektu i dodaj zależność w ten sam sposób. W mojej odpowiedzi mówię, że umieszcza plik jar w katalogu build / libs w swoim katalogu modułów.
Scott Barta,

1
Dostałem: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams. To moja zewnętrzna biblioteka, którą kompiluję z moją.
dum4ll3

2
Działa tylko z biblioteką Java, a zadanie jar w bibliotece Androida nie istnieje
cuasodayleo

26

W Android Studio IDE dostęp do paskaRun Anything ” można uzyskać:

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

Następnie znajdziesz swój artefakt w tym folderze w swoim projekcie
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


LUB


Gradle ma już Taskdo tego w bocznym menu Gradle , pod otherfolderem.

pasek narzędzi gradle

Następnie przewiń w dół createFullJarReleasei kliknij go.

Gradle Tasks

Następnie znajdziesz swój artefakt w tym folderze w swoim projekcie

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
Nie widzę tej opcji. Czy zostało to dodane w najnowszej wersji Studio?
Dibzmania

1
Buduję i kiedy znajduję * .jar, jego nazwa to: full.jar. 30 minut do znalezienia lol
nobjta_9x_tq

1
W moim przypadku znalazłem to wbuild\intermediates\intermediate-jars\release
Yusril Maulidan Raji

Mam pytanie. W moim przypadku generuje 3 pliki jar. classes.jar, full.jari res.jar. Czy powinienem importować wszystkie pliki jar, kiedy chcę ich użyć?
Yusril Maulidan Raji

Po prostu użyj full.jar
Haroun Hajem

11

Po prostu dodaj to do pliku build.gradle modułu Java. Zawiera biblioteki zależne w archiwum.

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

Spowoduje to utworzenie pliku [nazwa_modułu] / build / libs / [nazwa_modułu] .jar.


Ale czy biblioteka .jar miałaby klasę główną? OP mówi, że budują plik .jar, „więc mogę go użyć w innych projektach” (sic!). To brzmi jak biblioteka.
Steve White

Tylko ten facet to zrozumiał, samo stworzenie słoika nie rozwiązuje problemu. co jeśli musimy to wykonać. Powyższy kod pozwala uniknąć błędu „Nie można wykonać pliku jar:„ brak głównego atrybutu manifestu ””.
MobileEvangelist

1

Plik .jar zostanie automatycznie wygenerowany podczas kompilacji / uruchomienia aplikacji.

Możesz znaleźć swój plik class.jar w folderze root_folder / app / build / interactates / bundles / debug

lokalizacja pliku jar


1
  1. Przejdź do zakładki Gradle w Android Studio, a następnie wybierz projekt biblioteki.

  2. Następnie przejdź do Zadań

  3. Następnie przejdź do Inne

  4. Kliknij dwukrotnie bundleReleaseaar

Możesz znaleźć swoje .aarpliki podyour_module/build/outputs/aar/your-release.aar

Tutaj obraz


Nigdzie nie widzę żadnej „karty Gradle”. W końcu wpisałem „Gradle” w wyszukiwarce Pomocy i otrzymałem coś w rodzaju widoku Gradle. Ale lista w środku jest zupełnie inna, znacznie krótsza niż twoja. W obszarze Zadania-> Inne nie ma pakietu Wydanie pakietu. Istnieje „createJar”, ale kiedy go klikam, pojawia się komunikat „Task 'createJar' nie został znaleziony w projekcie głównym ...” Utknąłem. I ... po co nam pliki .aar? OP poprosił o plik .jar. Czy to to samo>
Steve White

Ale pytanie brzmi, jak tego .jarnie robić.aar
Aleksey Timoshchenko

0

Znalazłem sposób, w jaki znalazłem dane wyjściowe kompilatora projektu (struktura projektu> projekt). następnie znajdź zgodny folder modułu, który chcesz zamienić na jar, skompresuj go za pomocą zip i zmień rozszerzenie pliku wyjściowego z zip na jar.


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

Jeśli uruchamiasz zadanie Gradle z AndroidStudio [Więcej]

assembleRelease 
//or
bundleReleaseAar

lub przez terminal

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

wtedy będziesz mógł znaleźć .aarw

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aarPlik (Biblioteka systemu Android) składa się z pliku .jar(Biblioteki Java) i dodatkowych zasobów systemu Android. .aarjest to plik zip z aar przedłużenie dlatego można zastąpić .aarz .ziplub run

unzip "<path_to/module_name>.aar"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.