架構日記(五)多渠道打包配置

AndroidManifest.xml 裏設置動態渠道變量

<!--多渠道打包配置-->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="" />
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}"/>

 

在app:gradle中

apply plugin: 'com.android.application'



def getTime(){
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

android {
    compileSdkVersion rootProject.ext.android["compileSdkVersion"]
    buildToolsVersion rootProject.ext.android["buildToolsVersion"]

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode rootProject.ext.android["versionCode"]
        versionName rootProject.ext.android["versionName"]
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        /***
         * 解決Error:All flavors must now belong to a named flavor dimension. Learn more at
         * 多渠道打包緯度統一
         */
        flavorDimensions "versionCode"
    }

    signingConfigs{
        config {
            keyAlias 'key0'
            keyPassword '12205226'
            storeFile file('/Users/mac/Desktop/mytest.jks')
            storePassword '12205226'
        }
    }


//    多渠道打包配置
    productFlavors{
        kuan {}
        xiaomi {}
        qh360 {}
        baidu {}
        wandoujia {}
    }
    productFlavors.all{
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            applicationVariants.all { variant ->
                variant.outputs.all {
                    // 輸出apk名稱爲app_kuan_v1.0_2015.01.15.apk
                    outputFileName = "app_${variant.productFlavors[0].name}_v${variant.versionName}_${getTime()}.apk"
                }
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation project(':base')
    implementation project(':task')
    implementation project(':account')

    implementation rootProject.ext.dependencies["appcompat"]
    testImplementation rootProject.ext.dependencies["junit_junit"]
    androidTestImplementation rootProject.ext.dependencies["androidx_junit"]
    androidTestImplementation rootProject.ext.dependencies["espresso_core"]
    //butterknif 註解處理器
    annotationProcessor rootProject.ext.dependencies["butterknife_compiler"]

    implementation rootProject.ext.dependencies["constraintlayout"]
}

./gradlew assembleDebug

結果

看到這裏是不是有人覺得爲啥要多渠道打包啊,一個包他不香嗎?

最後來介紹一下多渠道打包的用途,爲什麼要在項目搭建的時候把多渠道打包配置到gradle裏面

詳細說明:https://www.jianshu.com/p/b33139d4596c

多渠道打包的作用:apk--發佈到市場上(渠道就是可以下載apk的地方)

1.0:發佈到不同渠道上的apk,標記不同的渠道,目的是爲了統計該渠道的下載量,留存率等等數據

2.0:瞭解下載量

3.0:針對性打廣告

如果不多渠道打包的話,一個apk包投到數十個市場上,你怎麼知道那個市場上下載量最大----多渠道主要是爲了運營,讓他們根據數據去玩(主要用到了友盟);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章