AAR을 JAR로 변환하는 방법
상황.:
Java 라이브러리를 사용하려고 하는데 Maven 저장소에서 AAR 파일만 가지고 있는데 JAR 파일이 필요합니다.
배경 스토리:
도서관을 컴파일하려고 했는데 그래들 구조가 불안정했어요.그래서 컴파일된 jar 파일을 요청했더니 개발자가 Maven 저장소에서 aar 파일을 받았습니다(개발자는 자신의 프로젝트를 컴파일할 수 없었습니다).그래들 구성은 엉망이었고, 여러 라이브러리에 의존했으며 그래들에서는 몇 가지 예외가 발생했습니다.
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를 추출하는 것만으로는 리소스가 부족할 수 있기 때문에 .jar를 잘릴 수 없습니다.
다음은 나에게 효과가 있었던 단계입니다(Android의 경우 다른 목적을 가진 경우 주행거리가 달라질 수 있습니다).
- .aar 파일의 이름을 .zip으로 변경하고 압축을 풉니다.
- 추출된 폴더는 이클립스로 가져올 수 있는 ADT 프로젝트입니다(아래 참조).
- 추출된 폴더에서 포함된 파일 class.jar의 이름을 원하는 이름으로 변경하고(이 예에서는 myProjectLib.jar), 추출된 폴더 내의 lib 폴더로 이동합니다.
- 이제 Eclipse를 수락하려면 추출된 폴더 루트에 다음 두 개의 파일을 넣어야 합니다.
- .프로젝트.
- .classpath
- 그러기 위해서는 Eclipse에서 새로운 Android 더미 프로젝트를 만들고 파일을 복사하거나 기존 Android 프로젝트에서 복사하십시오.
- .project 파일을 열고 XML 이름 태그를 찾아 myProjectLib(또는 위에서 jar 파일을 호출한 내용)로 대체하고 저장합니다.
- 이클립스에서는 기존 소스에서 파일 작성 -> 신규 작성 -> 프로젝트 -> Android 프로젝트를 수행할 수 있습니다.추출된 폴더 내용을 가리킵니다.
- 새로 만든 프로젝트를 마우스 오른쪽 버튼으로 클릭한 후 Properties - > Android를 선택하고 Is Library를 선택합니다.
- 라이브러리를 사용하는 메인프로젝트에서도 [Properties]-> [ Android ]으로 이동하여 새로 추가된 myProjectLib를 의존관계 목록에 추가합니다.
자동으로 실행하는 사용자를 위해 다음 두 가지 작업을 수행하는 작은 두 줄의 bash 스크립트를 작성했습니다.
- 모든 *.aar 파일을 검색하여 class.jar 파일을 추출합니다.
extracted class.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
.새로 만든 모듈을 메인 프로젝트에 종속 요소로 추가(필요한 경우 확실하지 않음)
아래 캡처에 표시된 "classes.jar"를 마우스 오른쪽 버튼으로 클릭하고 "Show in Explorer"를 클릭합니다.여기 당신의 .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 파일만 가져오려면 위의 방법을 사용하십시오.예를 들어 manifest.xml 및 리소스를 .jar 파일에 포함할 경우 .aar 파일을 오른쪽 클릭하여 .zip으로 저장하지 않고 .jar 파일로 직접 저장할 수 있습니다.압축을 푼 .jar 파일을 보려면 JD-GUI(Java Decompiler)를 다운로드합니다.그런 다음 이 JD_GUI에 .jar 파일을 드래그 앤 드롭하면 .java 파일처럼 읽을 수 있는 형식으로 .class 파일을 볼 수 있습니다.
리소스 기반 .aar 프로젝트
.aar 파일 내에서 classes.jar 파일을 찾는 것은 매우 간단합니다.단, .aar-project가 일부 리소스를 정의한 경우(예: R.layout.xyz) 이 접근법은 작동하지 않습니다.
그러므로 하원의원은가이는 내가 .aar 파일에서 ADT 친화적인 유효한 프로젝트를 얻을 수 있도록 도와주었다.제 경우 서브샘플링 스케일 이미지 뷰를 변환했습니다. PC에서 루비를 설정하는 데 1시간 정도 걸렸어요.
또 다른 접근법은 CommonsGuy가 블로그에 쓴 것처럼 Eclipse/ADT용 Android-maven-plugin을 사용하는 것이다.
또 다른 방법은 원하는 프로젝트 전체를 git에서 소스로 복제하여 "기존 안드로이드 프로젝트"로 Import하는 것입니다.
빌드에 Gradle을 사용하는 경우 - Java|kotlin|scala|... 모듈에 의존관계를 추가할 수 있는 Gradle 플러그인이 있습니다.
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
'programing' 카테고리의 다른 글
Python으로 NULL 데이터를 MySQL 데이터베이스에 삽입하려면 어떻게 해야 하나요? (0) | 2022.09.11 |
---|---|
어제 PHP 날짜 (0) | 2022.09.08 |
Java의 "인코딩에 사용할 수 없는 문자" 경고 (0) | 2022.09.08 |
Vuex 저장소의 NuxTJS 값이 정의되지 않았습니다. (0) | 2022.09.08 |
JAVA_의 설정 방법Linux의 HOME은 모든 사용자를 대상으로 합니다. (0) | 2022.09.08 |