使用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");
}
}