Làm thế nào để chuyển đổi AAR sang JAR


92

Tình hình :

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

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 một tệp jar đã biên dịch và nhà phát triển của nó đã đưa cho tôi một tệp aar từ một số 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). Cấu hình Gradle là một mớ hỗn độn, nó phụ thuộc vào nhiều thư viện và Gradle đã đưa ra một số ngoại lệ.

Tôi đã cố gắng sử dụng nó trong IDEA IDE của mình, 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, phải không?

Câu hỏi :

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


1
Bạn chỉ có thể đổi tên nó trở lại .jar nhưng không cần biết thêm chi tiết về môi trường của bạn, đây có thể là điều bạn cần làm hoặc không, AAR là một thư viện Axis với các mục đích sử dụng cụ thể.
Pedantic

1
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 để câu hỏi của tôi được đăng vì nó quá đơn giản. Và tôi đoán, nó cho biết 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âu trả lời:


141

Tệp AAR bao gồm tệp JAR và một số tệp tài nguyên (về cơ bản nó là tệp zip tiêu chuẩn với 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 AAR bằng cách sử dụng giải nén zip tiêu chuẩn (đổi tên nó thành * .zip để dễ dàng hơn)
  2. Tìm tệp class.jar trong các tệp được giải nén
  3. Đổi tên nó theo ý muốn và sử dụng tệp jar đó trong dự án của bạn

53
Điều 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 jar 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 26/10/14

Sau hướng dẫn dành cho Spotify Android SDK, câu trả lời này là cách 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ủ tiện ích 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, mà là 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 thành JAR không hoạt động. Tuy nhiên, tôi cũng không đồng ý một phần vì "tài nguyên" không liên quan đến tệp tin class.jar.
carl

11
Tôi đã gặp khó khăn khi tìm cách giải nén nó trên mac, trong trường hợp những người khác cũng vậy: chỉ cần thay đổi .aar thành .zip và nhấp đúp!
Bastien Beurier

5
vậy giải pháp để tạo một jar dựa trên tài nguyên là gì?
2cupsOfTech

2
Giải pháp này chỉ giải nén tệp jar, nhưng tài nguyên không chứa trong đó. Có gì đó không ổn.
Tinker Sun

21

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

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

1) Rename it to .jar
2) Extract: jar xf filename.jar
3) Repackage: jar cf output.jar input-file(s)

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 Files \ Java \ jdk1.7.0_25 \ bin>
Nestor

1
anh bạn, bước 1 là đủ. Chỉ cần đổi tên nó thành .jar. Theo quan điểm của tôi, các bước (2) và (3) là vô ích
Dr Deo

@DrDeo Nếu tôi chỉ đổi tên nó, thì dự án nhật thực sẽ không nhận ra nó là một thư viện. Nó có bình thường không? Bất kì manh mối nào?
Tanasis

1
Nếu bạn chỉ đổi tên nó và không đóng gói lại nó bằng jar, nó sẽ không có tệp kê khai và nó sẽ không nhận ra nó là một tệp jar hợp lệ, tôi tin.
AWT

16

Như nhiều người khác đã chỉ ra, chỉ trích xuất .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 (bối cảnh của Android, quãng đường của bạn có thể thay đổi nếu bạn 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 giải nén 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 giải nén, đổi tên tệp có chứa class.jar thành 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 giải nén.
  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 đã giải nén:
    • .dự án
    • .classpath
  5. Để làm điều đó, hãy tạo một dự án giả 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 cứ thứ gì bạn gọi là tệp jar của mình ở 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 có .. và trỏ đến nội dung thư mục đã giải nén.
  8. Sau khi nhập, nhấp chuột phải vào dự án mới tạo, chọn Thuộc tính -> Android và chọn Là Thư viện .
  9. Trong dự án chính của bạn mà bạn muốn sử dụng thư viện, cũng đi tới Thuộc tính -> Android và thêm myProjectLib mới được thêm vào danh sách các phần phụ thuộc.

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

8

Đối với những người muốn làm điều đó tự động, tôi đã viết một tập lệnh bash nhỏ hai dòng thực hiện hai điều tiếp theo:

  1. Tìm kiếm tất cả các tệp * .aar và trích xuất các lớp.jar từ chúng
  2. Đổi tên các class.jar đã trích xuất để giống như aar nhưng với một 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ó!


1
Chắc chắn, bất kỳ chuyển đổi aar2jar nào sẽ không chứa tài nguyên và tệp kê khai bên trong. Chúng ta có thể nói (không chắc chắn nhưng gần với) điều đó aar=jar+res+manifest+libs. Hãy để rest=res+manifest+libs, hơn jar(aar)=aar-rest.
ddmytrenko

Đó là điều 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. bởi vì mọi thư viện hỗ trợ đều có nhiều phiên bản. chỉ giải nén xác minh mới nhất có thể tốt hơn
iptton

6

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 .aar.

Phần thưởng: nó tự động dịch ngược các lớp!

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 dưới dạng mô-đun

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

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

truy cập .jar từ .aar


1
trước tiên phải chọn dự án thay vì android trong trình quản lý dự án, sau đó các thư viện bên ngoài sẽ hiển thị
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.

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

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


Điều này có nghĩa là chúng ta có thể sử dụng tệp AAR giống như tệp JAR chỉ bằng cách đổi tên nó từ .aar thành .jar?
Soumya

@Soumya, không, bạn không thể.
ddmytrenko

2
Thực ra chủ đề của cuộc trò chuyện là sai. Chúng tôi không thể chuyển đổi AAR sang JAR hoặc ngược lại. Điều duy nhất chúng ta có thể làm là "giải nén JAR từ AAR". Và tôi đã viết thế nào để làm automaticaly này sử dụng hai dòng mã Bash ở đây: stackoverflow.com/a/29252592/746529
ddmytrenko

4

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

Việc tìm kiếm tệp class.jar bên trong tệp .aar là khá đơn giản. Tuy nhiên, cách tiếp cận đó không hoạt động nếu .aar-project xác định một số tài nguyên (ví dụ: R.layout.xyz)

  • Do đó, bác sĩ từ CommonsGuy đã giúp tôi có được một dự án thân thiện với ADT hợp lệ từ tệp .aar-file. Trong trường hợp của tôi, tôi đã chuyển đổi chế độ lấy mẫu con-scale-image-view . 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 android-maven-plugin 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ỉ cần sao chép 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 có"


1

Nếu bạn đang sử dụng Gradle cho các bản dựng của mình - có một plugin Gradle cho phép bạn thêm phụ thuộc aar vào các mô-đun java | kotlin | scala | ... của mình.

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
}

Cố gắng hiểu, liệu có thể tạo plugin 'compileOnlyAar' cho ứng dụng / lib android không? tôi biết rằng đó không phải là về thư viện của bạn, nhưng có lẽ bạn biết là có thể vì plugin android không chứa cấu hình tạo tác như 'compileOnlyAar'. Bạn có thể hiểu tại sao tôi cần chức năng này tại đây ( stackoverflow.com/questions/60998072/… )
HeyAlex
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.