Pytanie Jak przekonwertować AAR na JAR


Sytuacja: 

Zamierzam użyć biblioteki Java i mam tylko AAR plik z repozytorium Maven, ale potrzebuję SŁOIK plik.

Opowieść w tle: 

Próbowałem skompilować bibliotekę, ale jej struktura Gradle'a jest niestabilna. Poprosiłem więc o skompilowany plik jar, a jego programista przekazał plik aar z jakiegoś repozytorium Maven (deweloper nie może skompilować własnego projektu). System gradle był bałaganem, zależał od wielu bibliotek i Gradle rzucił jakiś wyjątek.

Próbowałem go użyć w moim IDEA, ale go nie widzę. Projekt biblioteczny powinien móc zostać skompilowany do pliku JAR, prawda?

Pytanie:

Co mam zrobić, aby przekonwertować plik AAR na plik JAR? 


76
2018-01-28 21:36


pochodzenie


Możesz po prostu zmienić jego nazwę z powrotem na .jar, ale nie znając więcej szczegółów na temat twojego środowiska, może to być lub nie być to, co musisz zrobić, AAR jest biblioteką Axis o określonych zastosowaniach. - Pedantic
Będziecie się śmiać, ale musiałem dodać jakieś nieregularne słowo, ponieważ SO nie pozwoliłoby na opublikowanie mojego pytania, ponieważ było to tak proste. I wydaje mi się, że mówi wszystko, że programista biblioteki nie może skompilować własnego projektu za pomocą Gradle ... - Nestor


Odpowiedzi:


The AAR plik składa się z SŁOIK plik i niektóre pliki zasobów (jest to w zasadzie standardowy plik zip z niestandardowym rozszerzeniem pliku). Oto kroki do przekonwertowania:

  1. Wyodrębnij plik AAR przy użyciu standardowego ekstraktu zip (zmień nazwę na *.zamek błyskawiczny uczynić coś prostszym)
  2. Znaleźć classes.jar plik w wyodrębnionych plikach
  3. Zmień nazwę tak, jak lubisz i użyj tego pliku jar w swoim projekcie

112
2018-01-31 16:35



Interesujące, że ta odpowiedź jest akceptowana, ponieważ zwykła zmiana nazwy słoika i skopiowanie go do katalogu libs twojego projektu nie będzie działać z powodu braku plików zasobów w słoiku. - ChuongPham
Po tutorialu do Spotify Android SDK ta odpowiedź była lekarstwem. Wynika to z tego, że rozwijam projekty w Netbeans, co wydaje się być niezgodne z rozszerzeniem AAR. Uwaga ChuongPhama wydaje się być powiązana nie z tą odpowiedzią, ale z odpowiedzią AWT, a następnie częściowo zgadzam się z ChuongPhamem, tj. Zwykła zmiana nazwy z AAR na JAR nie działa. Jednak częściowo się nie zgadzam, ponieważ "zasoby" nie są istotne dla pliku classes.jar. - carl
Trudno mi było dowiedzieć się, jak go wydobyć na Macu, na wypadek gdyby inni też: po prostu zmiencie .aar na .zip i kliknij dwukrotnie! - Bastien Beurier
więc jakie jest rozwiązanie do tworzenia zasobu opartego na zasobach? - 2cupsOfTech
To rozwiązanie wyodrębnia tylko plik JAR, ale zasoby nie zawierają w nim pliku. Coś byłoby nie tak. - Tinker Sun


.aar jest standardowym archiwum zip, tym samym używanym w .jar. Po prostu zmień rozszerzenie i zakładając, że nie jest ono uszkodzone lub cokolwiek, powinno być dobrze.

Jeśli potrzebujesz, 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)

17
2018-01-28 21:46



Gdy uruchomię jar xf, otrzymuję nic: C: \ Program Files \ Java \ jdk1.7.0_25 \ bin> jar xf c: \ dev \ 1 \ android-maps-utils- 0.2.1.jar C: \ Program Pliki \ Java \ jdk1.7.0_25 \ bin> - Nestor
koleś, krok 1 wystarczy. Zmień nazwę na .jar. Moim zdaniem kroki (2) i (3) są bezużyteczne - Dr Deo
@DrDeo Jeśli zmieniam nazwę, projekt Eclipse nie rozpoznaje go jako biblioteki. Jest to normalne? Jakieś wskazówki? - Tanasis
Jeśli po prostu zmienisz nazwę i nie przepakujesz jej za pomocą słoika, nie będzie to miało manifestu i nie rozpozna go jako prawidłowego pliku jar. - AWT


Jak zauważyło wiele osób, samo rozpakowanie pliku .jar z pliku .aar nie całkiem go zmniejsza, ponieważ może brakować zasobów.

