項目的搭建及Gradle配置 (一)

前言

想了一下暫時好像也沒什么要逼逼的,那就直接拿起鍵盤來一梭子吧。

1.創(chuàng)建工程

首先在AS上創(chuàng)建一個項目并命名為Component,我們把AS默認生成的app module作為主(host)模塊,然后再創(chuàng)建兩個module分別命名為order、personal,好了此時已經有了三個獨立的模塊,那么如何將這三個模塊關聯(lián)起來是我們下一步要做的事情了。

2.build.gradle配置

三個moudle都能獨自運行,模塊化開發(fā)初衷是要做到模塊之間既可以單獨運行又可以集成在一起,那么現(xiàn)在三個可單獨運行得模塊是如何集成到一起的?目前來看AS是不允許將它們直接關聯(lián)的,所以接下來要修改兩個依賴模塊的build.gradle中的apply plugin屬性:

//apply plugin: 'com.android.application'  //表示Android module能單獨運行  
//上邊為創(chuàng)建事默認配置,將其改為如下
apply plugin: 'com.android.library' //表示Android library不能單獨運行

這個時候我們創(chuàng)建得三個模塊就可以通過Procejt Structure(Ctrl+alt+shift+s)來關聯(lián)起來了,


image.png

至于如何依賴Android Library這里就不做細說了。
通過上邊修改配置增加兩個(order&personal)模塊的依賴,目前主模塊App已經可以調用home和personal中的界面了,現(xiàn)在這和要實現(xiàn)的目標還差很遠,由于要同時管理多個模塊的build.gradle文件,所以這里我們要引入一個公共的配置config.gradle。

3.config.gradle創(chuàng)建與配置

我們在工程的根目錄下右鍵創(chuàng)建File并命名為config.gradle,在文件添加ext{}屬性,這ext中就可以加入我們需要配置的公共項了,

ext{
    //組件化|集成化開關
    isDebug = false
    // 包名,用于存放APT生成的類文件
    packageNameForAPT = "per.xxx.modular.apt"
    //項目中的服務器地址
    url = [
            debug:'http://127.0.0.1/',
            release:'http://release/',
    ]
    android = [
            "compileSdkVersion": 29 ,
            "buildToolsVersion": "29.0.2"
    ]
    defaultConfig = [
            "minSdkVersion": 21 ,
            "targetSdkVersion": 29,
            "versionCode": 1,
            "versionName": "1.0",
            "testInstrumentationRunner":"androidx.test.runner.AndroidJUnitRunner"
    ]
    applicationId = [
            "app":"per.xxx.modular_app",
            "order":"per.xxx.modular_order",
            "personal":"per.xxx.modular_personal"
    ]
    //模塊中的依賴庫
    dependencies = [
            "appcompat":"androidx.appcompat:appcompat:1.1.0",
            "constraintlayout":"androidx.constraintlayout:constraintlayout:1.1.3",
            "recyclerview":"androidx.recyclerview:recyclerview:1.2.0-alpha01"
    ]
}

然后引入該配置文件,在工程的build.gradle中最外層添加
apply from: "config.gradle"
那么這個時候我們三個模塊就可以通過該配置文件統(tǒng)一管理了。

4.如何使用config.gradle中配置項

在各個模塊的build.gradle中可以通過rootProject.ext來獲取config.gradle配置的屬性,這里將rootProject.ext 賦值到一個變量def rootSet = rootProject.ext,然后在android和dependencies標簽中我們就可以替換掉原來的配置項了,如下

//order模塊的配置
def rootSet = rootProject.ext
if(rootSet.isDebug){//這里可以通過布爾值來切換是否可以單獨運行
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}
android {
    compileSdkVersion rootSet.android.compileSdkVersion
    buildToolsVersion rootSet.android.buildToolsVersion

    defaultConfig {
        if(rootSet.isDebug){
            applicationId rootSet.applicationId.personal
        }
        minSdkVersion rootSet.defaultConfig.minSdkVersion
        targetSdkVersion rootSet.defaultConfig.targetSdkVersion
        versionCode rootSet.defaultConfig.versionCode
        versionName rootSet.defaultConfig.versionName
        testInstrumentationRunner rootSet.defaultConfig.testInstrumentationRunner
        //傳入APT參數(shù)
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName(), packageNameForAPT: packageNameForAPT]
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main{
            if(rootSet.isDebug){
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            }else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
//                exclude{
//                    java{
//                        '**/debug/**'
//                    }
//                }
            }
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
//此處通過遍歷Map方式來循環(huán)引入依賴,減少代碼
//也可以通過implementation  rootSet.dependencies.appcompat 單獨引入
    rootSet.dependencies.each{k,v -> implementation v }
    api project(':common')//此為公共組建
//測試相關庫
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

可以看到我們通過rootSet.android.鍵來引入需要配置的值,這樣做好處是只用修改config.gradle中的內容即可,便于統(tǒng)一管理,其中有兩處用到了isDebug屬性,這里大家應該能猜到其用處就是來區(qū)分是否能單獨調試該模塊的,需要注意的是App模塊中是不需要加這兩處判斷的,因為App自始至終都是可以單獨運行的,但是需要在dependencies 中加入如下判斷:

    if (!rootSet.isDebug) {
         implementation project(':order')
         implementation project(':personal')
    }

否則,切換為單獨調試模式時,我們的app會提示模塊之間不能相互依賴的錯誤。

至此項目的grdle配置已經差不多了。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Gradle配置最佳實踐 本文會不定期更新,推薦watch下項目。如果喜歡請star,如果覺得有紕漏請?zhí)峤籭ssu...
    Solang閱讀 1,767評論 0 4
  • 原文地址 作為Android開發(fā)你必須明白的Gradle基礎 作為一個Android開發(fā)程序員,如果你的build...
    Android_馮星閱讀 764評論 0 1
  • 上一章我們學習了Gralde的使用,創(chuàng)建和轉換Android工程。本章我們將深入了解構建文件,學習一些有用的tas...
    sollian閱讀 1,405評論 0 3
  • gradle 編程框架的組成:groovy核心語法 ,build script block,gradle api....
    高斯巴閱讀 660評論 0 0
  • 學焦點用焦點,說出來的都是自己的 ,父母的改變從這里開始,每天問問自己,關注正向了嗎?看到難得了嗎?重新建構了嗎?...
    王琦_7de4閱讀 236評論 0 1

友情鏈接更多精彩內容