最近项目中使用了aar,网上介绍的aar的使用方法都是最基本的使用方法,自己在实际使用的时候遇到一些问题,google,百度都无果,后来自己摸索出来了,记录一下。
最基本的用法:
一 、aar的生成:
1.生成一个library类型的mould.
2.执行 ./gradlew assembleRelease,然后aar文件生成在build/outputs/aar里面
二 、aar文件的引用:
1.在build.gradle文件的android{}里面加入
repositories {
flatDir {
dirs 'libs' // this way we can find the .aar file in libs folder 到libs文件夹下寻找.aar包
}
}
2.在dependencies {}里面加入:
compile(name:'aartest-debug', ext:'aar')
name后面是aar的name,这里我的aar名字叫aartest-debug.aar ,去后缀名
这样你就可以应用aar里面的类和方法了。是不是so easy.
三、自己遇到的坑:
上述这些也都是网上大多数介绍的aar的生成与引用方法。在我们的项目里面,项目结构是十分复杂的。我们有个libray的mould ,暂且叫mould useaartest吧。mould useaartest里面主要是实现了某一功能的一个独立的模块,作为一个library让其他mould引用的。该模块的实现现在需要依赖另一个aar模块,起初我按照网上介绍的方法即上述的2步在mould A里面实行。结果一直报找不到aar文件。郁闷至极。这是为啥呢。在非libray的mould里面按照上述2步就可以成功。但我们的aar必须在作为library的mould A里面引用实现。后来几经辗转,想到了,我将aar放到一个单独的libray mould里面,是不是可行呢,后来一试,果然可以。完美通过,好开心。
现在目录结构是这样的。比如我们在mould useaartest里面需要使用的aar叫aartest-debug.aar,单独建的存放该aar文件的library类型的mould叫originaarforuse,mould useaartest还是叫mould useaartest,主入口mould叫mould app ,
则存放aar文件的library mould 的build.gradle 文件啥都不用该,其仅仅起了一个存放aar文件的作用(不单独建个library mould 放它还不行,如上所述,一直报找不到),mould useaartest的build.gradle关于aar引入的实现如下:
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
repositories {
flatDir {
dirs project(':originaarforuse').file('libs') // this way we can find the .aar file in libs folder 到libs文件夹下寻找.aar包
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile(name: 'aartest-debug', ext: 'aar')
}
主mould app 的build.gradle文件就不贴了,主要是在android{}里面跟上面的一样,加了
repositories {
flatDir {
dirs project(':originaarforuse').file('libs') // this way we can find the .aar file in libs folder 到libs文件夹下寻找.aar包
}
}
注意这个一定要加否则找不到aar文件。dependencies里面加了对mould useaartest的依赖。如此在mould app和mould useaartest就都能引用aar里面的类和方法了。欧耶!so great!