Android studio将Module打包成Jar的方法

整理记录 AndroidStudio 把一个 module 项目打包成 jar 包。

一、默认自动生成的 jar 包

众所周知 android studio 会在library所依赖的 app运行 或 build 之后自动生成 jar 包,路径为 Module根目录/build/intermediates/bundles/debug or release/classes.jar,这样生成的jar是可以用的,但不是我们可以控制的,所以我们需要通过其他方式来解决这个问题。

注意:

若发现 Android Studio 项目 bundle 文件夹下没有 release目录,可能是没有将 module 添加到主 module 依赖中。

方式1:主module右键 --> 倒数第二个Open Module Setting--> 上面最后一个选项Dependencies-->右边绿色加号-->Module dependency......然后确定

方式2:主Module的gradle的dependencies(平时添加第三方库的地方)中加上 compile project(':lib-zxing')

二、自定义生成 jar 包

首先,需要将待打包 module 项目中的 build.gradld 文件进行修改,如下图:

其次,在 build.gradle 文件中加入如下代码:

方式一:

def _BASENAME = "TestJar";
def _VERSION = "_V1.0";
def _DestinationPath = "build"; //生成jar包的位置
def zipFile = file('build/intermediates/bundles/default/classes.jar'); //待打包文件位置

task deleteBuild(type:Delete){
  delete _DestinationPath + _BASENAME + _VERSION + ".jar"
}

task makeJar(type:Jar){
  from zipTree(zipFile)
  from fileTree(dir:'src/main',includes:['assets/**']) //将assets目录打入jar包
  baseName = _BASENAME + _VERSION
  destinationDir = file(_DestinationPath)
}

makeJar.dependsOn(deleteBuild, build)

方式二:打包的 jar 只有源代码的.class 文件,不包含资源文件

task makeJar(type: Copy) {
  delete 'build/TestJar_V1.0.jar' //删除之前的旧jar包
  from('build/intermediates/bundles/default/') //从这个目录下取出默认jar包
  into('build/') //将jar包输出到指定目录下
  include('classes.jar')
  rename('classes.jar', 'TestJar_V1.0.jar') //自定义jar包的名字
}
makeJar.dependsOn(build)

方式三:

task clearJar(type: Delete) {
  delete 'build/TestJar_V1.0.jar' //jar包的名字,随便命名
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
  //指定生成的jar名
  baseName 'TestJar_V1.0'
  //从哪里打包class文件
  from('build/intermediates/bundles/default/')
  //打包到jar后的目录结构
  into('build/')
  //去掉不需要打包的目录和文件
  exclude('test/', 'BuildConfig.class', 'R.class')
  //去掉R开头的文件
  exclude{it.name.startsWith('R');}
}
makeJar.dependsOn(clearJar, build)

注意:

以上配置信息要与 android {…….} 配置的脚本成平级关系。

其中 _BASENAME = "TestJar"; _VERSION = "_V1.0"; 是定义生成 jar 包的名字为TestJar_V1.0.jar。

配置好以后就可以编译jar包了,有两种方式:

方式 A :点击 Android Studio 右侧(一般在这个位置)的 Gradle 面板,在项目或者该类库的目录中找到 Tasks -> other -> makeJar 命令,双击这个makeJar之后等一会就会编译好jar包。  

打包成功后:在配置的指定目录下生成jar包

方式 B :通过 cmd 命令行,在项目根目录下,执行 gradlew makeJar 命令,看到编译完成的信息以后就OK了,也能生成一样的jar包,和直接使用①中的方式是等价的。  

注意:使用此方式前要配置好 gradle 的“ 环境变量 ”,否则直接在项目根目录下找不到这个命令。使用 cmd 比较费劲,不推荐。  

方式 C :在 Android Studio 终端窗口中输入 gradlew makeJar 命令。  

打包成功如下图:

打包成功后:在配置的指定目录下生成jar包

注意:

问题1:  

    

对于以上配置 form 默认 jar 包部分,在用目录是 from('build/intermediates/bundles/release/') ,注意粗体部分,最初我也是按照这个目录写的,确实没问题。但后来,也就是Android Studio 更新到2.3以后,发现这个目录没有了,取而代之的是 default 和 debug 目录,debug目录之前也是有的,没有变化,只是原来的release目录被现在的default目录代替了。这导致我后来生成jar包的时候始终没有找到jar包,报上图所示错误。

原因就是没有了 release 目录,找不到默认的 classes.jar 文件,所以也就没有生成自定义名字的jar包,改为 default 或者 debug 目录以后就能正常生成jar包了,要注意这点变化。

问题2

Execution failed for task ':mylibrary:lint'.
> Lint found errors in the project; aborting build.

解决在 build.gradle 文件中,加入下面的代码块(注意代码块所在的位置),重新执行 gradlew makeJar 命令。

android {
  lintOptions {
    abortOnError false
  }
  ...
}

最后注意:

将被嵌入的应用打包成 jar 包,但是这样的方式有局限性,无法将被嵌入的应用所使用的资源性文件一起打包。下面介绍 aar 打包方式。

三、直接使用 aar 包 

将被嵌入的应用打包成 aar 包,这也是 Android Studio 的一种新特性,可以将应用所使用的资源性文件一起打包。编译即可打包生成 aar 包,而且也不用担心漏掉资源问题。

