Câu hỏi Làm thế nào để chuyển đổi AAR sang JAR


Tình hình: 

Tôi định sử dụng một thư viện Java và tôi chỉ có một AAR tệp từ kho lưu trữ Maven nhưng tôi cần JAR tập tin.

Câu chuyện nền: 

Tôi đã cố gắng biên dịch một thư viện, nhưng cấu trúc Gradle của nó không ổn định. Vì vậy, tôi đã yêu cầu tệp jar được biên dịch của nó và nhà phát triển của nó đã trao một tệp aar từ một kho lưu trữ Maven (nhà phát triển không thể biên dịch dự án của riêng mình). Hệ thống gradle là một mớ hỗn độn, nó phụ thuộc vào nhiều thư viện và Gradle đã ném một số ngoại lệ.

Tôi đã cố gắng sử dụng nó trong IDEA của tôi, nhưng nó không thể nhìn thấy nó. Một dự án thư viện có thể được biên dịch thành một tệp jar, đúng không?

Câu hỏi:

Tôi nên làm gì để chuyển đổi tệp AAR đó thành tệp JAR? 


76
2018-01-28 21:36


gốc


Bạn chỉ có thể đổi tên nó thành .jar nhưng không biết thêm chi tiết về môi trường của bạn, điều này có thể hoặc không phải là những gì bạn cần làm, một AAR là một thư viện Axis với các cách sử dụng cụ thể. - Pedantic
Bạn sẽ cười, nhưng tôi phải thêm một số từ không thường xuyên bởi vì SO sẽ không để cho câu hỏi của tôi được đăng vì nó đơn giản như vậy. Và tôi đoán, nó nói với mọi thứ rằng nhà phát triển của thư viện không thể biên dịch dự án của riêng mình bằng Gradle ... - Nestor


Các câu trả lời:


Các AAR tập tin bao gồm một JAR tệp và một số tệp tài nguyên (về cơ bản là tệp zip chuẩn có phần mở rộng tệp tùy chỉnh). Dưới đây là các bước để chuyển đổi:

  1. Giải nén tập tin AAR bằng cách sử dụng giải nén zip tiêu chuẩn (đổi tên nó thành * .zip làm cho nó dễ dàng hơn)
  2. Tìm classes.jar tập tin trong các tập tin được trích xuất
  3. Đổi tên nó như bạn thích và sử dụng tập tin jar đó trong dự án của bạn

112
2018-01-31 16:35



Thú vị là câu trả lời này được chấp nhận, bởi vì chỉ cần đổi tên một cái lọ và sao chép nó vào thư mục libs của dự án của bạn sẽ không hoạt động do thực tế là các tệp tài nguyên bị thiếu trong jar. - ChuongPham
Theo hướng dẫn cho SDK Android Spotify, câu trả lời này là biện pháp khắc phục. Điều này là do tôi phát triển các dự án trong Netbeans, có vẻ như không tuân thủ phần mở rộng AAR. Nhận xét của ChuongPham dường như không liên quan đến câu trả lời này, nhưng với câu trả lời của AWT, và sau đó tôi đồng ý một phần với ChuongPham, tức là đổi tên đơn giản từ AAR sang JAR không hoạt động. Tuy nhiên, tôi cũng phần nào không đồng ý vì "tài nguyên" không liên quan đến tệp classes.jar. - carl
Tôi đã có một thời gian khó khăn tìm ra cách để giải nén nó trên mac, trong trường hợp những người khác nữa: chỉ cần thay đổi .aar thành .zip và nhấp đúp! - Bastien Beurier
Vậy giải pháp tạo jar dựa trên tài nguyên là gì? - 2cupsOfTech
Giải pháp này chỉ trích xuất tệp jar, nhưng các tài nguyên không chứa trong nó. Có gì đó không ổn. - Tinker Sun


