以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资源名一样. 为了避免这种尴尬, 最好在定义的资源程前加上一个前缀, 比如你的模块简写,商标简写等等. 避免冲突, 还能打个广告, 何乐而不为.

 

参考博客:http://blog.csdn.net/getchance/article/details/47257389,http://my.oschina.net/u/1393188/blog/492576?fromerr=GtSFp8Qa