Bagaimana cara mengubah AAR ke JAR

94

Situasi :

Saya bermaksud menggunakan perpustakaan Java dan saya hanya memiliki file AAR dari repositori Maven tetapi saya memerlukan file JAR .

Cerita latar belakang:

Saya mencoba mengompilasi perpustakaan, tetapi struktur Gradle-nya tidak stabil. Jadi saya meminta file jar yang telah dikompilasi, dan pengembangnya memberikan saya file aar dari beberapa repositori Maven (pengembang tidak dapat mengkompilasi proyeknya sendiri). Konfigurasi Gradle berantakan, itu bergantung pada banyak pustaka dan Gradle telah membuat beberapa pengecualian.

Saya mencoba menggunakannya di IDEA IDE saya, tetapi tidak dapat melihatnya. Sebuah proyek perpustakaan harus dapat dikompilasi menjadi file jar, bukan?

Pertanyaan :

Apa yang harus saya lakukan untuk mengonversi file AAR itu menjadi file JAR?

Nestor
sumber
1
Anda dapat mengubah namanya kembali menjadi .jar tetapi tanpa mengetahui detail lebih lanjut tentang lingkungan Anda, ini mungkin atau mungkin bukan yang perlu Anda lakukan, AAR adalah pustaka Axis dengan penggunaan tertentu.
Pedantic
1
Anda akan tertawa, tetapi saya harus menambahkan beberapa kata tidak biasa karena SO tidak akan membiarkan pertanyaan saya diposting karena kata-katanya sangat sederhana. Dan saya rasa, ini memberi tahu semua yang pengembang perpustakaan tidak dapat mengkompilasi proyeknya sendiri menggunakan Gradle ...
Nestor

Jawaban:

143

File AAR terdiri dari file JAR dan beberapa file sumber daya (pada dasarnya ini adalah file zip standar dengan ekstensi file khusus). Berikut langkah-langkah untuk mengonversi:

  1. Ekstrak file AAR menggunakan ekstrak zip standar (ganti namanya menjadi * .zip agar lebih mudah)
  2. Temukan file class.jar di file yang diekstrak
  3. Ubah namanya sesuka Anda dan gunakan file jar itu dalam proyek Anda
Nestor
sumber
53
Menarik bahwa jawaban ini diterima, karena hanya mengganti nama jar dan menyalinnya ke direktori libs proyek Anda tidak akan berfungsi karena fakta bahwa file sumber daya tidak ada di jar.
ChuongPham
Mengikuti tutorial untuk Spotify Android SDK, jawaban ini adalah solusinya. Ini karena saya mengembangkan proyek di Netbeans, yang tampaknya tidak sesuai dengan ekstensi AAR. Ucapan ChuongPham tampaknya tidak terkait dengan jawaban ini, tetapi dengan jawaban AWT, dan kemudian saya setuju sebagian dengan ChuongPham, yaitu penggantian nama sederhana dari AAR menjadi JAR tidak berhasil. Namun, saya juga sebagian tidak setuju karena "resource" tidak relevan untuk file class.jar.
carl
11
Saya mengalami kesulitan mencari tahu cara mengekstraknya di mac, jika orang lain juga: cukup ubah .aar menjadi .zip dan klik dua kali!
Bastien Beurier
5
jadi apa solusi untuk membuat jar berbasis sumber daya?
2cupsOfTech
2
Solusi ini hanya mengekstrak file jar, tetapi sumber daya tidak mengandung di dalamnya. Ada yang salah.
Tinker Sun
21

.aar adalah arsip zip standar, yang sama digunakan dalam .jar. Ubah saja ekstensinya dan, dengan asumsi itu tidak rusak atau apa pun, itu akan baik-baik saja.

Jika perlu, Anda dapat mengekstraknya ke sistem file Anda dan mengemasnya kembali sebagai jar.

