Android開發(fā) Gradle配置多渠道多環(huán)境

1.配置多環(huán)境

1.1 配置build.gradle

在新建立項目后,app目錄下的build.gradle中,會默認(rèn)有buildTypes屬性,就像這樣。

默認(rèn)buildTypes

buildTypes:編譯類型,默認(rèn)的就是debug,release

雖然上圖中只有一個release屬性,但是debug其實也是默認(rèn)存在的,關(guān)于這點,你可以打開Android studioBuild Variants(默認(rèn)位置在Android studio的左下角靠左邊欄處)自行查看,如下圖。

Build Variants :構(gòu)建變種版本

我們要做的就是其實就是對這個buildTypes 進(jìn)行擴(kuò)充和重寫

以博主公司為例,分teststage、pro 三個環(huán)境,每個對應(yīng)不同的baseURL、appName。

 buildTypes {
        //pro環(huán)境
        release {
            buildConfigField("String", "BASE_URL", "\"http://pro.cn\"")
        }

        //stage環(huán)境
        stage {
            buildConfigField("String", "BASE_URL", "\"http://stage.cn\"")
        }

        //test環(huán)境
        debug {
            buildConfigField("String", "BASE_URL", "\"http://test.cn\"")
        }
    }

buildConfigField : 配置宏,可以在gradle里配置一個值讓java 代碼中訪問到

buildTypes默認(rèn)就有debugrelease兩種類型
debugrelease分別重寫為testpro環(huán)境,再另外多加一個stage,這樣就可以構(gòu)成三個環(huán)境。

1.2 項目內(nèi)調(diào)用

在項目build完后,會生成一個BuildConfig文件。

這里寫圖片描述

你就可以直接在自己項目里調(diào)用BuildConfig
這里寫圖片描述

如果你要切換環(huán)境,就又回到了上面提到的Build Variants,此時你再打開,它就變成了下面這樣。


可以任意切換自己想要的環(huán)境。

2.配置多渠道

2.1 配置build.gradle

多渠道配置需要手動添加另一個屬性productFlavors

    productFlavors {
        "other"{} //別的渠道及本地調(diào)試
        "baidu" {} //百度
        "weixin" {} //微信
        "toutiao" {} //今日頭條
        "sougou" {} //搜狗
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

productFlavors:從項目中構(gòu)建了一個應(yīng)用的自定義版本
manifestPlaceholders:用于替換 AndroidManifest清單文件的指定位置數(shù)據(jù)

2.2 配置 AndroidManifest.xml

<meta-data
     android:name="UMENG_CHANNEL"
     android:value="${UMENG_CHANNEL_VALUE}" />

這樣在build的時候,就可以把manifestPlaceholders 指定的[UMENG_CHANNEL_VALUE: name] 鍵值對映射到AndroidManifest.xml${UMENG_CHANNEL_VALUE}


這個時候再查看Build Variants就已經(jīng)變成了這個樣子,在這里選擇自己想要的環(huán)境及渠道。

至此,大功告成,在打包apk的時候就可以選擇自己想要的環(huán)境和渠道。



build.gradle


android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.gradlesimple.jyn"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            buildConfigField("String", "BASE_URL", "\"http://pro.cn\"")
            manifestPlaceholders = [
                    app_name: "proAPP"
            ]
        }

        //stage環(huán)境
        stage {
            buildConfigField("String", "BASE_URL", "\"http://stage.cn\"")
            manifestPlaceholders = [
                    app_name: "stageAPP"
            ]
        }

        //test環(huán)境
        debug {
            buildConfigField("String", "BASE_URL", "\"http://test.cn\"")
            manifestPlaceholders = [
                    app_name: "testAPP"
            ]
        }
    }

    productFlavors {
        "other"{} //別的渠道及本地調(diào)試
        "baidu" {} //百度
        "weixin" {} //微信
        "toutiao" {} //今日頭條
        "sougou" {} //搜狗
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gradlesimple.jyn">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="${app_name}">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />
    </application>
</manifest>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容