1. 程式人生 > >使用Android Studio生成類庫

使用Android Studio生成類庫

有時需要對專案進行重構,將與業務無關的基礎類移入到單獨的類庫中,即將專案結構變成下圖所示的樣子,業務類表示主專案,保持了對基礎類庫的引用:

這篇文章主要記錄如何使用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");
    }
}