前言
在Android开发过程中,不可避免的会使用到一些三方库,这些库多是为*.jar,*.so,*.aar类型的文件,其中so库多是为C文件打包行程的库,本文暂不做讨论;jar包和aar包我们都可以通过建立自己的module进行生成,本文着重说明这两种文件的区别及生成。
一、jar包和aar包含内容区别
1. jar
jar文件可以说是和客户端平台无关的文件,其只包含class文件与清单文件。
由于jar包内不包含图片这种资源文件,所以在打jar包时module里的res资源文件夹都是不会打进包里的,如果要引入资源,则需要配置assets文件夹,将资源放在assets文件夹里。
2. aar
aar文件和Android客户端平台紧密相连,是Android库项目的二进制归档文件,其包内不仅包含有class文件,也包括有资源文件。
二、打包方法区别
1. jar打包
Android Studio中可以很方便的通过Gradle生成jar包。
首先我们需要在module的build.gradle
文件里新定义一个jar包任务:
//task to export contents as jar
task exportJar(type: Copy) {
//删除原有jar包
delete 'build/libs/AndroidPlugin.jar'
//从build中查找jar包文件
from('build/intermediates/runtime_library_classes_jar/release/')
//copy到指定目录
into('build/libs/')
include('classes.jar')
///Rename the jar
rename('classes.jar', 'AndroidPlugin.jar')
}
exportJar.dependsOn(build)
这样的话就能够在Gradle中查看到任务:moduleName/Tasks/other
中查找到上述任务:
![](https://img.haomeiwen.com/i16647598/abf0e22d91ba8477.jpg)
执行上述任务,我们能够在在build/libs/
目录下找到jar包文件AndroidPlugin.jar
。
2.aar打包
aar包目录是:build/outputs/aar,,如下图:
![](https://img.haomeiwen.com/i16647598/72ea37291e27ca8f.png)
如果当前工程内没有build目录,可以在Gradle中执行当前module的assembleRelease构建生成release的aar包,如下图:
![](https://img.haomeiwen.com/i16647598/c6dfa17135b1a5dc.jpg)
三、引入区别
jar包和aar包引入我们在接入第三方SDK时经常能够遇到,在此简单记录一下常规引入方式:
1. jar包引入
我们可以将jar包文件放置在app的libs目录下,如下图:
![](https://img.haomeiwen.com/i16647598/6c0b160334f22054.jpg)
然后在module下的build.gradle
中设置如下配置:
android {
...
sourceSets {
main {
java.srcDirs = ['src/main/java']
jniLibs.srcDirs = ['libs']
assets.srcDirs = ['assets']
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
之后重新编译,如果编译后能够打开jar包,就是引入完成了,如上图。
2. aar包引入
aar包引入和jar包引入比较类似,同样是将包放在libs目录下:
![](https://img.haomeiwen.com/i16647598/714cc424b35d5410.jpg)
然后在module下的build.gradle
文件中添加如下配置:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation(name:'ttsLib-release', ext:'aar')
}
然后在进行重新编译,之后可以在lib目录下看到引入的包,这样就是引入完成了:
![](https://img.haomeiwen.com/i16647598/4d6d6bcb7ef42179.jpg)
其他问题
在jar包的生成中,由于我们是通过Gradle去进行构建生成的,但是Gradle生成jar包的位置各个版本并不完全一致,在书写脚本时最好不要直接copy代码,先在build文件目录中找一下你的jar包是否存在,及时更新路径。
附录记录下仓库上传配置,在module下的build.gradle
文件中添加如下配置:
uploadArchives {
repositories {
mavenDeployer {
repository(url: "") {
authentication(userName: "", password: "")
}
snapshotRepository(url: "") {
authentication(userName: "", password: "")
}
pom.groupId = "android.library"
pom.artifactId = "voice"
pom.version = "1.0.0"
pom.packaging = "aar"
}
}
}
然后添加对应的地址及身份校验,执行此任务即可。
总结
本文是对于Android中jar包和aar包的区别,打包及引入做一个简单记录。
网友评论