前言
这两天看到一篇文章很火,详细见:http://stormzhang.com/android/2015/03/01/android-reference-local-aar/
我大概看了下,然后搜索了下相关资料,作者说的没有错,我很欣赏这种行为,其实是已经在Google上搜刮过了,然后进行总结写文章。就如作者说的,就算官网上对于aar的描述也是凤毛菱角。简单来讲,jar包中封装的大多是一些方法,但是aar其实就是一个完整的Android App,所以包括了所有的资源文件等,我们可以很好的使用已经封装好的一些风格,包括UI界面显示等。
感谢作者的文章,我也是看了之后想试试看例子,不过网上找了一圈,发现都是在Gradle正式release前的例子,所以就还是自给自足啦。
创建一个aar
既然我们要做,首先先创建一个aar包咯。本次的demo全部是本地化的引用。首先我们new一个新的Module出来。
我们新建了一个Android Library,我们从结构中可以看出和一个Android App的Project没有什么区别。
唯独的区别在于build.gradle,需要定义apply plugin: ‘com.android.library’,告诉studio这是一个library。定义如下:
apply plugin: ‘com.android.library’
android {
compileSdkVersion 22
buildToolsVersion “22.0.0”
defaultConfig {
minSdkVersion 10
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
}
我们现在来修改下我们的主方法,添加一个如下的方法(记得还是修改下主类名):
public static void DisPlayToast(Context context){
Toast.makeText(context,"this is aar toast",Toast.LENGTH_LONG).show();
}
接着我们就可以来编译啦。进入library,执行gradle assembleDebug,接着我们可以在~/AndroidLibrary2/mylibrary/build/outputs/aar/目录下找到我们编译好的aar文件。是不是很简单
本地加载aar
我们有了aar之后,将这个文件放入我们app工程的libs目录下,这样我们就可以进行调用啦。修改app的build.gradle如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.0"
defaultConfig {
applicationId "com.example.monkey.androidlibrary2"
minSdkVersion 17
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
flatDir {
dirs ‘libs’
}
mavenCentral()
mavenLocal()
}
dependencies {
compile(name:'mylibrary3-debug', ext:'aar') //这里我因为尝试了几次,所以都是数字编号了,大家可以无视
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
}
开始对app进行编译,这样的话工程会自动将这个aar文件解析出来。使用gradle assembleDebug。我们可以看到在/app/build/intermediates/exploded-aar/目录下已经有了我们增加的aar包的文件引用。如下
修改app代码如下
其实从maven和jcenter()上下载也是一个逻辑,没有什么太大区别。只不过貌似在Gradle 1.0之前本地引用是有bug的。
代码地址:https://github.com/monkeytest15/Gradle_aar/tree/master/AndroidLibrary2
后续
我发现我sdk更新的不完善,我表示我要回家更新完整之后再做后续的讨论了。