programing

Android Studio에서 Jar로 라이브러리를 내보내는 방법은 무엇입니까?

nasanasas 2020. 9. 23. 07:42
반응형

Android Studio에서 Jar로 라이브러리를 내보내는 방법은 무엇입니까?


일부 라이브러리 소스를 다운로드했으며 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

내가 한 일의 분석은 다음과 같습니다.

1. 체크 아웃 라이브러리 저장소

아마도 그것은 Volley 도서관이었다

2. Android Studio에서 라이브러리를 가져옵니다.

Android Studio 0.3.7을 사용했습니다. 이 단계에서 몇 가지 문제가 발생했습니다. 즉, gradleVolley 라이브러리 소스 코드를 가져 오기 전에 새 Android 프로젝트에서 폴더 를 복사해야했습니다 . 사용하는 소스 코드에 따라 다를 수 있습니다.

3. 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)

4. gradlew makeJar프로젝트 루트에서 명령을 실행 합니다.

내 경우 나는 복사했다 gradlew.batgradle내 라이브러리 프로젝트 루트에 새로운 안드로이드 프로젝트에서 파일을. 디렉토리 myCompiledLibrary.jar에서 컴파일 된 라이브러리 파일 찾아야합니다 build\libs.

누군가 이것이 유용하다고 생각하기를 바랍니다.

편집하다:

경고

작동하지만 여러 모듈이있는 프로젝트를 컴파일하는 동안 중복 라이브러리 예외가 발생합니다. 여기서 둘 이상의 모듈 (응용 프로그램 모듈 포함)이 동일한 jar파일 에 종속 됩니다 (예 : 모듈에는 build.gradle주어진 모듈 에서 참조되는 자체 라이브러리 디렉토리가 있음 ) .

하나 이상의 모듈에서 단일 라이브러리를 사용해야하는 경우 Android gradle 빌드 및 지원 라이브러리와 같은 접근 방식을 사용하는 것이 좋습니다.


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 jarReleaseJar와 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]
}

For the curious reader, I struggled to determine the correct variables and parameters that the com.android.library plugin uses to name .aar files. I finally found them in the Android Open Source Project here.


We can export a jar file for Android library project without resource files by Android studio. It is also requirement what I met recently.

1. Config your build.gradle file

    // 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. Run gradlew makeJar under your project root

You will see your libs under dir as build/libs/ if you are luckily.

============================================================

If you met issue as "Socket timeout exception" on command line as below,

enter image description here

You can follow this steps to open Gradle window in the right part and click "makeJar" on Android studio like this,

enter image description here

enter image description here

Then go to build/libs dir, you will see your jar file.

Hope that it is helpful for u.

Good Luck @.@

Luna

참고URL : https://stackoverflow.com/questions/16763090/how-to-export-library-to-jar-in-android-studio

반응형