我们在日常开发中经常会引用一些第三方的库文件,提高我们的开发效率,那你知道如何创建库文件吗?
还有一种场景,同时有几个项目,但是需要接入同一个功能模块,当然可以将功能模块开发成组件,但是这个成本有点高,难度也大考虑的问题多。那么开发成一个library库文件就成了我们的首选。然后只需要copy到要接入的项目当中,然后简单的调用,配置之后就可以接入该功能模块了。
最常见的一种场景就是,主工程的主Activity里面有几个fragment,每个fragment代表一种功能模块,这时我们想把这个功能模块抽离出来做成一个library库文件,这样其他功能中也可以引入这个功能模块了。
我之前看到有人问MainActivity中有几个fragment怎样抽离fragment中的功能,然后接入其他工程。其实和你在一个工程中开发是一样的,你把这个fragment抽离到library中,然后在需要引用的工程中直接new它的对象,让他显示在你的工程中就可以了。这样fragment就作为这个功能库的入口,点击之后,然后就进入到了这个library中去执行自己的功能逻辑了。
进入正题,5步教会你如何把功能模块提取成一个library库文件
1.创建一个library库
步骤:File->New->New Module
选择Android Library > Next >填库文件名称和创建项目过程是一样的
恭喜你,已经轻松闯过第一关,得到技能:创建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中复制一份。其他的都剪切过去。
4.抽离功能模块(这一步是最难的,也是这一关的大BOSS,要做好心理准备,会遇到各种各样的错误)
我们一般开发的时候都会封装一些基类,还有一些工具类,这里都要复制到library中去。复制过去先修改各种各样的错误,一般都是R文件路径的错误,基类和工具类都没有错误之后。
开始抽离具体的功能模块,剪切过去之后,就是各种改改改,大部分都是导包错误,因为路径变了,删除之前的导入正确的就可以了。
还有其他各种错误,就要你具体问题具体对待了。都没有错之后,你是不是很开心了,大功告成了。你就可以在你的主工程或者其他项目中引用这个功能库了,创建它里面的对象。
5.这是最重要的最后一步,在清单文件中,注册library中的activity,service等四大组件
切记,一定要注册,然后填写完整的路径。否则你去启动library库中的activity等四大组件,会报错找不到。
终于通关了,赶快去实践吧。学会了武功心法,还要实战,才能学以致用!!!
遇到的问题:
library中不能用butterknife,需要用最传统的findViewById初始化控件。听过在butterknife8.4.0的版本可以了,你可以试下。
我的微博@背包客孔明先生