android studio 生成aar和引用aar

以android studio 2.0正式版为例android

1.aar包是Android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其余android studio 工程后,其余工程能够方便引用源码和资源文件编程

2.生成aar包步骤:app

2.1用android studio打开一个工程,而后新建一个Module,新建Module时候选择Android Library,后面按新建普通工程操做maven

 

 

2.2新建Module 类型为android Library 后以下图所示gradle

 

2.3在新建的Module中编写完代码后,接下来编译整个工程后就会自动生成aar包,选中本身建立好的Module(个人就是paysdk)ui

点击菜单栏 Build里面的Make Module ‘xxx’  以下图:spa

 

2.4编译完成以后会在Module的build-->outputs-->aar-->xxxxx.aar 如图:.net

 

 

3.其余androidstudio工程引用aar包debug

3.1将aar包复制到libs目录下 以下图:
3d

 

 

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

相关文章
相关标签/搜索