86

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

编辑:

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

4

7 回答 7

86

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

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

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

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

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

但是,这一步有点复杂。我在这里找到了一个很好的解释:

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

于 2013-06-16T09:56:52.640 回答
44

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

以下是我所做的细分:

1.签出库存储库

在可能的情况下,它是一个 Volley 库

2. 在 Android Studio 中导入库。

我使用的是 Android Studio 0.3.7。我在该步骤中遇到了一些问题,即gradle在能够导入 Volley 库源代码之前,我必须从新的 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从项目根目录运行命令。

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

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

编辑:

警告

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

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

于 2013-12-07T20:54:31.637 回答
38

从 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”。

于 2015-02-15T14:29:27.007 回答
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'
    }
}

然后,您可以使用以下命令执行 gradle:./gradlew clean javadocRelease jarRelease它将构建您的 Jar 以及一个 javadoc jar 到build/libs/文件夹中。

编辑:使用 android gradle tools 1.10.+ 获取 android SDK 目录与以前不同。您必须更改以下内容(感谢 Vishal!):

android.sdkDirectory 

代替

android.plugin.sdkDirectory
于 2013-11-14T01:37:57.097 回答
12

我能够使用本教程在 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) 在运行窗口中看到构建成功消息后,使用普通文件资源管理器转到使用路径导出的 jar:C:\Users\name\AndroidStudioProjects\ProjectName\app\release 您应该在此目录中看到您的 jar 文件。

祝你好运 :)

于 2015-11-29T14:35:37.260 回答
9

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

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

我还添加了一个超级“makeJar”任务,它为所有构建变体制作 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 开源项目中找到了它们。

于 2015-01-23T05:10:26.003 回答
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 下看到您的库为 build/libs/。

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

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

在此处输入图像描述

您可以按照以下步骤在右侧打开 Gradle 窗口,然后在 Android Studio 上单击“makeJar”,如下所示,

在此处输入图像描述

在此处输入图像描述

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

希望对你有帮助。

祝你好运 @。@

露娜

于 2016-10-24T05:15:47.110 回答