Oto kroki, które mi pomogły (kontekst Androida, Twój przebieg może się różnić, jeśli masz inne cele):

  1. Zmień nazwę pliku .aar na .zip i wypakuj.
  2. Wyodrębniony folder jest projektem ADT, który można zaimportować w środowisku Eclipse z niewielkimi modyfikacjami (patrz poniżej)!
  3. W wyodrębnionym folderze zmień nazwę zawartego pliku classes.jar do tego, co lubisz (w tym przykładzie myProjectLib.jar) i przenieść go do folderu lib w wyodrębnionym folderze.
  4. Aby Eclipse ją zaakceptował, musisz umieścić dwa pliki w wyodrębnionym folderze głównym:
    • .projekt
    • .classpath
  5. Aby to zrobić, utwórz nowy projekt Dummy Android w Eclipse i skopiuj pliki lub skopiuj go z istniejącego projektu Android.
  6. Otwórz plik .project i poszukaj znacznika nazwy XML i zamień jego zawartość na myProjectLib (lub cokolwiek nazwałeś twój plik jar powyżej) i zapisz.
  7. Teraz w Eclipse możesz Plik -> Nowy -> Projekt -> Android Project z istniejącego źródła .. i wskaż zawartość wyodrębnionego folderu.
  8. Po kliknięciu prawym przyciskiem myszy nowo utworzonego projektu wybierz Właściwości -> Android, i zaznacz Jest biblioteką.
  9. W głównym projekcie, do którego chcesz użyć biblioteki, przejdź również do Właściwości -> Android i dodaj nowo dodany myProjectLib do listy zależności.

14
2018-06-10 11:35



To mi pomogło. Ale aby uzyskać, jeśli w pełni działa, musiałem utworzyć pusty folder "src" między krokiem 6 i 7. - Bernhard Krenz


Dla tych, którzy chcą zrobić to automatycznie, napisałem mały dwuliniowy skrypt bash, który wykonuje dwie kolejne rzeczy:

  1. Wyszukuje wszystkie pliki * .aar i wyodrębnia z nich plik classes.jar
  2. Renames wyodrębnił plik classes.jar, aby był podobny do znaku 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`' \;
    

To jest to!


7
2018-03-25 10:03



To nie zadziała w przypadku AAR-ów korzystających z zasobów. - CommonsWare
Oczywiście, każda konwersja aar2jar nie będzie zawierała zasobów i zamanifestowała się wewnątrz. Możemy powiedzieć (ale zdecydowanie nie tak) aar=jar+res+manifest+libs. Pozwolić rest=res+manifest+libs, niż jar(aar)=aar-rest. - ddmytrenko
Tego właśnie chcę! Wielkie dzięki. Ale to naprawdę zwiększa wykorzystanie dysku. ponieważ każda biblioteka wsparcia ma wiele wersji. tylko rozpakuj najnowszą wersję może być lepiej - iptton


 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.

Uwaga: Jeśli chcesz uzyskać tylko plik .jar z pliku .aar, użyj   powyżej drogi.       Załóżmy, że chcesz dołączyć plik manifest.xml i zasoby do pliku .jar       możesz po prostu kliknąć plik .aar prawym przyciskiem myszy i zapisać go jako plik .jar bezpośrednio zamiast       zapisując go jako .zip. Aby wyświetlić wyodrębniony plik .jar, pobierz JD-GUI (Java Decompiler). Następnie przeciągnij i upuść plik .jar do tego JD_GUI, możesz zobaczyć plik .class w czytelnych formatach, takich jak plik .java.

enter image description here enter image description here


5
2017-08-14 10:08



Czy to oznacza, że ​​możemy użyć pliku AAR, tak jak pliku JAR, po prostu zmieniając jego nazwę z .aar na .jar? - Soumya
@Sammya, nie, nie możesz. - ddmytrenko
W rzeczywistości temat rozmowy jest błędny. Nie możemy przekonwertować AAR na JAR i odwrotnie. Jedyne, co możemy zrobić, to "wyodrębnić JAR z AAR". Napisałem jak to zrobić automatycznie używając dwóch linii kodu Bash tutaj: stackoverflow.com/a/29252592/746529 - ddmytrenko


Oparte na zasobach .aar-projects

Znalezienie pliku classes.jar w pliku .aar jest dość trywialne. Jednak takie podejście nie działa, jeśli projekt .aar zdefiniował pewne zasoby (przykład: R.layout.xyz)

  • W związku z tym deaar z CommonsGuy pomógł mi uzyskać ważne Projekt przyjazny dla ADT z pliku .aar. W moim przypadku nawróciłem się podpróbkowanie w skali-obraz-widok. Zajęło mi to około godziny, aby ustawić ruby ​​na moim komputerze.

  • Innym podejściem jest użycie Androida-maven-plugin dla Eclipse / ADT tak jak CommonsGuy pisze na swoim blogu.

  • Jeszcze inne podejście może polegać na klonowaniu całego pożądanego projektu jako źródło z git i importuj jako "istniejący projekt Androida"


4
2018-01-06 15:29





Android Studio (wersja: 1.3.2) umożliwia bezproblemowy dostęp do pliku .jar wewnątrz pliku .aar.

Bonus: automatycznie dekompiluje klasy!

Po prostu wykonaj następujące kroki:

  1. File > New > New Module > Import .JAR/.AAR Package zaimportować .aar jako moduł

  2. Dodaj nowo utworzony moduł jako zależność do głównego projektu (w razie potrzeby nie jest to pewne)

  3. Kliknij prawym przyciskiem myszy "classes.jar", jak pokazano poniżej, i kliknij "Pokaż w eksploratorze". Oto Twój .jar.

access .jar from .aar


3
2017-09-23 14:20



najpierw musi wybrać projekt zamiast androida w menedżerze projektu, pokaże się biblioteka zewnętrzna - El Programmer