使用Android Studio生成类库

来源:互联网 发布:网络114黄页 编辑:程序博客网 时间:2024/06/05 18:55

有时需要对项目进行重构,将与业务无关的基础类移入到单独的类库中,即将项目结构变成下图所示的样子,业务类表示主项目,保持了对基础类库的引用:

这篇文章主要记录如何使用Android Studio生产类库。

假设我们现在已经有了一个名为LibTest的项目,其项目结构如下图所示:

这个项目中,目前只有一个app Module,其中MainActivity为业务类,LogTools为与业务无关的工具类。
假设MainActivity简单地调用了LogTools类中的方法,如下面的代码所示:

package stark.a.is.zhangjian.libtest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        LogTools.print("onCreate Finish");    }}

LogTools类的定义如下:

package stark.a.is.zhangjian.libtest;import android.util.Log;class LogTools {    static void print(String log) {        Log.d("LibTest", log);    }}

随着项目变得越来越复杂,我们定义了越来越多的工具类,
此时我们就想将所有的工具放到一个单独的类库中。
于是,我们就开始利用AndroidStudio创建类库了。

1、创建类库
首先直接在项目下创建一个新的Module,将其的类型设置为Android Library即可,如下图所示:

创建成功后,项目的目录结构变成了:
这里写图片描述
可以看出,类库tools与主项目app的地位是一致的,都是单独的module,有独立的build.gradle文件。
build.gradle文件为不同类型的module进行了不一样的声明。
其中,app Module的声明如下:

apply plugin: 'com.android.application'

类库对应module的声明如下:

apply plugin: 'com.android.library'

2、修改build.gradle文件
创建出类库后,必须修改app Module的build.gradle文件,使得app Module在编译时可以找到tools Module。
这里就如同修改源码中的Android.mk文件一样,是一种编译需求。
我们首先看看项目对应的settings.gradle文件的内容:

include ':app', ':tools'

然后,就可以按照settings.gradle文件的内容,修改app Module的build.gradle文件了,在其中dependencies的部分增加依赖文件的路径:

............dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.1.0'    //增加下面的内容即可    compile project(':tools')    testCompile 'junit:junit:4.12'}

此时,app Module编译时就可以使用tools Module中的内容了。

3、代码移植
类库创建完毕后,我们就可以将所有tools相关的类添加到tools Module中了。
例如LogTools类移动到tools Module中变为:

package stark.a.is.zhangjian.tools;import android.util.Log;public class LogTools {    public static void print(String log) {        Log.d("LibTest", log);    }}

相对的我们可以移除app Module中的LogTools类,改变MainActivity中的调用:

package stark.a.is.zhangjian.libtest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import stark.a.is.zhangjian.tools.LogTools;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //此时使用的就是toos Module中的方法了        LogTools.print("onCreate Finish");    }}
0 0