Android Studio開發時多工程引用相同Library專案的配置方法
阿新 • • 發佈:2019-02-19
在使用Android Studio開發的時候,如遇到多個專案引用同一個library(原始碼)的情況時,會遇到在每個專案中都要有一套library的程式碼的情況,對於還在開發和維護中的Library需要頻繁的修改,這對同步就很麻煩,為了解決這個問題,出現了下面的解決方案。
首先:新建一個類庫工程,工程名為AppLibs.Dev。
在該類庫中包含一個公共的類庫appLibs的Module,Module下面的build.gradle配置如下:
/** 宣告是Android類庫 */ apply plugin: 'com.android.library' android { /** 為了能夠支援該庫中的包 */ useLibrary 'org.apache.http.legacy' /** 編譯SDK的版本 */ compileSdkVersion 25 /** build tools的版本 */ buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 9 targetSdkVersion 25 versionCode 100 versionName "1.0.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { // debug模式 } release { // 是否進行混淆 minifyEnabled false // 混淆檔案的位置 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** 移除lint檢查的error */ lintOptions { abortOnError false } } dependencies { /** compile fileTree將libs資料夾中所有的jar檔案全部編譯。該方式和compile files方式選一種即可。 */ // compile fileTree(include: ['*.jar'], dir: 'libs') /** compile files將libs資料夾中單一的jar檔案編譯 */ compile files('libs/jsch-0.1.53.jar') compile files('libs/commons-net-3.3.jar') compile files('libs/okhttp-3.2.0.jar') compile files('libs/okio-1.6.0.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.2.0' compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7' /** 單元測試編譯 */ testCompile 'junit:junit:4.12' }
這樣一個類庫工程就建好了,接下來就是引用包含該類庫的工程。
其次:引用該類庫工程。通過Android Studio新建一個TestProject的工程,如下圖。
在該工程中需要做以下三件事:
1、在project的settings.gradle裡面增加紅框圈住部分的程式碼。
2、在module的build.gradle檔案中增加紅框圈住部分的程式碼:
如果該類庫工程中包含多個module,那麼在settings.gradle檔案中原有程式碼後面增加下面的程式碼即可:
include ':AppLibs.Dev:moduleName'
同時在APP module中build.gradle增加相應的模組程式碼即可:
compile project(':AppLibs.Dev:moduleName')
3、點選Android Studio的選單中的Build->Clean Project,完成Clean以後就看到如下圖。
完成如上圖所示以後,表示類庫工程已經被APP工程引用進去了,這樣以後再修改類庫工程中的原始碼,其他引用該類庫的工程中原始碼也就同步修改了。