AndroidStudio生成aar包和如何使用aar包
我用的是android studio 2.0正式版
1、简介
aar包是Android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件
2、生成aar包步骤
2.1、用android studio打开一个工程,然后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操作
2.2、新建Module 类型为android Library 后如下图所示
2.3、在新建的Module中编写完代码后,接下来编译整个工程后就会自动生成aar包,选中自己创建好的Module(我的就是paysdk)
点击菜单栏 Build里面的Make Module ‘xxx’ 如下图:
2.4、编译完成之后会在Module的build-->outputs-->aar-->xxxxx.aar 如图:
3、其他androidstudio工程引用aar包
3.1、将aar包复制到libs目录下 如下图:
3.2、配置build.gradle文件:
加入
repositories {
flatDir {
dirs 'libs'
}
compile(name:'paysdk-debug', ext:'aar') name后面是自己的aar的名字
完整的配置文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.umpay.paydemo"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.3.0'
compile(name: 'paysdk-debug', ext: 'aar')
}
3.3、最后一个同步gradle
在这里说一下发布一个aar的注意事项:
修改Module(也就是生成aar的工程,我的是paysdk)里面的代码的时候,重新编译好之后,需要把引用aar项目当中的aar文件删掉,并且也需要删除掉build--intermediates--exploded-aar--paysdk,完了在重新同步
1 、要尽量避免定义内部接口,
这其实是一个编程习惯, 接口interface最好是独立定义, 避免定义在类的内部.
因为当你发布aar时, 内部的接口在混淆后会独立成一个外部的接口Outer$InnerInterface.
然后麻烦来了, 别人在实现这个类的时候必须也写成XXX implement Outer$InnerInterface{}的形式. 否则是找不到这个类的.
想写成XXX implement Outer.InnerInterface{}是不行的, 因为在Outer里没有这个InnerInterface的定义, 在混淆后, 所有的内部类都被改写成了形如Outer$Inner的外部类了. 包括interface, enum, 等等.
更糟糕的是, 你很可能只是发布项目的一部分代码作为aar, 那你的项目内已经引用的Outer.Inner的类或接口都必须写成Outer$Inner的形式, 否则编译不过, 否则运行时找不到类. 所以, 为了以后不必要的麻烦, 尽量避免使用内部类, 内部接口,
除非你确认不会混淆代码, 或者会将所有定义和调用都参与混淆.
2、 使用maven发布需要将所有依赖都发布到maven上
如果你发布多个aar, 每个aar互相依赖, 那么你需要将这些依赖都以maven的形式定义, 否则会在编译时, maven解析某个aar的pom时会报空指针异常.
maven的形式定义:
apply plugin: 'maven'
compile 'com.nineoldandroids:library:2.4.0+'
3、 res内定义的属性或者名称, 都应当加上前缀
你的aar里定义资源文件是很正常的事, 资源文件很有可能和别人的资源重名, 而悲剧的是, 别人很有可能是引用了另外一个aar导致与你重名. 他无法修改那个aar的资源名, 就像他不能修改你的aar资源名一样. 为了避免这种尴尬, 最好在定义的资源程前加上一个前缀, 比如你的模块简写,商标简写等等. 避免冲突。
4、补充aar和jar的区别:
无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Java Archive,即java归档文件。
在用AS的过程中,你会发现有aar这么个东西,经查阅资料了解到,aar是android归档文件,我想全称应该是:Android Archive。
他们两个有什么区别呢?
个人理解:
jar是java文件编译后的class文件压缩包。
aar是android module中所有resource文件和编译后的java文件的总压缩包。
区别在于:aar除了包含class文件,还包含resource文件。
在Android Studio中如何引入aar文件呢?
拿RecyclerView的aar文件为例。
1、找到aar文件:..\Android_SDK_Windows\extras\android\m2repository\com\android\support\recyclerview-v7\24.0.0\recyclerview-v7-24.0.0.aar
copy到Android Studio项目中的libs目录下。
2、然后在Android Studio对应的module的build.gradle文件中输入一下内容:
1 2 3 4 5 6 7 8 9 |
|
3、然后重新build下整个项目即可。
在Android Studio中如何把某一个module导出为aar文件呢?
以testlibrary为例:
1、执行对应module的assembleRelease命令:
上图切记,如果是项目的主module,即app,则生成的是apk包。
2、在对应module的build\outputs\aar\目录下即是:
如果想把aar文件导入到Eclipse中呢?
如图:把aar文件用WinRAR等压缩软件打开后,会发现是上面的结构,classes.jar即为class文件的jar包,其他的为android相关的资源文件。
如果你想把导入到Eclipse中,就需要把这里面的所有资源和class文件转换成一个library工程了。
用Eclipse新建一个library工程,导入res资源、清单文件和发编译后的java文件。
更多推荐
所有评论(0)