Android插件化开发之OpenAtlas插件适配

来源:互联网 发布:社会工程学知乎 编辑:程序博客网 时间:2024/05/17 00:09

前三篇文章,介绍了OpenAtlas的一些基本用法以及patch的aapt的编译方法。
- Android插件化开发之Atlas初体验
- Android插件化开发之Atlas生成插件信息列表
- Android插件化开发之Atlas资源打包工具补丁aapt的编译

OpenAtlas的原则就是避免引入冗余的库。也就是宿主中提供了第三方库后,插件中就不要再引入该库,编译的时候以provided形式提供即可。最简单的例子就是v4,v7兼容库,应该避免引入。为了让我妈的插件脱离OpenAtlas也能独立运行,但是编译成插件又不用过多的修改代码,我们使用android studio的productFlavors进行适配。

在适配前,一切开发都是按照正常的程序开发流程进行。开发完毕后,我们需要修改build.gradle文件进行适配。首先我们要做的就是增加productFlavors ,其中alone就是代表能独立运行的,openatlas就代表是插件。

 productFlavors {        alone{        }        openatlas {        }    }

而我们的插件, versionName后要加入0x10-0x7f之间的值进行资源分区。之前的做法是直接修改该属性,现在我们在productFlavors 中重写改属性完成资源分区,就像这样子。

 productFlavors {        alone{        }        openatlas {            versionName "1.00x21"        }    }

而对应的依赖,当我们编译alone时,则要把依赖的库打包进去,但是当我们编译openatlas时,则只是编译时提供,不会打包进去,我们使用provided+Flavor达到目的,拿我们之前的扫描二维码的项目举例。

dependencies {    compile  files('libs/ZXing-Core-3_2.jar')    aloneCompile 'com.android.support:appcompat-v7:22.2.1'    openatlasProvided files('libs/android-support-v4.jar')    openatlasProvided files('libs/android-support-v7-appcompat.jar')}

但是这样做有一个问题,就是provided方式只支持jar,但是如果我们使用兼容包的AppCompatActivity类,难免会用到资源文件,这时候,我们编译openatlas的Flavor时,就需要将这些资源文件剔除。

至于aar中,如何提取jar,其实很简单,把aar解压了,把里面的classes.jar和lib目录中的jar提取处理就可以了。

一个最简单的例子就是主题文件。里面引用了资源文件Theme.AppCompat.Light.NoActionBar,我们要将其剔除。做法也很简单,在src目录下新建openatlas目录,并在里面新建values目录,在values下新建styles.xml文件,在里面加入,注意,插件的主题文件在宿主中要存在,最简单的做法就是宿主和插件的主题名字相同。

<resources>    <style name="AppTheme" parent="">    </style></resources>

我们看到我们就是简单的将父类变成空了。这样编译打包的时候就不会报错了。android studio会对我们的文件自动进行合并。其他资源问题也进行类似的处理。之后就是插件的生成。插件信息列表的生成,引入插件等等操作了。和之前的文章类似,就不再累赘了。

而插件的生成记得使用Flavor为openatlas生成,在android studio左边点击build variants进行修改即可

这里写图片描述

源码下载
http://download.csdn.net/detail/sbsujjbcy/9027641

2 1
原创粉丝点击