Sytuacja :
Zamierzam użyć biblioteki Java i mam tylko plik AAR z repozytorium Maven, ale potrzebuję pliku JAR .
Opowieść w tle:
Próbowałem skompilować bibliotekę, ale jej struktura Gradle była niestabilna. Poprosiłem więc o skompilowany plik jar, a jego programista wręczył mi plik aar z jakiegoś repozytorium Mavena (deweloper nie mógł skompilować własnego projektu). Konfiguracja Gradle była bałaganem, zależała od wielu bibliotek, a Gradle rzucił kilka wyjątków.
Próbowałem go użyć w moim IDEA IDE, ale nie mógł tego zobaczyć. Projekt biblioteki powinien dać się skompilować do pliku jar, prawda?
Pytanie 30 :
Co powinienem zrobić, aby przekonwertować ten plik AAR do pliku JAR?
Odpowiedzi:
Plik AAR składa się z pliku JAR i niektórych plików zasobów (jest to w zasadzie standardowy plik zip z niestandardowym rozszerzeniem). Oto kroki do konwersji:
źródło
.aar to standardowe archiwum zip, takie samo jak w .jar. Po prostu zmień rozszerzenie i zakładając, że nie jest uszkodzone ani nic, powinno być w porządku.
W razie potrzeby możesz wyodrębnić go do swojego systemu plików, a następnie przepakować go jako słoik.
1) Rename it to .jar 2) Extract: jar xf filename.jar 3) Repackage: jar cf output.jar input-file(s)
źródło
Jak zauważyło wiele innych osób, samo wyodrębnienie pliku .jar z pliku .aar nie powoduje jego całkowitego usunięcia, ponieważ może brakować zasobów.
Oto kroki, które zadziałały dla mnie (w kontekście Androida, Twój przebieg może się różnić, jeśli masz inne cele):
źródło
Dla tych, którzy chcą to robić automatycznie, napisałem mały dwuwierszowy skrypt basha, który robi dwie następne rzeczy:
Zmienia nazwy wyodrębnionych klas.jar tak, aby przypominały aar, ale z nowym rozszerzeniem
find . -name '*.aar' -exec sh -c 'unzip -d `dirname {}` {} classes.jar' \; find . -name '*.aar' -exec sh -c 'mv `dirname {}`/classes.jar `echo {} | sed s/aar/jar/g`' \;
Otóż to!
źródło
aar=jar+res+manifest+libs
. Pozwólrest=res+manifest+libs
, niżjar(aar)=aar-rest
.Android Studio (wersja: 1.3.2) umożliwia bezproblemowy dostęp do .jar wewnątrz .aar.
Bonus: automatycznie dekompiluje klasy!
Po prostu wykonaj następujące kroki:
File > New > New Module > Import .JAR/.AAR Package
aby zaimportować cię .aar jako modułDodaj nowo utworzony moduł jako zależność do głównego projektu (nie jesteś pewien, czy to konieczne)
Kliknij prawym przyciskiem myszy „classes.jar”, jak pokazano na poniższym zrzucie, i kliknij „Pokaż w eksploratorze”. Oto twój .jar.
źródło
The 'aar' bundle is the binary distribution of an Android Library Project. .aar file consists a JAR file and some resource files. You can convert it as .jar file using this steps 1) Copy the .aar file in a separate folder and Rename the .aar file to .zip file using any winrar or zip Extractor software. 2) Now you will get a .zip file. Right click on the .zip file and select "Extract files". Will get a folder which contains "classes.jar, resource, manifest, R.java, proguard(optional), libs(optional), assets(optional)". 3) Rename the classes.jar file as yourjarfilename.jar and use this in your project.
źródło
Projekty .aar oparte na zasobach
Znalezienie pliku classes.jar w pliku .aar jest dość trywialne. Jednak to podejście nie działa, jeśli .aar-project zdefiniował jakieś zasoby (przykład: R.layout.xyz)
Dlatego Deaar z CommonsGuy pomógł mi wyciągnąć z pliku .aar ważny projekt przyjazny dla ADT. W moim przypadku przekonwertowałem widok obrazu w skali podpróbkowania . Konfiguracja Rubiego na moim komputerze zajęła mi około godziny.
Innym podejściem jest użycie android-maven-plugin dla Eclipse / ADT, jak pisze CommonsGuy na swoim blogu .
Jeszcze innym podejściem może być sklonowanie całego żądanego projektu jako źródła z gita i zaimportowanie go jako „Istniejący projekt Android”
źródło
Jeśli używasz Gradle do swoich kompilacji - dostępna jest wtyczka Gradle, która pozwala na dodanie zależności aar do modułów java | kotlin | scala | ....
https://github.com/stepango/aar2jar
plugins { id 'java' id 'com.stepango.aar2jar' version “0.6” // <- this one } dependencies { compileOnlyAar "com.android.support:support-annotations:28.0.0" // <- Use any AAR dependencies }
źródło