亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android Studio使用教程(六):Gradle多渠道打包

2020-04-11 11:34:29
字體:
來源:轉載
供稿:網友

由于國內Android市場眾多渠道,為了統計每個渠道的下載及其它數據統計,就需要我們針對每個渠道單獨打包,如果讓你打幾十個市場的包豈不煩死了,不過有了Gradle,這再也不是事了。

友盟多渠道打包

廢話不多說,以友盟統計為例,在AndroidManifest.xml里面會有這么一段:

復制代碼 代碼如下:

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="Channel_ID" />

里面的Channel_ID就是渠道標示。我們的目標就是在編譯的時候這個值能夠自動變化。

第一步 在AndroidManifest.xml里配置PlaceHolder

復制代碼 代碼如下:

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

第二步 在build.gradle設置productFlavors
復制代碼 代碼如下:

android { 
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    } 
}

或者批量修改
復制代碼 代碼如下:

android { 
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    } 

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

很簡單清晰有沒有?直接執行 ./gradlew assembleRelease , 然后就可以靜靜的喝杯咖啡等待打包完成吧。

assemble結合Build Variants來創建task

上一篇博客介紹了 assemble 這個命令,會結合 Build Type 創建自己的task,如:

復制代碼 代碼如下:

./gradlew assembleDebug

./gradlew assembleRelease


除此之外 assemble 還能和 Product Flavor 結合創建新的任務,其實 assemble 是和 Build Variants 一起結合使用的,而 Build Variants = Build Type + Product Flavor , 舉個例子大家就明白了:

如果我們想打包wandoujia渠道的release版本,執行如下命令就好了:

復制代碼 代碼如下:

./gradlew assembleWandoujiaRelease

如果我們只打wandoujia渠道版本,則:
復制代碼 代碼如下:

./gradlew assembleWandoujia

此命令會生成wandoujia渠道的Release和Debug版本

同理我想打全部Release版本:

復制代碼 代碼如下:

./gradlew assembleRelease

這條命令會把Product Flavor下的所有渠道的Release版本都打出來。

總之,assemble 命令創建task有如下用法:

**assemble**: 允許直接構建一個Variant版本,例如assembleFlavor1Debug。

**assemble**: 允許構建指定Build Type的所有APK,例如assembleDebug將會構建Flavor1Debug和Flavor2Debug兩個Variant版本。

**assemble**: 允許構建指定flavor的所有APK,例如assembleFlavor1將會構建Flavor1Debug和Flavor1Release兩個Variant版本。

完整的gradle腳本

最后福利大放送,來一份我在項目中使用的完整的gradle文件配置:

復制代碼 代碼如下:

apply plugin: 'com.android.application'

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

android {
    compileSdkVersion 21
    buildToolsVersion '21.1.2'

    defaultConfig {
        applicationId "com.boohee.*"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
       
        // dex突破65535的限制
        multiDexEnabled true
        // 默認是umeng的渠道
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
    }

    lintOptions {
        abortOnError false
    }

    signingConfigs {
        debug {
            // No debug config
        }

        release {
            storeFile file("../yourapp.keystore")
            storePassword "your password"
            keyAlias "your alias"
            keyPassword "your password"
        }
    }

    buildTypes {
        debug {
            // 顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "true"

            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
            signingConfig signingConfigs.debug
        }

        release {
            // 不顯示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"

            minifyEnabled true
            zipAlignEnabled true
            // 移除無用的resource文件
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                     // 輸出apk名稱為boohee_v1.0_2015-01-15_wandoujia.apk
                        def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }
    }

    // 友盟多渠道打包
    productFlavors {
        wandoujia {}
        _360 {}
        baidu {}
        xiaomi {}
        tencent {}
        taobao {}
        ...
    }

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.jakewharton:butterknife:6.0.0'
    ...
}