1) Rename it to .jar
2) Extract: jar xf filename.jar
3) Repackage: jar cf output.jar input-file(s)
AWT
sumber
Ketika saya menjalankan jar xf, saya tidak mendapatkan apa-apa: C: \ Program Files \ Java \ jdk1.7.0_25 \ bin> jar xf c: \ dev \ 1 \ android-maps-utils- 0.2.1.jar C: \ Program Files \ Java \ jdk1.7.0_25 \ bin>
Nestor
1
Bung, langkah 1 sudah cukup. Ubah saja namanya menjadi .jar. Dalam pandangan saya, langkah (2) dan (3) tidak berguna
Dr Deo
@DrDeo Jika saya hanya mengganti namanya, proyek gerhana tidak mengenalinya sebagai perpustakaan. Apakah ini normal? Ada petunjuk?
Tanasis
1
Jika Anda hanya mengganti namanya dan tidak mengemasnya kembali dengan jar, itu tidak akan memiliki manifes dan tidak akan mengenalinya sebagai file jar yang valid, saya yakin.
AWT
16

Seperti yang ditunjukkan banyak orang lain, hanya mengekstrak .jar dari file .aar tidak cukup memotongnya karena sumber daya mungkin hilang.

Berikut adalah langkah-langkah yang berhasil untuk saya (konteks Android, jarak tempuh Anda mungkin berbeda jika Anda memiliki tujuan lain):

  1. Ubah nama file .aar menjadi .zip dan ekstrak.
  2. Folder yang diekstrak adalah proyek ADT yang dapat Anda impor di Eclipse dengan beberapa modifikasi kecil (lihat di bawah)!
  3. Di folder yang diekstrak, ganti nama file yang ada di class.jar menjadi apa pun yang Anda suka (dalam contoh ini myProjectLib.jar) dan pindahkan ke folder lib di dalam folder yang diekstrak.
  4. Sekarang agar Eclipse menerimanya, Anda perlu memasukkan dua file ke root folder yang diekstrak:
    • .proyek
    • .classpath
  5. Untuk melakukan itu, buat proyek dummy Android baru di Eclipse dan salin file, atau salin dari proyek Android yang ada.
  6. Buka file .project dan cari tag nama XML dan ganti isinya dengan myProjectLib (atau apa pun yang Anda sebut file jar Anda di atas) dan simpan.
  7. Sekarang di Eclipse Anda dapat File -> New -> Project -> Android Project dari sumber yang ada .. dan arahkan ke konten folder yang diekstrak.
  8. Setelah impor klik kanan pada proyek yang baru dibuat, pilih Properties -> Android , dan centang Is Library .
  9. Di proyek utama yang ingin Anda gunakan pustaka, buka juga Properties -> Android dan tambahkan myProjectLib yang baru ditambahkan ke daftar dependensi.
rsp1984
sumber
Ini membantu saya. Tetapi untuk membuatnya berfungsi sepenuhnya, saya perlu membuat folder "src" kosong antara langkah 6 dan 7.
Bernhard Krenz
8

