在日常开发中,难免会遇到sdk的开发任务,而sdk的开发主要又有两种情况(至少目前自己的经历是这样),即打包的sdk中只有Java文件或者打包的sdk中既有Java文件又有资源文件,本篇博客将分这辆方面来说名如何使用Android studio打jar包。
目录
只含有java文件的jar包
1.这里首先在Android studio中右键app或者工程-->new-->Modult-->Android Library,之后如下图:
2.给app添加testLib的依赖关系:右键app-->open module settings-->Dependencies-->+号(选择Modult dependency)-->选择testlib
3.在testlib中添加编写相应的逻辑代码。
4.完成后编译app,编译通过之后会在testlib/build/intermediates/intermediate-jars目录下会有debug和release两个文件夹(根据你app编译时候选择的是release还是debug可能只有一个),点开对应文件夹会看到classes.jar文件,其实这个jar包就是我们的testlib的jar形式。
注意:在网上很多其他教程指出的classes.jar的目录是build/intermediates/bundles/下面但是我测试发现3.0之后的studio都没有这个文件夹,所以如果有同学找不到我说的地址可以按照这个来尝试。
至此就可以拿到其他项目里面使用的,如果需要添加混淆可以参考我的另一篇博客关于proguard混淆的一份总结。
有些同学可能觉得这个路径不太好找,这里提供一段gradle脚本,编译后自动对我们指定目录下的classes.jar文件进行copy和移动重命名。(在testlib的build.gradle文件中最外层添加如下task)
task makeJar(type: Copy) {
//删除build/libs/目录中存在的jar
delete 'build/libs/testlib.jar'
//设置拷贝的文件目录
from('build/intermediates/intermediate-jars/debug/')
//copy后jar包的文件目录
into('build/libs/')
//include ,exclude参数来设置过滤
//(我们只关心classes.jar这个文件)
include('classes.jar')
//重命名
rename ('classes.jar', 'testlib.jar')
}
makeJar.dependsOn(build)
然后在Terminal中执行gradlew makeJar(Windows)或者./gradlew makeJar(mac)即可在build/libs下生成testlib.jar
含有资源和布局文件的jar
1.这里首先在Android studio中右键app或者工程-->new-->Modult-->Android Library,之后如下图:
2.给app添加testLib的依赖关系:右键app-->open module settings-->Dependencies-->+号(选择Modult dependency)-->选择testlib
3.在testlib中添加编写相应的逻辑代码。
4.完成后编译app,编译通过之后会在testlib/build/outputs/aar目录下会有testlib-release.aar和testlib-debug.aar文件(根据你app编译时候选择的是release还是debug可能只有一个),将这个aar文件导出给其他应用使用。
aar包的使用
1.在app的libs目录下添加aar包
2.在app的build.gradle中的android标签中添加:
repositories {
flatDir {
dirs 'libs'
}
}
3.添加aar依赖
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'aar名字', ext: 'aar')
}
当一个library类型的module需要引用aar文件时:
1.先在该library中按照上面123的代码,在library的module下的bulid.gradle中配置
2.任何依赖此library的module必须声明在它的build.gradle声明此 aar 的 lib 所在的位置,这个位置根据文件路径所确定。
android{ //android节点下配置
repositories {
flatDir {
dirs 'libs', '../../../../library_module/libs'
}
}
}
3.配置完②步骤后,还要在project的build.gradle文件中配置,如下
allprojects {
repositories {
jcenter()
flatDir {
dirs '../../../library_module/libs'
}
}
}
注意:dirs 所指示的是文件路径,所以针对不同的位置配置,“../../../library_module/libs” 所代表的路径也是不一致的。
参考资料: