天天看點

安卓架構搭建(一)基本配置

前言

作為一名安卓開發人員,不會搭建架構在工作及面試過程中難免會顯得有些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