[java] AAR에서 JAR로 변환하는 방법

상황 :

Java 라이브러리를 사용하려고 하고 Maven 저장소 의 AAR 파일 만 있지만 JAR 파일 이 필요 합니다.

배경 이야기 :

라이브러리를 컴파일하려고했지만 Gradle 구조가 불안정했습니다. 그래서 컴파일 된 jar 파일을 요청했고 그 개발자는 일부 Maven 저장소에서 aar 파일을 건네주었습니다 (개발자는 자신의 프로젝트를 컴파일 할 수 없었습니다). Gradle 구성은 엉망이었고 여러 라이브러리에 의존했으며 Gradle은 몇 가지 예외를 던졌습니다.

내 IDEA IDE에서 사용하려고했지만 보이지 않았습니다. 라이브러리 프로젝트는 jar 파일로 컴파일 할 수 있어야합니다. 그렇죠?

질문 :

AAR 파일을 JAR 파일로 변환하려면 어떻게해야합니까?



답변

AAR의 파일은 구성 의 JAR 파일 및 일부 리소스 파일 (이것은 기본적으로 사용자 정의 파일 확장명을 가진 표준 zip 파일)입니다. 변환하는 단계는 다음과 같습니다.

  1. 표준 zip 추출을 사용하여 AAR 파일의 압축을 풉니 다 ( 쉽도록 * .zip 으로 이름 변경 ).
  2. 추출 된 파일에서 classes.jar 파일을 찾으십시오.
  3. 원하는대로 이름을 바꾸고 프로젝트에서 해당 jar 파일을 사용하십시오.


답변

.aar는 .jar에서 사용되는 것과 동일한 표준 zip 아카이브입니다. 확장자를 변경하고 손상되지 않았다고 가정하면 괜찮습니다.

필요한 경우 파일 시스템에 압축을 푼 다음 jar로 다시 패키징 할 수 있습니다.

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


답변

다른 많은 사람들이 지적했듯이 .aar 파일에서 .jar를 추출하는 것만으로는 리소스가 누락 될 수 있으므로 잘리지 않습니다.

저에게 도움이 된 단계는 다음과 같습니다 (Android 컨텍스트, 다른 목적이있는 경우 마일리지가 다를 수 있음).

  1. .aar 파일의 이름을 .zip으로 바꾸고 압축을 풉니 다.
  2. 추출 된 폴더는 약간의 수정을 통해 Eclipse에서 가져올 수있는 ADT 프로젝트입니다 (아래 참조)!
  3. 추출 된 폴더에서 포함 된 파일 classes.jar의 이름 을 원하는대로 바꾸고 (이 예제에서는 myProjectLib.jar) 추출 된 폴더 내의 lib 폴더로 이동하십시오.
  4. 이제 Eclipse에서이를 승인하려면 추출 된 폴더 루트에 두 개의 파일을 넣어야합니다.
    • .계획
    • .classpath
  5. 이를 위해 Eclipse에서 새 Android 더미 프로젝트를 만들고 파일을 복사하거나 기존 Android 프로젝트에서 복사합니다.
  6. .project 파일을 열고 XML 이름 태그를 찾아서 그 내용을 myProjectLib (또는 위에서 jar 파일이라고 부르는 이름)으로 바꾸고 저장합니다.
  7. 이제 Eclipse에서 File-> New-> Project-> Android Project from existing source .. 할 수 있으며 추출 된 폴더 내용을 가리 킵니다.
  8. 가져 오기 후 새로 생성 된 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Properties-> Android를 선택 하고 Is Library를 확인합니다. 합니다.
  9. 라이브러리를 사용하려는 기본 프로젝트에서 속성-> Android 로 이동 하여 새로 추가 된 myProjectLib를 종속성 목록에 추가합니다.


답변

자동으로 수행하려는 사람들을 위해 다음 두 가지 작업을 수행하는 2 줄짜리 bash 스크립트를 작성했습니다.

  1. 모든 * .aar 파일을 찾고 그 파일에서 classes.jar을 추출합니다.
  2. 추출 된 classes.jar의 이름을 aar와 비슷하지만 새 확장자로 변경합니다.

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

그게 다야!


답변

Android Studio (버전 : 1.3.2)를 사용하면 .aar 내의 .jar에 원활하게 액세스 할 수 있습니다.

보너스 : 자동으로 클래스를 디 컴파일합니다!

다음 단계를 따르십시오.

  1. File > New > New Module > Import .JAR/.AAR Package .aar를 모듈로 가져 오려면

  2. 새로 생성 된 모듈을 기본 프로젝트에 대한 종속성으로 추가합니다 (필요한 경우 확실하지 않음).

  3. 아래 캡처에 표시된대로 “classes.jar”를 마우스 오른쪽 단추로 클릭하고 “탐색기에 표시”를 클릭하십시오. 다음은 .jar입니다.

.aar에서 .jar에 액세스


답변

 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.

참고 : .aar 파일에서 .jar 파일 만 가져 오려면 위의 방법을 사용하십시오. .jar 파일에 manifest.xml 및 리소스를 포함하려면 .aar 파일을 마우스 오른쪽 버튼으로 클릭하고 .zip으로 저장하는 대신 직접 .jar 파일로 저장할 수 있습니다. 압축을 푼 .jar 파일을 보려면 JD-GUI (Java Decompiler)를 다운로드하십시오 . 그런 다음 .jar 파일을이 JD_GUI로 끌어다 놓으면 .java 파일과 같이 읽을 수있는 형식으로 .class 파일을 볼 수 있습니다.

여기에 이미지 설명 입력
여기에 이미지 설명 입력


답변

리소스 기반 .aar-projects

.aar 파일에서 classes.jar 파일을 찾는 것은 매우 간단합니다. 그러나 .aar-project가 일부 리소스 (예 : R.layout.xyz)를 정의한 경우 해당 접근 방식은 작동하지 않습니다.

  • 따라서 CommonsGuy의 deaar 는 .aar 파일 에서 유효한 ADT 친화적 인 프로젝트를 얻는 데 도움이되었습니다. 제 경우에는 subsampling-scale-image-view 변환했습니다
    . 내 PC에 루비를 설치하는 데 약 한 시간이 걸렸습니다.

  • 또 다른 접근 방식은 CommonsGuy가 블로그에 쓴 것처럼 Eclipse / ADT 용 android-maven-plugin을 사용하는 것 입니다.

  • 또 다른 접근 방식은 원하는 전체 프로젝트를 git의 소스로 복제하고 “기존 Android 프로젝트”로 가져 오는 것입니다.