Android Studio将lib项目打包成jar和aar

Android  2020年6月1日 pm12:23发布4年前 (2020)更新 91es.com站长
79 0 0

jar包和aar包的区别

  • jar包只包含class文件,不包含资源文件。
  • aar包包含class文件和资源文件。

aar生成及引用

Android Studio编译lib库会在build/outputs/aar目录生成aar,有两个一个debug一个release。(至于这两个区别,我没有深入,大小一样)

aar的使用需要一定的配置

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

}

dependencies {
    ...
    //Waterutils-release是lib库名
    implementation(name: 'Waterutils-release', ext: 'aar')
}

打包成jar

上面我们知道aar和jar区别是aar带有资源文件,因此比较大。有时候需要资源文件,但有时候只需要class文件。

因此,我们把lib库打包成jar。

PS:网上很多打包jar的配置都是对,但不同版本的Gradle生成classes.jar的目录不同。

比如:

  • Gradle 5.6.4 生成的classes.jar目录在[build/intermediates/aar_main_jar]中(一个debug一个release)。
  • Gradle 5.1.1 生成的classes.jar目录在[build/intermediates/packaged-classes/]。

所以,如果你的Gradle版本不同,需要的注意生成classes.jar在哪个位置。

而且,classes.jar就是lib库的jar,只是所有的lib编译后的名都是classes而已。

下面两个脚本只是改变了jar的名字或路径而已。

举例一(Gradle 5.6.4)

//指定jar名和版本
def jarName = "WaterUtils1.0"
//Copy类型
task makeJar(type: Copy) {
   //删除存在的
   delete 'build/libs/' + jarName + ".jar"
   //设置拷贝的文件
   from("build/intermediates/aar_main_jar/release")
   //打进jar包后的文件目录,将classes.jar放入build/libs/目录下
   into('build/libs/')
   //要打包的jar文件
   include('classes.jar')
   //重命名
   rename('classes.jar', jarName + ".jar")
}
makeJar.dependsOn(build)

举例二(Gradle 5.1.1)

task clearJar(type: Delete) {
    //删除指定目录的jar
    delete rootProject.file("WaterLib/WaterUtils1.jar")
}

task makeJar(type: Copy) {
    //这行表示要打包的文件的路径,根据下面的内容,其实是该路径下的classes.jar
    from('build/intermediates/packaged-classes/release/')
    //表示打包完毕后包的生成路径,也就是生成的包存在哪
    into(rootProject.file("WaterLib"))
    //这行只是将一些类打包了
    include('classes.jar')
    //重命名
    rename('classes.jar', 'WaterUtils1.jar')
}

makeJar.dependsOn(clearJar, build)

使用jar

dependencies {
    ....
    implementation files('libs/WaterUtils1.0.jar')
}

参考文章

 历史上的今天

  1. 2023: system.exit()的作用(0条评论)
  2. 2021: 纪伯伦:你的孩子其实不是你的孩子(0条评论)
  3. 2018: AsyncTask源码分析(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

Android状态栏之WiFiView

前言状态栏上使用,WifiView用于显示Wifi信号强度变化。记录于此,方便自己查阅。正文隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读

startService()源码分析

前言startService()源码分析之前Android 6.0是有简单分析过的,但太久了,而且记录也很粗糙,到现在也忘记得差不多了。最近抽空重新走一下,也算是自己的复习吧。这里看的是Android P的源代码。正文这里是Apk1去启动Apk2的服务(Apk2没有启动过)Intent...

余华:我接受命运,但怀疑生活

我们一边丧着,又一边燃着的马不停蹄。走着走着,时常忘了自己。有一天,突然停下回望,看到一个人,在“正确”的年纪娶了“合适”的女人,干着“稳定”的工作,过着“美满”的生活,咦,怎么是自己?我的笑容怎么那么客套?肢体怎么如此僵硬?噢,原来我的心在这里,不在那个自己的身体里。那个我,走了一条“约定俗成...

Android画中画新增自定义按键简介

前言Android 8.0 Oreo(API Level 26)允许活动启动画中画 Picture-in-picture(PIP)模式。PIP 是一种特殊类型的多窗口模式,主要用于视频播放。这次介绍是在画中画界面自定义按键。参考其他文章,记录于此,方便自己查阅。正文上一篇《Android...

[代码片段]Android像素转换工具类

前言移动项目需要根据设备进行适配,这个还是很有用的,摘抄于此,方便自己查阅。正文public class DensityUtil { public static int dip2px(float dpValue) { return (int) (dpValue * R...

Android中图片圆角或圆形记录

前言对图片进行圆角或圆形处理,这个在项目很常用,比如专辑图等。之前项目用过,但没有记录,今天有空就记录一下,方便自己查阅。正文本文记录一下圆形图片或对图片进行圆角处理。效果如图。隐藏内容!付费阅读后才能查看!¥3多个隐藏块只需支付一次付费阅读