Programing

AAR에서 JAR로 변환하는 방법

lottogame 2020. 9. 11. 19:23
반응형

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입니다.

access .jar from .aar


 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.

Note: If you want to get only .jar file from your .aar file use the above way. Suppose If you want to include the manifest.xml and resources with your .jar file means you can just right click on your .aar file and save it as .jar file directly instead of saving it as a .zip. To view the .jar file which you have extracted, download JD-GUI(Java Decompiler). Then drag and drop your .jar file into this JD_GUI, you can see the .class file in readable formats like a .java file.

enter image description here enter image description here


Resource based .aar-projects

Finding the classes.jar file inside the .aar file is pretty trivial. However, that approach does not work, if the .aar-project defined some resources (example: R.layout.xyz)

  • Therefore deaar from CommonsGuy helped me to get a valid ADT-friendly project out of an .aar-file. In my case I converted subsampling-scale-image-view. It took me about an hour to set up ruby on my PC.

  • Another approach is using android-maven-plugin for Eclipse/ADT as CommonsGuy writes in his blog.

  • Yet another approach could be, just cloning the whole desired project as source from git and import it as "Existing Android project"


If you are using Gradle for your builds - there is a Gradle plugin which allows you to add aar dependency to your java|kotlin|scala|... modules.

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
}

참고URL : https://stackoverflow.com/questions/21417419/how-to-convert-aar-to-jar

반응형