大家有問題或疑問、建議歡迎博客留言,Android Studio的教程暫且到這里結束了,相信大家基本的都已會使用了,還有其他技巧與操作靠大家自己摸索了,之后有時間也會在博客上整理下一些Tips之類的,歡迎大家關注。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品福利在线观看| 91香蕉嫩草影院入口| 亚洲精品久久久久久久久久久久| 在线观看亚洲视频| 欧美亚洲另类制服自拍| 欧美日韩国产第一页| 亚洲精品福利视频| 国产精品久久久久久av下载红粉| 日本精品久久久| 国产精品96久久久久久又黄又硬| 亚洲欧美福利视频| 亚洲第一偷拍网| 久久五月天色综合| 亚洲国产中文字幕久久网| 麻豆一区二区在线观看| 4388成人网| 亚洲精品国产精品国产自| 色诱女教师一区二区三区| 少妇av一区二区三区| 26uuu另类亚洲欧美日本老年| 欧美在线视频导航| 国产精品欧美风情| 国产成一区二区| 亚洲最大福利网站| 国产精品91免费在线| 欧美贵妇videos办公室| 欧美裸体男粗大视频在线观看| 欧洲成人在线观看| 国产97免费视| 成人在线免费观看视视频| 久久免费少妇高潮久久精品99| 亚洲a区在线视频| 欧美最顶级丰满的aⅴ艳星| 国产综合在线看| 热re99久久精品国产66热| 97精品久久久中文字幕免费| 久久精品国产一区二区电影| 国产亚洲精品va在线观看| 国产一区二区三区四区福利| 日韩av在线不卡| 中文字幕欧美亚洲| 日韩中文娱乐网| 久久全国免费视频| 亚洲乱码av中文一区二区| 搡老女人一区二区三区视频tv| 欧美在线视频一区二区| 欧美超级免费视 在线| 国产香蕉精品视频一区二区三区| 国产深夜精品福利| 国产精品免费网站| 国产精品久久久久久久7电影| yw.139尤物在线精品视频| 国产亚洲欧洲高清一区| 亚洲自拍另类欧美丝袜| 日韩av在线免播放器| 91久久精品一区| 国产亚洲欧美日韩一区二区| 91精品久久久久久久久久入口| 欧美日韩不卡合集视频| 黑人巨大精品欧美一区二区一视频| 欧美电影在线播放| 久久久久一本一区二区青青蜜月| 久久97久久97精品免视看| 国产成人aa精品一区在线播放| 亚洲欧美中文在线视频| 91性高湖久久久久久久久_久久99| 欧美激情在线视频二区| 日韩欧美a级成人黄色| 欧美日韩在线免费观看| 亚洲成人激情小说| 亚洲欧洲中文天堂| 国产亚洲美女精品久久久| 国产精品v片在线观看不卡| 精品久久久一区二区| 久久久久久久久久国产精品| 国内外成人免费激情在线视频| 91情侣偷在线精品国产| 色无极亚洲影院| 一本色道久久综合狠狠躁篇的优点| 久久69精品久久久久久久电影好| 91精品久久久久久久久久久久久久| 中文字幕亚洲国产| 精品日韩中文字幕| 亚洲精品自产拍| 色偷偷偷亚洲综合网另类| 国产精品久久久久一区二区| 中文字幕一区二区精品| 欧美日韩视频免费播放| 国产精品大片wwwwww| 中文字幕久热精品视频在线| 久久久久中文字幕| 欧美亚洲成人xxx| 欧美成人合集magnet| 欧美日韩亚洲高清| 欧美尤物巨大精品爽| 日韩视频免费大全中文字幕| 日韩激情视频在线| 欧美大尺度电影在线观看| 91牛牛免费视频| 国产精品流白浆视频| 欧美成人一区二区三区电影| 97视频在线免费观看| 国产精品女主播视频| 456亚洲影院| 欧美成人精品在线播放| 欧美激情第一页xxx| 亚洲国产天堂久久综合| 日韩电影免费在线观看中文字幕| 国产精品亚发布| 国产精品偷伦一区二区| 久久精品亚洲一区| 伊人久久精品视频| 色久欧美在线视频观看| 91精品视频在线免费观看| 国产精品一区久久| 欧美性猛交99久久久久99按摩| 欧美激情综合亚洲一二区| 亚洲美女精品久久| 亚洲男女性事视频| 日产日韩在线亚洲欧美| 欧美成人午夜免费视在线看片| 亚洲片在线观看| 国产一区二区三区精品久久久| 九九九热精品免费视频观看网站| 久久99热这里只有精品国产| 亚洲成人av在线播放| 国产成人一区二区| 色综合导航网站| 91老司机精品视频| 国产有码在线一区二区视频| 国产欧美日韩丝袜精品一区| 欧美一区亚洲一区| 国产精品日韩欧美综合| 精品中文字幕在线2019| 亚洲国产精品久久久| 国产精品v日韩精品| 国产精品高潮粉嫩av| 久久久国产精品亚洲一区| 一区二区在线视频播放| 夜夜嗨av一区二区三区免费区| 国产精品99久久久久久www| 国产亚洲精品久久久久动| 亚洲欧美999| 国产精品欧美激情| 久久久欧美精品| 亚洲自拍av在线| 亚洲免费中文字幕| 亚洲欧美国产高清va在线播| 91久久久久久久久久久| www.99久久热国产日韩欧美.com| 国产成人精品在线观看| 亚洲成年网站在线观看| 亚洲一区中文字幕在线观看| 国产精品日韩欧美| 精品国产91乱高清在线观看| 国产视频久久久久| 日韩免费电影在线观看| 日韩激情片免费| 欧美日韩福利电影| 成人av在线亚洲| 国产精品久在线观看| 亚洲精品二三区| 中文字幕亚洲欧美日韩高清| 日韩午夜在线视频|