前言
作為一名安卓開發人員,不會搭建架構在工作及面試過程中難免會顯得有些low,必定搭建架構要熟悉很多常用的公共庫以及封裝,設計模式,等等基礎知識,并且架構搭建的完善,對于後期項目的維護等等至關重要
首先介紹一下整體架構的流程
app主工程主要是殼工程,用來打包工程和連結各個子產品的作用
整體子產品分為兩個子產品 一個是首頁 一個是我的子產品 還有一個公共子產品
homelibrary 主要是首頁相關的功能
mylibrary 主要是我的相關的功能
commonlibrary 主要是放一些 項目相關的資源檔案,工具類,等等公共的東西 也可以分為多個庫進行細分,如第三方,網絡請求等等,這裡為了友善了解隻用一個庫來管理
将建立的庫引入到項目工程中,
在settings.gradle檔案中添加如下
include ':app', ':mylibrary', ':homelibrary', ':commonlibrary'
将主工程中的資源等相關資源移動到公共的庫中友善管理,這樣在首頁子產品和我的子產品可以直接引用即可
gradle基本配置
項目(Project)的build.gradle:
首先在根目錄中 建立一個gradle檔案 名為config.gradle,主要放置所有的依賴,各個工程子產品直接運用即可友善管理
//檔案内部使用
def butterknifeLatestReleaseVersion = '8.5.1'
def supportLibraryVersion = '27.1.1'
//外部使用的安卓版本相關
ext {
applicationId = 'com.yc.androidarchitecture'
compileSdkVersion = 27
targetSdkVersion = 27
minSdkVersion = 19
buildToolsVersion = "27.1.1"
versionCode = 0
versionName = "1.0.0"
}
//compile依賴的第三方庫
ext.deps = [
supportv4 : "com.android.support:support-v4:$supportLibraryVersion",
supportv7 : "com.android.support:appcompat-v7:$supportLibraryVersion",
recyclerviewv7 : "com.android.support:recyclerview-v7:$supportLibraryVersion",
constraintlayout : 'com.android.support.constraint:constraint-layout:1.1.2',
butterknife : "com.jakewharton:butterknife:$butterknifeLatestReleaseVersion",
butterknifeCompiler: "com.jakewharton:butterknife-compiler:$butterknifeLatestReleaseVersion",
]
記得在根目錄中将配置檔案引入,否則無效
如:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//引入配置檔案
apply from: "config.gradle"
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
工程(Module)的build.gradle:
以下是公共子產品的引入
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
android {
compileSdkVersion 27
//将sdk版本修改為
// compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
minSdkVersion 15
targetSdkVersion 27
//可以将上述寫死的版本号修改為 如下格式 友善管理
// minSdkVersion rootProject.ext.minSdkVersion
// targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//将v7包直接引入公共配置中的檔案
api deps.supportv7
api deps.constraintlayout
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//為什麼butterknife不用api方式引入 在下一篇多子產品引入第三方插件中詳細講解
implementation deps.butterknife
annotationProcessor deps.butterknifeCompiler
}
可能有些人會有因為 為什麼引入的庫是 api 而不是compile 或者implementation 這是因為在 studio3.0以後 要将compile替換成implementation , 那麼implementation是指在本工程中(modle)使用 其他子產品即使引入此modle 也無法通路該modle中引入的庫 而 api 的形式正好解決了此問題 即 modle中引入 api類型的庫 在其他子產品中 隻要引入該modle 同樣也可以使用該子產品中引入的庫, 這樣就不用再 本modle中 在次引入開源庫
舉例說明
首頁子產品gradle 配置
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//在此值需要引入 公共的庫即可 不必在引入其他庫 因為公共的庫已經用api的形式引入
api project(':commonlibrary')
}
我的子產品 同理首頁子產品gradle配置 在此 不在做詳細說明
以上就是基礎架構搭建的全部過程 如有不了解的 可以去github下載下傳源碼 基礎部分為分支1
gitbub項目位址 分支1
或 加入安卓開發交流群:安卓幫595856941
相關連結:
下一篇:
安卓架構搭建(二)引入第三方插件butterknife