.aar là một kho lưu trữ zip tiêu chuẩn, cùng một tệp được sử dụng trong .jar. Chỉ cần thay đổi phần mở rộng và, giả sử nó không bị hỏng hoặc bất cứ thứ gì, nó sẽ ổn thôi.

Nếu bạn cần, bạn có thể giải nén nó vào hệ thống tập tin của bạn và sau đó đóng gói lại nó như một cái bình.

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



Khi tôi chạy jar xf, tôi không nhận được gì: C: \ Program Files \ Java \ jdk1.7.0_25 \ bin> jar xf c: \ dev \ 1 \ android-maps-utils- 0.2.1.jar C: \ Program Tệp \ Java \ jdk1.7.0_25 \ bin> - Nestor
dude, bước 1 là đủ. Chỉ cần đổi tên nó thành .jar. Trong các bước xem của tôi (2) và (3) là vô ích - Dr Deo
@DrDeo Nếu tôi chỉ đổi tên nó, dự án nhật thực không nhận ra nó như là một thư viện. Nó có bình thường không? Bất kì manh mối nào? - Tanasis
Nếu bạn chỉ cần đổi tên nó và không đóng gói lại nó với jar, nó sẽ không có một biểu hiện và nó sẽ không nhận ra nó như một tệp jar hợp lệ, tôi tin. - AWT


Như nhiều người khác đã chỉ ra, chỉ cần giải nén .jar từ tệp .aar không hoàn toàn cắt nó vì tài nguyên có thể bị thiếu.

Dưới đây là các bước phù hợp với tôi (ngữ cảnh của Android, số dặm của bạn có thể thay đổi nếu bạn có các mục đích khác):

  1. Đổi tên tệp .aar thành .zip và giải nén.
  2. Thư mục được trích xuất là một dự án ADT mà bạn có thể nhập vào Eclipse với một số sửa đổi nhỏ (xem bên dưới)!
  3. Trong thư mục được trích xuất, đổi tên tệp đã chứa classes.jar với bất kỳ thứ gì bạn thích (trong ví dụ này là myProjectLib.jar) và di chuyển nó vào thư mục lib trong thư mục được trích xuất.
  4. Bây giờ để Eclipse chấp nhận nó, bạn cần phải đặt hai tệp vào thư mục gốc được trích xuất:
    • .dự án
    • .classpath
  5. Để làm điều đó, hãy tạo một dự án giả lập Android mới trong Eclipse và sao chép qua các tệp hoặc sao chép từ một dự án Android hiện có.
  6. Mở tệp .project và tìm thẻ tên XML và thay thế nội dung của nó bằng myProjectLib (hoặc bất kỳ thứ gì bạn gọi là tệp jar của bạn ở trên) và lưu.
  7. Bây giờ trong Eclipse bạn có thể Tệp -> Mới -> Dự án -> Dự án Android từ nguồn hiện tại .. và trỏ đến nội dung thư mục được trích xuất.
  8. Sau khi nhấp chuột phải vào dự án mới được tạo, chọn Thuộc tính -> Android, và kiểm tra Thư viện.
  9. Trong dự án chính của bạn mà bạn muốn sử dụng thư viện, hãy truy cập Thuộc tính -> Android và thêm myProjectLib mới được thêm vào danh sách các phụ thuộc.

14
2018-06-10 11:35



Điều này đã giúp tôi. Nhưng để có được nếu làm việc đầy đủ, tôi cần phải tạo một thư mục rỗng "src" giữa bước 6 và 7. - Bernhard Krenz


Đối với những người muốn tự động làm điều đó, tôi đã viết một kịch bản bash hai dòng nhỏ, thực hiện hai điều sau:

  1. Tìm tất cả các tệp * .aar và trích xuất classes.jar từ chúng
  2. Đổi tên các tệp được trích xuất classes.jar thành giống như aar nhưng với phần mở rộng mới

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

Đó là nó!


7
2018-03-25 10:03



