怎么改变android studio中库的aar文件的输出目录?
2016-06-07 · 知道合伙人教育行家
在android studio中,有两种方式:
一种是jar包,一种是带资源文件的aar包,
jar: 只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。
aar: 包含jar包和资源文件,如图片等所有res中的文件
这里将着重介绍如何使用本地的aar包
新建一个Demo项目
新建好的项目结构如下图:
其中app是我们的主要module,
libs下存放外部的library
build.gradle是配置App module的,接下来主要对其操作。
复制外部aar包到libs目录下。
修改build.gradle 配置文件:
1:添加
repositories flatDir { dirs 'libs' }}
这个是添加一个本地仓库,并把libs目录作为仓库的地址。
2:修改dependencies:
添加一行:
compile(name:'usericonchooserutil', ext:'aar')
其中name就是libs目录下usericonchooserutil.aar文件名称,
ext,就是usericonchooserutil.aar的扩展名
重新编译项目:
从工具栏依次选择:"Build"-->"rebuild project"
编译完成后,在app/build/intermediates/exploded-aar/ a就可以看见我们引用的aar包内容了,其中jar目录下是jar文件,res下是我们aar包里的资源文件。
这个时候我们就可以在项目中使用第三包的类了,如下图:
设置Android Studio通过Gradle生成的AAR文件的位置路径
最近在写一个SDK,随着SDK依赖的库越来越多,生成的AAR文件也越来越多,由于SDK功能过多,不能把多个AAR合并成一个,所以每次提供时都需要把多个AAR文件提供出来。
AAR默认生成路径是[\build\outputs\aar],每次都要一个个项目的找出来然后复制,嫌太麻烦了,写了个手动拷贝脚本,包含:删除原AAR、编译生成AAR、把AAR拷贝至指定目录。
Gradle语法之前从没关心过,这次也当熟悉下,task肯定还有很多需要提升的地方,欢迎提出来。
用法:
复制以下代码片段到项目所在的build.gradle文件中,在Android Studio右边的Gradle里面点开Tasks,Other里找到aarRelease,双击即可,记得把里面的项目路径改为自己的实际路径,这里只提供一个思路而已。
// ---------- 编译并发布AAR (删除旧AAR,编译新AAR,拷贝新AAR至同一目录) ----------
task aarRelease(type: Copy) {
// 任务开始
println "----------> AAR Release Task Start <----------"
// 根路径 如:E:\03_AndroidClient\other\IM_SDK\trunk\IM_SDK
def rootPath = rootProject.rootDir.path
// AAR所在的编译路径
def buildPath = "/build/outputs/aar"
// AAR输出路径
def aarOutPath = rootPath + "/aar_release"
// IM主SDK
def imPath = rootPath + "/im-sdk" + buildPath + "/im-sdk-release.aar"
// IM依赖的 百度地图SDK
def baiduLbsPath = rootPath + "/im-sdk-baidu-lbs" + buildPath + "/im-sdk-baidu-lbs-release.aar"
// IM依赖的 百度鹰眼SDK
def baiduTracePath = rootPath + "/im-sdk-baidu-trace" + buildPath + "/im-sdk-baidu-trace-release.aar"
// IM依赖的 直播SDK
def livePath = rootPath + "/im-sdk-live" + buildPath + "/im-sdk-live-release.aar"
// IM依赖的 图像选择库SDK
def matissePath = rootPath + "/im-sdk-matisse" + buildPath + "/im-sdk-matisse-release.aar"
// 封装数组
def modulePaths = [imPath, baiduLbsPath, baiduTracePath, livePath, matissePath]
// 删除AAR输出目录
println "Delete -> " + aarOutPath
delete aarOutPath
// 循环删除各个AAR编译目录
for (path in modulePaths) {
println "Delete -> " + path
delete path
}
// 执行编译AAR脚本(原生脚本)
dependsOn 'assembleRelease'
// 循环拷贝AAR到ARR输出目录
for (path in modulePaths) {
// 显示开始拷贝
println "-> Start of current copy <-"
// 当前目录
println "From : " + path
from path
// 拷贝至 aarOutPath
println "Into : " + aarOutPath
into aarOutPath;
// 显示当前拷贝结束
println "-> End of current copy <-"
}
// 任务结束
println "----------> AAR Release Task End <----------"
}