Android Studio 프로젝트에서 .jar를 만드는 방법


96

AndroidStudio를 사용하고 있으며 다음과 같은 프로젝트가 있습니다.

여기에 이미지 설명 입력

파란색 원 안에있는 것은 myLib입니다. myLib는 또한 빨간색 원 안에있는 외부 라이브러리와 아파치 패키지 (녹색 원)를 사용해야합니다.

그래서 저는이 모든 것을 하나의 .jar로 만들고 싶습니다. 그래서 다른 프로젝트에서 사용할 수 있습니다.

단계별 가이드가 정말 감사하겠습니다. 저는 개발자 세계의 초보자입니다.

감사!


1
원하는 것은 의존성으로 간단하게 연결할 수있는 aar 파일 (Android 아카이브)이라고 생각합니다. 기본적으로 Android 라이브러리 프로젝트를 만들어야합니다. 그러나 나는 마음에서 정확한 단계를 쓸 수 없습니다.
rekire

2
모든 Java 프로젝트에서 사용할 수 있도록 .jar 파일이 필요합니다. 안드로이드뿐만 아니라.
dum4ll3 2014

1
거의 동일해야합니다. 라이브러리 프로젝트를 만들고 내보내십시오.
Thrash Bean 2014

이 버그는 ... 쉽게 Gradle을 빌드 파일을 해킹 방지는 단지 대상을 추가 할 수있는 안드로이드 Gradle을 플러그인의 결핍을 설명
mmigdol

답변:


135
  • 라이브러리 프로젝트 용 build.gradle 열기 여기에 이미지 설명 입력

  • build.gradle에 두 개의 작업 (deleteJar 및 createJar)을 작성하고 createJar.dependsOn (deleteJar, build) 규칙 추가 여기에 이미지 설명 입력

위의 코드 :

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • 오른쪽에서 gradle 패널을 확장하고 yourlibrary-> others 아래의 모든 작업을 엽니 다. 거기에 두 개의 새로운 작업이 표시됩니다-createJar 및 deleteJar 여기에 이미지 설명 입력

  • createJar를 두 번 클릭하십시오. 여기에 이미지 설명 입력

  • 작업이 성공적으로 실행되면 createJar 작업 (예 : libs / xxxx.jar)에 언급 된 경로에서 생성 된 jar를 가져옵니다. 여기에 이미지 설명 입력

  • 새로 생성 된 jar를 필요한 프로젝트의 lib 폴더에 복사-> 마우스 오른쪽 버튼 클릭-> "라이브러리로 추가"선택


4
때때로 사람들은 읽기보다는 보는 것으로 이해합니다. 좋은 UX입니다 ☺
Abhinav Tyagi

5
글쎄, 그럼 내가 잘 모르겠다 고 말해야 겠어 release. 나는 없어 한 debug하고 default있지만 release폴더에 있습니다. 어떤 버전의 플러그인을 사용하고 있습니까? 이것이 문서화되어 있는지 아십니까?
Cameron Lowell Palmer

3
release폴더 가 없습니다 .
Kamran Bigdely

4
무엇을 복사하려고합니까 ?? APK 파일이 포함 된 폴더를 대상으로해야합니까 ?? from ( 'build / intermediates / bundles / default') 줄에서이 디렉토리가 당신을 위해 무엇을 가지고 있는지를 의미합니다. 내 안드로이드 스튜디오에 번들이라는 이름의 폴더가 없으며 createJar 작업에서 소스가 계속 표시
되지 않습니다

12
Android Studio 3.1.3 및 Gradle 버전 4.4의 경우 from ( 'build / intermediates / bundles / release /')에서 from ( 'build / intermediates / packaged-classes / release /')로 변경
Vaishakh

59

Gradle에서 코드를 일반 Java 모듈로 설정하면 Gradle에서 콘텐츠가 포함 된 jar 파일을 제공하는 것이 정말 쉽습니다. 해당 jar 파일에는 자신의 코드 만 있고 종속 된 다른 Apache 라이브러리는 없습니다. 이 방법으로 배포하는 것이 좋습니다. 라이브러리 내부에 종속성을 번들로 묶는 것이 약간 이상하고 해당 라이브러리의 사용자가 해당 종속성을 자체적으로 포함해야하는 것이 더 일반적입니다 (그렇지 않으면 해당 프로젝트의 충돌이 이미 라이브러리 복사본, 아마도 다른 버전을 연결하고 있기 때문). ). 또한 라이브러리를 게시하는 경우 다른 사람의 코드를 재배포하는 것과 관련된 잠재적 인 라이선스 문제를 방지 할 수 있습니다.

jar로 컴파일해야하는 코드를 가져 와서 Android 스튜디오의 별도의 일반 Java 모듈로 이동합니다.

  1. 파일 메뉴> 새 모듈 ... > Java 라이브러리
  2. 마법사에서 라이브러리, Java 패키지 이름 및 클래스 이름을 설정합니다. (클래스를 생성하지 않으려면 모듈이 생성 된 후 삭제할 수 있습니다.)
  3. Android 코드에서 새 라이브러리의 코드를 사용할 수 있도록 새 모듈에 대한 종속성을 설정합니다.
  4. File > Project Structure > Modules > (your Android Module) > Dependencies > + > Module dependency . 아래 스크린 샷을 참조하십시오. 여기에 이미지 설명 입력
  5. 나타나는 대화 상자의 목록에서 모듈을 선택하십시오. 여기에 이미지 설명 입력