Điều này sẽ không hoạt động đối với AAR sử dụng tài nguyên. - CommonsWare
Chắc chắn, bất kỳ chuyển đổi aar2jar sẽ không chứa tài nguyên và biểu hiện bên trong. Chúng ta có thể nói (không chắc chắn nhưng gần với) aar=jar+res+manifest+libs. Để cho rest=res+manifest+libs, hơn jar(aar)=aar-rest. - ddmytrenko
Đó là những gì tôi thực sự muốn! Cảm ơn rất nhiều. Nhưng nó thực sự làm tăng việc sử dụng đĩa. vì mọi thư viện hỗ trợ đều có nhiều phiên bản. chỉ giải nén các verion mới nhất có thể tốt hơn - 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.

Lưu ý: Nếu bạn muốn chỉ nhận tệp .jar từ tệp .aar của bạn, hãy sử dụng   trên đường.       Giả sử Nếu bạn muốn bao gồm tệp manifest.xml và tài nguyên có tệp .jar của bạn       bạn chỉ cần nhấp chuột phải vào tệp .aar của bạn và lưu nó dưới dạng tệp .jar trực tiếp thay vì       lưu nó dưới dạng .zip. Để xem tệp .jar mà bạn đã trích xuất, hãy tải xuống JD-GUI (Trình giải mã Java). Sau đó kéo và thả tệp .jar của bạn vào JD_GUI này, bạn có thể xem tệp .class ở định dạng có thể đọc được như tệp .java.

enter image description here enter image description here


5
2017-08-14 10:08



Điều này có nghĩa là chúng tôi có thể sử dụng tệp AAR như tệp JAR chỉ bằng cách đổi tên tệp từ .aar thành .jar? - Soumya
@Soumya, không, bạn không thể. - ddmytrenko
Trên thực tế, chủ đề của cuộc hội thoại là sai. Chúng tôi không thể chuyển đổi AAR thành JAR hoặc ngược lại. Điều duy nhất chúng ta có thể làm là "trích xuất JAR từ AAR". Và tôi đã viết cách làm automaticaly này bằng cách sử dụng hai dòng mã Bash ở đây: stackoverflow.com/a/29252592/746529 - ddmytrenko


Các dự án dựa trên tài nguyên .aar

Tìm tệp classes.jar bên trong tệp .aar là khá tầm thường. Tuy nhiên, cách tiếp cận đó không hoạt động, nếu dự án .aar định nghĩa một số tài nguyên (ví dụ: R.layout.xyz)

  • vì thế deaar từ CommonsGuy đã giúp tôi có được hợp lệ Dự án thân thiện với ADT trong tệp .aar. Trong trường hợp của tôi, tôi đã chuyển đổi chế độ xem mẫu con. Tôi mất khoảng một giờ để thiết lập ruby ​​trên PC của mình.

  • Một cách tiếp cận khác là sử dụng plugin android-maven cho Eclipse / ADT như CommonsGuy viết trong blog của mình.

  • Tuy nhiên, một cách tiếp cận khác có thể là, chỉ nhân bản toàn bộ dự án mong muốn dưới dạng nguồn từ git và nhập nó dưới dạng "Dự án Android hiện tại"


4
2018-01-06 15:29





Android Studio (phiên bản: 1.3.2) cho phép bạn truy cập liền mạch .jar bên trong một .aar.

Tiền thưởng: nó tự động giải mã các lớp học!

Chỉ cần làm theo các bước sau:

  1. File > New > New Module > Import .JAR/.AAR Package để nhập bạn .aar như một mô-đun

  2. Thêm mô-đun mới được tạo làm phụ thuộc vào dự án chính của bạn (không chắc chắn nếu cần)

  3. Nhấp chuột phải vào "classes.jar" như được hiển thị trong ảnh chụp bên dưới và nhấp vào "Hiển thị trong trình khám phá". Đây là của bạn .jar.

access .jar from .aar


3
2017-09-23 14:20



trước tiên phải chọn dự án thay vì android trong trình quản lý dự án thì thư viện bên ngoài sẽ hiển thị - El Programmer