일부 라이브러리 소스를 다운로드했으며 Android Studio를 사용하여 Jar 파일로 내보내고 싶습니다. Android Studio를 사용하여 jar 파일로 내보내는 방법이 있습니까?
편집하다:
jar로 내보내려는 라이브러리는 Android 라이브러리입니다. "StandOut"이라고하며 GitHub에서 다운로드 할 수 있습니다. https://github.com/pingpongboss/StandOut
일부 라이브러리 소스를 다운로드했으며 Android Studio를 사용하여 Jar 파일로 내보내고 싶습니다. Android Studio를 사용하여 jar 파일로 내보내는 방법이 있습니까?
편집하다:
jar로 내보내려는 라이브러리는 Android 라이브러리입니다. "StandOut"이라고하며 GitHub에서 다운로드 할 수 있습니다. https://github.com/pingpongboss/StandOut
답변:
Android 라이브러리를 jar 파일로 내보낼 수 없습니다. 그러나 aar
파일 로 내보낼 수 있습니다. Aar
파일은 Android 라이브러리의 새로운 바이너리 형식입니다. Google I / O, New Build System 동영상에 이에 대한 정보가 있습니다 .
먼저 Android Studio 또는 gradle build
라이브러리의 루트 디렉터리에서 실행 되는 명령 줄에서 라이브러리를 빌드합니다 .
그러면 <yourlibroot>/libs/build/yourlib.aar
파일 이 생성 됩니다.
이 aar 파일은 라이브러리의 바이너리 표현이며 라이브러리 대신 종속성 프로젝트로 프로젝트에 추가 할 수 있습니다.
aar 파일을 종속성으로 추가하려면 해당 파일을 Maven Central 또는 로컬 Maven 저장소에 게시 한 다음 프로젝트 파일에서 aar 파일을 참조해야 gradle.build
합니다.
그러나이 단계는 약간 복잡합니다. 여기에서 방법에 대한 좋은 설명을 찾았습니다.
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
.jar
이 솔루션의 접근 방식을 사용하여 컴파일 된 파일에 라이브러리 소스 코드를 빌드 할 수있었습니다 .
https://stackoverflow.com/a/19037807/1002054
내가 한 일의 분석은 다음과 같습니다.
아마도 그것은 Volley 도서관이었다
Android Studio 0.3.7을 사용했습니다. 이 단계에서 몇 가지 문제가 발생했습니다. 즉, gradle
Volley 라이브러리 소스 코드를 가져 오기 전에 새 Android 프로젝트에서 폴더 를 복사해야했습니다 . 사용하는 소스 코드에 따라 다를 수 있습니다.
build.gradle
파일 수정// If your module is a library project, this is needed
//to properly recognize 'android-library' plugin
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.3'
}
}
apply plugin: 'android-library'
android {
compileSdkVersion 17
buildToolsVersion = 17
sourceSets {
main {
// Here is the path to your source code
java {
srcDir 'src'
}
}
}
}
// This is the actual solution, as in https://stackoverflow.com/a/19037807/1002054
task clearJar(type: Delete) {
delete 'build/libs/myCompiledLibrary.jar'
}
task makeJar(type: Copy) {
from('build/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'myCompiledLibrary.jar')
}
makeJar.dependsOn(clearJar, build)
gradlew makeJar
프로젝트 루트에서 명령을 실행 합니다.내 경우 나는 복사했다 gradlew.bat
및 gradle
내 라이브러리 프로젝트 루트에 새로운 안드로이드 프로젝트에서 파일을. 디렉토리 myCompiledLibrary.jar
에서 컴파일 된 라이브러리 파일 을 찾아야합니다 build\libs
.
누군가 이것이 유용하다고 생각하기를 바랍니다.
편집하다:
작동하지만 여러 모듈이있는 프로젝트를 컴파일하는 동안 중복 라이브러리 예외가 발생합니다. 여기서 둘 이상의 모듈 (애플리케이션 모듈 포함)이 동일한 jar
파일 에 의존 합니다 (예 : 모듈에는 build.gradle
주어진 모듈 에서 참조되는 자체 라이브러리 디렉토리가 있음 ) .
하나 이상의 모듈에서 단일 라이브러리를 사용해야하는 경우 Android gradle 빌드 및 지원 라이브러리와 같은 접근 방식을 사용하는 것이 좋습니다.
res
폴더 를 원한다면 AAR 파일은 res
폴더를 지원 하는 JAR 파일입니다 .
Android Studio V1.0부터 jar 파일은 다음 프로젝트 링크에서 사용할 수 있습니다.
디버그 버전 : "your_app"\ build \ intermediates \ bundles \ debug \ classes.jar
릴리스 버전 : "your_app"\ build \ intermediates \ bundles \ release \ classes.jar
JAR 파일은 빌드 절차에서 생성됩니다. Android Studio GUI에서는 Build-> Make Project에서 가져오고 CMD 줄에서 "gradlew build"입니다.
build.gradle에 다음을 포함합니다.
android.libraryVariants.all { variant ->
task("generate${variant.name}Javadoc", type: Javadoc) {
description "Generates Javadoc for $variant.name."
source = variant.javaCompile.source
ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
}
task("javadoc${variant.name}", type: Jar) {
classifier = "javadoc"
description "Bundles Javadoc into a JAR file for $variant.name."
from tasks["generate${variant.name}Javadoc"]
}
task("jar${variant.name}", type: Jar) {
description "Bundles compiled .class files into a JAR file for $variant.name."
dependsOn variant.javaCompile
from variant.javaCompile.destinationDir
exclude '**/R.class', '**/R$*.class', '**/R.html', '**/R.*.html'
}
}
그런 다음 다음을 사용하여 gradle을 실행할 수 있습니다. 그러면 ./gradlew clean javadocRelease jarRelease
Jar와 javadoc jar가 build/libs/
폴더에 빌드됩니다 .
편집 : 안드로이드 gradle 도구 1.10. +를 사용하면 안드로이드 SDK 디렉토리를 얻는 것이 이전과 다릅니다. 다음을 변경해야합니다 (Vishal에게 감사합니다!).
android.sdkDirectory
대신에
android.plugin.sdkDirectory
이 튜토리얼을 사용하여 Android Studio에서 jar 파일을 내보낼 수있었습니다. https://www.youtube.com/watch?v=1i4I-Nph-Cw "How To Export Jar From Android Studio"
Android Studio에서 JAR을 내보내는 모든 단계를 포함하도록 답변을 업데이트했습니다.
1) Android 애플리케이션 프로젝트를 만들고 app-> build.gradle 로 이동합니다.
2)이 파일에서 다음을 변경하십시오.
임의로 변경 플러그인 적용 'com.android.application'을 하는 플러그인 적용 'com.android.library'
다음을 제거하십시오 : applicationId, versionCode 및 versionName
다음 코드를 추가하십시오.
// Task to delete old jar
task deleteOldJar(type: Delete){
delete 'release/AndroidPlugin2.jar'
}
// task to export contents as jar
task exportJar(type: Copy) {
from ('build/intermediates/bundles/release/')
into ('release/')
include ('classes.jar')
rename('classes.jar', 'AndroidPlugin2.jar')
}
exportJar.dependsOn(deleteOldJar, build)
3) 이 파일에서 지금 동기화 를 클릭하는 것을 잊지 마십시오 (오른쪽 상단 또는 동기화 버튼 사용).
4) Gradle 탭 (일반적으로 오른쪽 중간)을 클릭하고 아래로 스크롤하여 exportjar로 이동합니다.
5) 빌드가 성공하면 실행 창에 메시지가 표시되면 일반 파일 탐색기를 사용하여 C : \ Users \ name \ AndroidStudioProjects \ ProjectName \ app \ release 경로를 사용하여 내 보낸 jar로 이동 합니다.이 디렉토리에 jar 파일이 표시됩니다.
행운을 빕니다 :)
여기에 몇 가지 개선 사항이있는 약간 다른 답변이 있습니다.
이 코드는 .aar에서 .jar을 바로 가져옵니다. 개인적으로 .jar를 통해 배송되는 비트가 .aar를 통해 배송 된 비트와 동일하다는 사실을 좀 더 확신 할 수 있습니다. 이것은 또한 ProGuard를 사용하는 경우 출력 jar가 원하는대로 난독 화된다는 것을 의미합니다.
또한 모든 빌드 변형에 대한 jar를 만드는 슈퍼 "makeJar"작업을 추가했습니다.
task(makeJar) << {
// Empty. We'll add dependencies for this task below
}
// Generate jar creation tasks for all build variants
android.libraryVariants.all { variant ->
String taskName = "makeJar${variant.name.capitalize()}"
// Create a jar by extracting it from the assembled .aar
// This ensures that products distributed via .aar and .jar exactly the same bits
task (taskName, type: Copy) {
String archiveName = "${project.name}-${variant.name}"
String outputDir = "${buildDir.getPath()}/outputs"
dependsOn "assemble${variant.name.capitalize()}"
from(zipTree("${outputDir}/aar/${archiveName}.aar"))
into("${outputDir}/jar/")
include('classes.jar')
rename ('classes.jar', "${archiveName}-${variant.mergedFlavor.versionName}.jar")
}
makeJar.dependsOn tasks[taskName]
}
호기심 많은 독자를 위해 com.android.library 플러그인이 .aar 파일의 이름을 지정하는 데 사용하는 올바른 변수와 매개 변수를 결정하는 데 어려움을 겪었습니다. 드디어 안드로이드 오픈 소스 프로젝트에서 그들을 발견 여기에 .
Android 스튜디오에서 리소스 파일없이 Android 라이브러리 프로젝트 용 jar 파일을 내보낼 수 있습니다. 최근에 만난 것도 요구 사항입니다.
1. build.gradle 파일 구성
// Task to delete old jar
task clearJar(type: Delete){
delete 'release/lunademo.jar'
}
// task to export contents as jar
task makeJar(type: Copy) {
from ('build/intermediates/bundles/release/')
into ('build/libs/')
include ('classes.jar')
rename('classes.jar', 'lunademo.jar')
}
makeJar.dependsOn(clearJar, build)
2. 프로젝트 루트에서 gradlew makeJar를 실행합니다.
운 좋게도 libs는 dir 아래에 build / libs /로 표시됩니다.
================================================ ==========
아래와 같이 명령 줄에서 "Socket timeout exception"문제를 만난 경우,
다음 단계에 따라 오른쪽에있는 Gradle 창을 열고 Android 스튜디오에서 "makeJar"를 클릭합니다.
그런 다음 build / libs dir로 이동하면 jar 파일이 표시됩니다.
도움이 되길 바랍니다.
행운을 빕니다 @.@
루나