Bagi mereka, yang ingin melakukannya secara otomatis, saya telah menulis skrip bash dua baris kecil yang melakukan dua hal berikut:

  1. Mencari semua file * .aar dan mengekstrak class.jar dari file tersebut
  2. Ubah nama class.jar yang diekstrak menjadi seperti aar tetapi dengan ekstensi baru

    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`' \;
    

Itu dia!

ddmytrenko.dll
sumber
1
Tentu, konversi aar2jar apa pun tidak akan berisi sumber daya dan manifes di dalamnya. Kita bisa mengatakan (tidak pasti tapi mendekati) itu aar=jar+res+manifest+libs. Biarkan rest=res+manifest+libs, dari jar(aar)=aar-rest.
ddmytrenko
Itulah yang saya inginkan! Terima kasih banyak. Tapi itu benar-benar meningkatkan penggunaan disk. karena setiap pustaka dukungan memiliki banyak versi. hanya unzip verion terbaru mungkin lebih baik
iptton
6

Android Studio (versi: 1.3.2) memungkinkan Anda mengakses .jar di dalam .aar.

Bonus: secara otomatis mendekompilasi kelas!

Cukup ikuti langkah-langkah berikut:

  1. File > New > New Module > Import .JAR/.AAR Package untuk mengimpor Anda .aar sebagai modul

  2. Tambahkan modul yang baru dibuat sebagai dependensi ke proyek utama Anda (tidak yakin jika diperlukan)

  3. Klik kanan pada "class.jar" seperti yang ditunjukkan pada gambar di bawah ini, dan klik "Show in explorer". Ini .jar Anda.

akses .jar dari .aar

Sébastien
sumber
1
pertama harus memilih proyek daripada android di manajer proyek kemudian perpustakaan eksternal akan menunjukkan
Samad
5
 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.

Catatan: Jika Anda hanya ingin mendapatkan file .jar dari file .aar Anda gunakan cara di atas. Misalkan Jika Anda ingin menyertakan manifest.xml dan sumber daya dengan file .jar Anda berarti Anda dapat mengklik kanan pada file .aar Anda dan menyimpannya sebagai file .jar secara langsung daripada menyimpannya sebagai .zip. Untuk melihat file .jar yang telah Anda ekstrak, download JD-GUI (Java Decompiler) . Kemudian drag dan drop file .jar Anda ke JD_GUI ini, Anda bisa melihat file .class dalam format yang dapat dibaca seperti file .java.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

anand krish
sumber
Apakah ini berarti kita dapat menggunakan file AAR seperti file JAR hanya dengan mengganti namanya dari .aar menjadi .jar?
Soumya
@ Soumya, tidak, Anda tidak bisa.
ddmytrenko
2
Sebenarnya topik pembicaraannya salah. Kami tidak dapat mengubah AAR ke JAR atau sebaliknya. Satu-satunya hal yang dapat kita lakukan adalah "mengekstrak JAR dari AAR". Dan saya telah menulis cara melakukan ini secara otomatis menggunakan dua baris kode Bash di sini: stackoverflow.com/a/29252592/746529
ddmytrenko
5

Proyek .aar berbasis sumber daya

Menemukan file class.jar di dalam file .aar cukup sepele. Namun, pendekatan itu tidak berhasil, jika proyek .aar menentukan beberapa sumber daya (contoh: R.layout.xyz)

  • Oleh karena itu deaar dari CommonsGuy membantu saya mendapatkan proyek ramah-ADT yang valid dari file .aar. Dalam kasus saya, saya mengonversi tampilan-skala-gambar-subsampling . Saya membutuhkan waktu sekitar satu jam untuk memasang ruby ​​di PC saya.

  • Pendekatan lain adalah menggunakan android-maven-plugin untuk Eclipse / ADT seperti yang ditulis CommonsGuy di blognya .

  • Namun pendekatan lain bisa jadi, cukup kloning seluruh proyek yang diinginkan sebagai sumber dari git dan impor sebagai "Proyek Android yang ada"

Satu dunia
sumber
1

Jika Anda menggunakan Gradle untuk build Anda - ada plugin Gradle yang memungkinkan Anda menambahkan dependensi aar ke modul java | kotlin | scala | ... Anda.

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
}
Stepango
sumber
Mencoba memahami, mungkinkah membuat 'compileOnlyAar' untuk aplikasi android / plugin lib? Saya tahu ini bukan tentang perpustakaan Anda, tetapi mungkin Anda tahu apakah itu mungkin karena, plugin android tidak berisi konfigurasi artefak seperti 'compileOnlyAar'. Anda dapat memahami mengapa saya membutuhkan fungsionalitas ini di sini ( stackoverflow.com/questions/60998072/… )
HeyAlex
kutipan Anda rusak, dan saya tidak dapat mengedit karena antrian edit penuh
Nailuj29