상황 :
Java 라이브러리를 사용하려고 하고 Maven 저장소 의 AAR 파일 만 있지만 JAR 파일 이 필요 합니다.
배경 이야기 :
라이브러리를 컴파일하려고했지만 Gradle 구조가 불안정했습니다. 그래서 컴파일 된 jar 파일을 요청했고 그 개발자는 일부 Maven 저장소에서 aar 파일을 건네주었습니다 (개발자는 자신의 프로젝트를 컴파일 할 수 없었습니다). Gradle 구성은 엉망이었고 여러 라이브러리에 의존했으며 Gradle은 몇 가지 예외를 던졌습니다.
내 IDEA IDE에서 사용하려고했지만 보이지 않았습니다. 라이브러리 프로젝트는 jar 파일로 컴파일 할 수 있어야합니다. 그렇죠?
질문 :
AAR 파일을 JAR 파일로 변환하려면 어떻게해야합니까?
답변
AAR의 파일은 구성 의 JAR 파일 및 일부 리소스 파일 (이것은 기본적으로 사용자 정의 파일 확장명을 가진 표준 zip 파일)입니다. 변환하는 단계는 다음과 같습니다.
- 표준 zip 추출을 사용하여 AAR 파일의 압축을 풉니 다 ( 쉽도록 * .zip 으로 이름 변경 ).
- 추출 된 파일에서 classes.jar 파일을 찾으십시오.
- 원하는대로 이름을 바꾸고 프로젝트에서 해당 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 컨텍스트, 다른 목적이있는 경우 마일리지가 다를 수 있음).
- .aar 파일의 이름을 .zip으로 바꾸고 압축을 풉니 다.
- 추출 된 폴더는 약간의 수정을 통해 Eclipse에서 가져올 수있는 ADT 프로젝트입니다 (아래 참조)!
- 추출 된 폴더에서 포함 된 파일 classes.jar의 이름 을 원하는대로 바꾸고 (이 예제에서는 myProjectLib.jar) 추출 된 폴더 내의 lib 폴더로 이동하십시오.
- 이제 Eclipse에서이를 승인하려면 추출 된 폴더 루트에 두 개의 파일을 넣어야합니다.
- .계획
- .classpath
- 이를 위해 Eclipse에서 새 Android 더미 프로젝트를 만들고 파일을 복사하거나 기존 Android 프로젝트에서 복사합니다.
- .project 파일을 열고 XML 이름 태그를 찾아서 그 내용을 myProjectLib (또는 위에서 jar 파일이라고 부르는 이름)으로 바꾸고 저장합니다.
- 이제 Eclipse에서 File-> New-> Project-> Android Project from existing source .. 할 수 있으며 추출 된 폴더 내용을 가리 킵니다.
- 가져 오기 후 새로 생성 된 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Properties-> Android를 선택 하고 Is Library를 확인합니다. 합니다.
- 라이브러리를 사용하려는 기본 프로젝트에서 속성-> Android 로 이동 하여 새로 추가 된 myProjectLib를 종속성 목록에 추가합니다.
답변
자동으로 수행하려는 사람들을 위해 다음 두 가지 작업을 수행하는 2 줄짜리 bash 스크립트를 작성했습니다.
- 모든 * .aar 파일을 찾고 그 파일에서 classes.jar을 추출합니다.
-
추출 된 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에 원활하게 액세스 할 수 있습니다.
보너스 : 자동으로 클래스를 디 컴파일합니다!
다음 단계를 따르십시오.
-
File > New > New Module > Import .JAR/.AAR Package
.aar를 모듈로 가져 오려면 -
새로 생성 된 모듈을 기본 프로젝트에 대한 종속성으로 추가합니다 (필요한 경우 확실하지 않음).
-
아래 캡처에 표시된대로 “classes.jar”를 마우스 오른쪽 단추로 클릭하고 “탐색기에 표시”를 클릭하십시오. 다음은 .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 프로젝트”로 가져 오는 것입니다.