如何在Android Studio中将库导出到Jar?

时间:2013-05-26 19:47:40

标签: android android-studio

我已下载了一些库源,并希望将其导出为Jar文件 Android Studio。有没有办法使用Android studio导出到jar文件?

编辑:

我想要导出为jar的库是一个Android库。 它被称为“StandOut”,可以从GitHub下载。 https://github.com/pingpongboss/StandOut

7 个答案:

答案 0 :(得分:81)

无法将Android库导出为jar文件。但是,可以将其导出为aar文件。 Aar个文件是Android库的新二进制格式。 Google I / O中有关于它们的信息,New Build System video

首先,在Android Studio中或从库的根目录中发出gradle build命令行构建库。

这将导致<yourlibroot>/libs/build/yourlib.aar文件。

此aar文件是库的二进制表示形式,可以作为依赖项目添加到项目而不是库中。

要将aar文件添加为依赖项,您必须将其发布到maven中心或本地maven存储库,然后在项目的gradle.build文件中引用aar文件。

然而,这一步有点令人费解。我在这里找到了一个很好的解释:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds

答案 1 :(得分:44)

我能够使用此解决方案中的方法为已编译的.jar文件构建库源代码: https://stackoverflow.com/a/19037807/1002054

以下是我所做的细分:

1。结帐库存储库

在可能的情况下,它是一个排球图书馆

2。在Android Studio中导入库。

我使用的是Android Studio 0.3.7。我在这一步中遇到了一些问题,即在我能够导入Volley库源代码之前,我必须从新的android项目中复制gradle文件夹,这可能会因您使用的源代码而异。

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命令。

我的情况我不得不将新的android项目中的gradlew.batgradle文件复制到我的库项目根目录中。 您应该在myCompiledLibrary.jar目录中找到已编译的库文件build\libs

我希望有人觉得这很有用。

编辑:

买者

虽然这有效,但在编译具有多个模块的项目时会遇到重复的库异常,其中多个模块(包括应用程序模块)依赖于相同的jar文件(例如,模块具有自己的库目录,在给定模块的build.gradle中引用。

如果您需要在多个模块中使用单个库,我建议使用此方法: Android gradle build and the support library

答案 2 :(得分:37)

自Android Studio V1.0起,jar文件可在以下项目链接中找到:

debug ver:&#34; your_app&#34; \ build \ intermediates \ bundles \ debug \ classes.jar

发布版本:&#34; your_app&#34; \ build \ intermediates \ bundles \ release \ classes.jar

在构建过程中创建JAR文件, 在Android Studio GUI中,它来自Build-&gt; Make Project,而来自CMD,它是&#34; gradlew build&#34;。

答案 3 :(得分:31)

将以下内容包含在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'
    }
}

然后你可以用./gradlew clean javadocRelease jarRelease执行gradle,它会将你的Jar和javadoc jar构建到build/libs/文件夹中。

编辑:使用android gradle工具1.10。+获取android SDK目录与以前不同。你必须改变以下(感谢Vishal!):

android.sdkDirectory 

而不是

android.plugin.sdkDirectory

答案 4 :(得分:11)

我可以使用本教程在Android Studio中导出jar文件: https://www.youtube.com/watch?v=1i4I-Nph-Cw  &#34;如何从Android Studio&#34;

导出Jar

我更新了我的答案,包括在Android Studio中导出JAR的所有步骤:

1)创建Android应用程序项目,转到 app-&gt; build.gradle

2)在此文件中更改以下内容:

  • 应用插件:&#39; com.android.application&#39; 修改为应用插件:&#39; com.android.library&#39;

  • 删除以下内容: 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)在运行窗口中看到构建成功消息后,使用普通文件资源管理器使用以下路径转到导出的jar: C:\ Users \ name \ AndroidStudioProjects \ ProjectName \应用\释放 你应该在这个目录中看到你的jar文件。

祝你好运:)

答案 5 :(得分:9)

这是另一个略有不同的答案,只有一些改进。

此代码将.jar从.aar中取出。就个人而言,这让我更有信心通过.jar发送的位与通过.aar发送的位相同。这也意味着如果您正在使用ProGuard,输出jar将根据需要进行模糊处理。

我还添加了一个超级&#34; makeJar&#34;任务,为所有构建变体制作jar。

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开源项目here中找到了它们。

答案 6 :(得分:4)

Android Studio可以导出没有资源文件的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

如果幸运的话,你会在dir下看到你的lib作为build / libs /。

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

如果您在命令行上遇到问题“套接字超时异常”,如下所示

enter image description here

您可以按照以下步骤打开右侧部分的Gradle窗口,然后点击Android studio上的“makeJar”,

enter image description here

enter image description here

然后去构建/ libs目录,你会看到你的jar文件。

希望它对你有帮助。

祝你好运@。@

露娜