Android aar类库使用中的那些坑

作者: yftx_ | 来源:发表于2016-11-26 14:46 被阅读3404次

    我们一般都是使用别人写的aar,很少会自己写,实际上将复用代码打包成aar发布还是很有必要的。
    本篇文章主要记录在封装aar过程中遇到的一些坑。


    官方文档

    官方文档连接
    简单的东西不介绍,自己看吧,重点需要注意的一些点。

    私有资源

    默认aar的所有资源都是pubic的,如果希望指定某些资源是private,
    需要通过在/res/values/public.xml中指定对外提供的public资源。
    这样未指定的资源,外部如果使用使用到了私有资源,会在编译时,在lint中提示。
    参考资料

    resource合并

    1. 构建工具会将lib中的resource合并到app中。如果app同lib中有相同ID的资源,
      则只保留app中的资源。
    2. 如果依赖的多个aar中包括相同的资源,则会根据依赖列表中,lib的位置顺序来使用资源。
      比如依赖A,B两个lib,A在依赖列表的第1行,B在依赖列表的第2行。
      则会使用A中的资源,而不使用B中的资源。
      为了避免资源冲突,对lib中的resource使用独特的前缀,避免资源冲突

    raw assets

    lib不能包含assets目录。如果需要使用assets中的资源,需要在app中添加相关资源。
    

    minSdkVersion

    lib中的是有minSdkVersion字段的,使用该lib的app,的minSdkVersion必须要大于等于lib中的定义。
    

    R文件

    每个aar都会对应自己的R文件。规则为package name + R.class

    混淆

    aar可以将proguar配置文件包含到包中,需要在lib的build.gradle中添加如下配置

    android {
        defaultConfig {
    //保证app使用lib时,会自动将该proguard文件添加到本身的proguard规则中
            consumerProguardFiles 'lib-proguard-rules.txt'
        }
    }
    

    添加该配置后打出来的aar包会包括proguard.txt.注意无论原proguard文件的名字是什么,
    打成aar后,aar包中的名字都是proguar.txt.该配置会自动添加到app中,不需要app再手动添加混淆文件。

    多版本aar包

    指的是app在根据不同规则下,使用不同的aar包。
    比如debug版本app使用debug版本的aar,release版本app使用release版本的aar。
    debug,release只是两种预先定义的类型,我们可以自己添加新的构建类型。
    需要注意如果不指定使用何种规则的包,默认会使用release的aar包。
    如果需要实现该功能,需要在aar build.gradle中添加如下内容

    android {
        publishNonDefault true
    }
    

    在app build.gradle中按照如下规则配置

    dependencies {
        debugCompile project(path: ':library', configuration: 'debug')
        releaseCompile project(path: ':library', configuration: 'release')
    }
    

    上面的例子表示,debug版本的app使用debug的aar,release的app使用release的aar。
    需要注意的是,经过测试,使用分版本的方式指定aar build.gradle,在提交到nexus服务器之后,会导致app获取资源不对,比如,com.xxxxx.android:libxx:0.8 如果是从nexus获取,并且该aar在上传的时候添加了多版本支持,则app在获取该aar的时候会获取libxx.jar.而不是正常的获取,libxx.aar.
    查看nexus pom文件,也没区别,相应的groupId,artifactId跟正常的也没区别。
    只是对应的包会包含两个,分别为libxx-0.8-debug.aar和libxx-0.8-release.aar,
    而不使用该配置提交的包为libxx-0.8.aar.
    这是比较比奇葩的,也没有查到具体原因,如果知道的朋友,请留言告知下吧。


    Android交流qq群号 29552133
    微信交流群二维码

    微信

    相关文章

      网友评论

      • 唯笃:现在生成的aar都带上了-debug或-release后缀,要如何引用呢??如果只是groupId:artifactId:version@aar,会报找不到,因为我们的aar都是有后缀的,,

      本文标题:Android aar类库使用中的那些坑

      本文链接:https://www.haomeiwen.com/subject/naftdttx.html