이제 프로젝트가 정상적으로 빌드되기를 바랍니다. 빌드를 수행하면 Java 라이브러리의 jar 파일이 모듈 디렉토리 의 build / libs 디렉토리에 배치됩니다 . jar 파일을 직접 빌드하려면 Gradle 창에서 jar 빌드 파일 작업을 실행할 수 있습니다 . 여기에 이미지 설명 입력


대단히 감사합니다! 귀하의 답변은 Gradle 작업을 보여주는 마지막 스크린 샷에서 매우 유용했습니다. 나는 그것을 몰랐다. 단계를 따를 수는 있지만 여전히 org.apache.http.Header가 누락되었습니다. 내 lib로 어떻게 가져올 수 있습니까?
dum4ll3 2014

당신이 그것을 놓치고 있다는 것은 무엇을 의미합니까?
Scott Barta 2014

1
동일한 프로젝트 구조> 종속성 흐름으로 이동하되 프로젝트 대신 라이브러리 모듈을 선택하고 동일한 방식으로 종속성을 추가합니다. 내 대답에서 jar 파일을 모듈 디렉토리의 build / libs dir에 넣는다 고 말합니다.
Scott Barta 2014

1
나는 : java.lang.NoClassDefFoundError : com.loopj.android.http.RequestParams. 이것이 제가 컴파일하고있는 외부 라이브러리입니다.
dum4ll3 2014

2
그것은하지 존재 안드로이드 라이브러리에서만 자바 라이브러리 및 항아리 작업 작업
cuasodayleo

26

Android 스튜디오 IDE에서 다음을 수행하여 " Run Anything bar "에 액세스합니다 .

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

그 후 프로젝트의이 폴더에서 아티팩트를 찾을 수 있습니다.
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


또는


Gradle은 이미 폴더 Task아래의 gradle 사이드 메뉴에 other있습니다.

gradle 툴바

그런 다음 아래로 스크롤하여 createFullJarRelease클릭하십시오.

Gradle 작업

그 후 프로젝트의이 폴더에서 아티팩트를 찾을 수 있습니다.

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
이 옵션을 볼 수 없습니다. 최신 Studio 버전에 추가 되었습니까?
Dibzmania 2018

1
내가 빌드하고 * .jar를 찾을 때 이름은 full.jar입니다. 30 분, 롤 그것을 발견하기
nobjta_9x_tq

1
내 경우, 나는 그것을 발견build\intermediates\intermediate-jars\release
Yusril Maulidan 라지

질문이 있습니다. 제 경우에는 3 개의 jar 파일을 생성합니다. classes.jar, full.jarres.jar. 사용할 때마다 모든 jar 파일을 가져와야합니까?
Yusril Maulidan Raji

full.jar를 사용하세요.
Haroun Hajem

11

이것을 자바 모듈의 build.gradle에 추가하기 만하면됩니다. 아카이브에 종속 ​​라이브러리가 포함됩니다.

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

그러면 [module_name] / build / libs / [module_name] .jar 파일이 생성됩니다.


그러나 .jar 라이브러리에는 Main 클래스가 있습니까? OP는 "다른 프로젝트에서 사용할 수 있도록".jar 파일을 만들고 있다고 말합니다. 도서관처럼 들리 네요.
Steve White

단지이 사람 만이 단지 단지 단지 생성이 문제를 해결하지 못한다는 것을 이해했습니다. 실행해야한다면 어떨까요? 위의 코드는 "jar 파일을 실행할 수 없음 :"주 매니페스트 속성 없음 ""오류를 방지합니다.
MobileEvangelist

1

.jar 파일은 응용 프로그램을 컴파일 / 실행할 때 자동으로 생성됩니다.

root_folder / app / build / intermediates / bundles / debug에서 class.jar 파일을 찾을 수 있습니다.

jar 파일 위치


1
  1. Android Studio의 Gradle 탭으로 이동 한 다음 라이브러리 프로젝트를 선택합니다.

  2. 그런 다음 작업으로 이동

  3. 그런 다음 기타로 이동

  4. bundleReleaseaar를 두 번 클릭하십시오.

.aar아래에서 파일을 찾을 수 있습니다.your_module/build/outputs/aar/your-release.aar

여기 이미지


어디에서도 "Gradle Tab"이 보이지 않습니다. 마지막으로 도움말 검색에 "Gradle"을 입력하고 Gradle보기와 같은 것을 얻었습니다. 그러나 내부 목록은 매우 다르며 귀하의 목록보다 훨씬 짧습니다. Tasks-> Other에는 bundleReleaseaar가 없습니다. "createJar"가 있지만 클릭하면 "루트 프로젝트에서 찾을 수없는 태스크 'createJar'..."가 표시됩니다. 그리고 ... 왜 우리는 .aar 파일을 원합니까? OP는 .jar 파일을 요청했습니다. 같은 일입니까>
Steve White

그러나 문제는 만드는 방법입니다 .jar하지.aar
알렉세이 Timoshchenko

0

내가 찾은 방법은 프로젝트 컴파일러 출력을 찾는 것입니다 (프로젝트 구조> 프로젝트). 그런 다음 jar로 바꾸려는 모듈의 complied 폴더를 찾아서 zip으로 압축하고 출력의 확장자를 zip에서 jar로 변경하십시오.


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

AndroidStudio에서 gradle 작업을 실행하는 경우 [More]

assembleRelease 
//or
bundleReleaseAar

또는 터미널을 통해

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

다음에서 찾을 수 .aar있습니다

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aar(Android Library) 파일은 .jar(Java Library) 파일과 추가 Android 리소스로 구성됩니다. .aar파일은 대체 할 수있는 이유입니다 AAR 확장자를 가진 압축 파일 .aar.zip또는 실행

unzip "<path_to/module_name>.aar"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.