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

Android  2020年6月1日 pm12:23发布5年前 (2020)更新 城堡大人
121 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、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

[摘]Java中String首字母大写方法

摘抄于《Java中String首字母大写方法》,最近自己也写过,使用的很普通的方法。传统思路是:先将String 的首字母单独接取下来转成大写,然后再拼接上剩余字符串。public String upperCase(String str) { return str.substring...

杨绛:喝茶

曾听人讲洋话,说西洋人喝茶,把茶叶加水煮沸,滤去茶汁,单吃茶叶,吃了咂舌道:“好是好,可惜苦些。”新近看到一本美国人做的茶考,原来这是事实。茶叶初到英国,英国人不知怎么吃法,的确吃茶叶渣子,还拌些黄油和盐,敷在面包上同吃。什么妙味,简直不敢尝试。以后他们把茶当药,治伤风,清肠胃。不久,喝茶之风大行,...

git branch的使用记录

前言查看分支,切换分支等简单记录正文查看分支git branch -a查看当前的本地分支与远程分支的关联关系git branch -vv切换分支切换到xxx分支git checkout xxxx删除分支git branch -D xxx提交分支git push origi...

王小波:用一生来学习艺术

我念过文科,也念过理科。在课堂上听老师提到艺术这个词,还是理科的老师次数更多:化学老师说,做实验有实验艺术;计算机老师说,编程序有编程艺术。老师们说,怎么做对是科学,怎么做好则是艺术;前者有判断真伪的法则,后者则没有;艺术的真谛就是要叫人感到好,甚至是完美无缺;传授科学知识就是告诉你这些法则,而艺术...

Android机型适配相关摘抄

前言由于Android分辨多样,在做适配时总感觉困惑,怎么配置?(哈哈哈,之前项目一直都是一个分辨率的,不用做兼容,不同客户需求不一样)6个主流分辨率:800480、480320、1280720、854480、960540、19201080因此,摘抄如下内容。正文屏幕相关概念屏幕尺寸、...

周国平:我们都误解了幸福的含义

什么是幸福?1)幸福是人的一切行为的终极目的亚里士多德语。原话:幸福是人的一切行为的终极目的,我们永远只是因为它本身而选择它,正是为了它,所有的人才做其他事情。表达三个意思:一、幸福是人人都想要的,没有人不想要幸福;二、幸福本身是好东西,我们是因为它本身而要它的;三、只有幸福是终极目的,别的一切...