如果Project 中 Module 是一个应用,则在 Module 的 build.gradle 文件中定义属性为:apply plugin: 'com.android.application';而如果 Mudule 是一个被引用的依赖 lib 库的话,则在 Module 的 build.gradle 文件中定义属性为:apply plugin: 'com.android.library;所以当我们将应用 Module 打包出 aar 文件的时候,需要修改类型属性。正常情况下,直接重新编译 Module,生成的 aar 包在 Module 根目录的/build/outputs/aar/,如下图:

  

下面介绍将 aar 包添加到其他 Android 工程:

首先,将 aar 包复制到 libs 目录下  

其次,配置build.gradle文件:

A 在 android 中加入,如下:

repositories {
  flatDir {
    dirs 'libs'
  }
} 

B 在 dependencies中加入 compile(name:lib-zxing-release', ext:'aar')

完整 build.gradle 文件如下:

apply plugin: 'com.android.application' 

android {
  ...
  repositories {
    flatDir {
      dirs 'libs'
    }
  }
} 

dependencies {
  ...
  compile(name:'lib-zxing-release', ext:'aar')
}

最后,重新编译Rebuild的以下工程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 如何利用Android Studio将moudle变成jar示例详解

    前言 本文主要给大家介绍的是关于利用Android Studio将moudle变成jar的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 方法如下: 1.在moudle中的build.gradle文件中添加如下代码:(和android.dependencies标签同级) task makeJar(type: Copy) { delete 'build/libs/test.jar' from('build/intermediates/bundles/release/')

  • Android Studio 在项目中引用第三方jar包的方法

    在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets { main { jniLibs.srcDirs = ['libs'] } } 点击[Sync Now],会生成jniLibs文件夹 找到jniLibs文件夹对应的实体目录,把需要用到的jar包放到该目录下 在build.gradle文件中,在dependencies模块,添加以下代码: compile files

  • AndroidStudio项目打包成jar的简单方法

    首先备注一下 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件). 什么是AAR,与JAR区别 *.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件. *.aar:包含所有资源,class以及res资源文件全部包含 Android Studio 如何打JAR包 在eclipse中我们知道如何将一个项目导出为jar包,供

  • Android Studio打包jar及aar包的方法

    Android Studio 打包 jar 及 aar 包 创建工程 New -> Module -> Library 在gradle文件头添加 apply plugin: 'com.android.library' 打包模块 在库工程的 build.gradle 中最下方加入如下配置示例: // 删除已存在的 Jar 包 task deleteOldJar(type: Delete) { delete 'build/libs/analytics.jar' } // 创建 Jar 包 task

  • Android studio中生成引用.aar和.jar的方法详解

    在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件. 分别存储位置: *.jar:库 /build/intermediates/bundles/debug(release)/classes.jar *.aar:库 /build/outputs/aar/libraryname.aar .jar 与 .aar的区别 从名称上来讲,一个是java application resource:一个是android application resource: 那

  • 详解Android Studio如何导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目的目录结构如下: XMPP$ ls app build.gradle gradlew import-summary.txt XMPP.iml build gradle gradlew.bat local.properties settings.gradle 将第三方源码qqEmoji-lib拷到此目

  • Android Studio如何快速导入jar和.so文件

    导入jar 将jar文件放在libs文件夹中,右键该jar,点击选项 add as library,点击确认,搞定. 添加so文件 1.在src/main中添加 jniLibs文件夹 ,把.so复制进去 2.将so文件放入libs文件夹中,在gradle中添加 sourceSets{ main { jniLibs.srcDirs = ['libs'] } } 具体位置: apply plugin: 'com.android.application' apply plugin: 'kotlin-a

  • 详解Android studio如何导入jar包方法

    下面我就总结一下Android studio大家在导入jar包时遇到的一些问题和解决方法: 1,首先先说一下怎么在AS 中找到sdk,jdk,ndk的安装路径,可能一部分人一开始找不到,下面贴出方法: Android studio 中更改sdk的路径,如下图,在右边红色方框中更改sdk的路径 还有一种更好的方式可以把sdk,jdk,ndk的路径全部找到,首先File---Other Settings---Default Project Structure...,打开如下图界面,从红方框处即可直接

  • Android Studio 生成自定义jar包的步骤详解

    想要将一个项目导出为jar包,供其它项目使用,在eclipse中可以直接导出该项目为jar包,而 在AS中可以通过修改gradle才处理. 接下来就介绍下具体的步骤: 1.新建一个项目,项目名随意,eg:MakeJarApplication,在项目中新建一个module类型为android-library ,命名为testLibrary.如图: 项目结构图 2.让app依赖这个库,在app下的build.gradle文件中添加compile project(':testlibrary') dep

  • Android studio利用gradle打jar包并混淆的方法详解

    本文主要介绍了Android studio利用gradle打jar包并混淆的方法,下面话不多说,来看看详细的介绍吧. 首先打jar包的配置很简单,使用jar的task,可以参考gradle官方文档,具体代码如下: task buildJar(type: Jar, dependsOn: ['assembleRelease']) { destinationDir = file('build/outputs/jar/') appendix = "" baseName = "&quo

随机推荐