教你如何将工程中的一个功能模块提取成library库文件,供其他工程轻松接入,只需简单5步

我们在日常开发中经常会引用一些第三方的库文件,提高我们的开发效率,那你知道如何创建库文件吗?

还有一种场景,同时有几个项目,但是需要接入同一个功能模块,当然可以将功能模块开发成组件,但是这个成本有点高,难度也大考虑的问题多。那么开发成一个library库文件就成了我们的首选。然后只需要copy到要接入的项目当中,然后简单的调用,配置之后就可以接入该功能模块了。

最常见的一种场景就是,主工程的主Activity里面有几个fragment,每个fragment代表一种功能模块,这时我们想把这个功能模块抽离出来做成一个library库文件,这样其他功能中也可以引入这个功能模块了。

我之前看到有人问MainActivity中有几个fragment怎样抽离fragment中的功能,然后接入其他工程。其实和你在一个工程中开发是一样的,你把这个fragment抽离到library中,然后在需要引用的工程中直接new它的对象,让他显示在你的工程中就可以了。这样fragment就作为这个功能库的入口,点击之后,然后就进入到了这个library中去执行自己的功能逻辑了。

进入正题,5步教会你如何把功能模块提取成一个library库文件

1.创建一个library库
步骤:File->New->New Module

教你如何将工程中的一个功能模块提取成library库文件,供其他工程轻松接入,只需简单5步_第1张图片

选择Android Library > Next >填库文件名称和创建项目过程是一样的

教你如何将工程中的一个功能模块提取成library库文件,供其他工程轻松接入,只需简单5步_第2张图片

恭喜你,已经轻松闯过第一关,得到技能:创建library库文件,就是这么简单。

2.配置主工程和刚才创建的library的build.gradle

步骤:打开主工程的build.gradle文件,将dependencies {}中引用的全部移到library的build.gradle文件中,然后在主工程的build.gradle中引用library,这样主工程就引用了library中的所有文件。

主工程引用library库的代码如下:

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':library')//引用library库
}

简单吗?简直不费吹灰之力,你就又过了一关,玩游戏不都这样,开始简单,中间难,后面就无敌了。过关!!!

3.将主工程中的资源文件全部移到library中

res下的,lib下的,assets下的都剪切过去,当然如果你能分的请哪些是这个库文件用的资源的话也可以分开,项目大了,你也不知道哪些用得上,哪些用不上,所以我就直接全部移过去。一般我会在主工程保留layout文件夹,在library中复制一份。其他的都剪切过去。

教你如何将工程中的一个功能模块提取成library库文件,供其他工程轻松接入,只需简单5步_第3张图片

4.抽离功能模块(这一步是最难的,也是这一关的大BOSS,要做好心理准备,会遇到各种各样的错误)

我们一般开发的时候都会封装一些基类,还有一些工具类,这里都要复制到library中去。复制过去先修改各种各样的错误,一般都是R文件路径的错误,基类和工具类都没有错误之后。

开始抽离具体的功能模块,剪切过去之后,就是各种改改改,大部分都是导包错误,因为路径变了,删除之前的导入正确的就可以了。

还有其他各种错误,就要你具体问题具体对待了。都没有错之后,你是不是很开心了,大功告成了。你就可以在你的主工程或者其他项目中引用这个功能库了,创建它里面的对象。

5.这是最重要的最后一步,在清单文件中,注册library中的activity,service等四大组件

切记,一定要注册,然后填写完整的路径。否则你去启动library库中的activity等四大组件,会报错找不到。

终于通关了,赶快去实践吧。学会了武功心法,还要实战,才能学以致用!!!

遇到的问题:

library中不能用butterknife,需要用最传统的findViewById初始化控件。听过在butterknife8.4.0的版本可以了,你可以试下。

我的微博@背包客孔明先生

你可能感兴趣的:(Android中级篇)