1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        gradle-packer-pluginAndroid 多渠道打包工具

        聯(lián)合創(chuàng)作 · 2023-09-25 03:43

        gradle-packer-plugin 是 Android 多渠道打包工具 Gradle 插件,可方便的于自動(dòng)化構(gòu)建系統(tǒng)集成,通過(guò)很少的配置可實(shí)現(xiàn)如下功能 :

        • 支持自動(dòng)替換AndroidManifest文件中的meta-data字段實(shí)現(xiàn)多渠道打包

        • 支持自定義多渠道打包輸出的存放目錄和最終APK文件名

        • 支持自動(dòng)修改versionName中的build版本號(hào),實(shí)現(xiàn)版本號(hào)自動(dòng)增長(zhǎng)

        gradle-packer-plugin 庫(kù)路徑: com.mcxiaoke.gradle:packer:1.0.+ 簡(jiǎn)短名:packer,可以在項(xiàng)目的 build.gradle 中指定使用

        使用方法

        修改項(xiàng)目根目錄的 build.gradle

        buildscript {
            repositories {
                mavenCentral()
            }
        
            dependencies{
                classpath 'com.mcxiaoke.gradle:packer:1.0.+'
            }
        }

        修改Android項(xiàng)目的 build.gradle :

        apply plugin: 'packer'

        多渠道打包

        需要在命令行指定 -Pmarket=yourMarketFileName屬性,market是你的渠道名列表文件名,market文件是基于項(xiàng)目根目錄相對(duì)路徑 ,假設(shè)你的項(xiàng)目位于 ~/github/myapp 你的market文件位于 ~/github/myapp/config/markets.txt 那么參數(shù)應(yīng)該是 -Pmarket=config/markets.txt,一般建議直接放在項(xiàng)目根目錄,如果market文件參數(shù)錯(cuò)誤或者文件不存在會(huì)拋出異常

        渠道名列表文件是純文本文件,每行一個(gè)渠道號(hào),列表解析的時(shí)候會(huì)自動(dòng)忽略空白行,但是格式不規(guī)范會(huì)報(bào)錯(cuò),渠道名和注釋之間用 # 號(hào)分割開(kāi),行示例:

         Google_Play#play store market
         Gradle_Test#test
         SomeMarket#some market

        渠道打包的命令行參數(shù)格式示例(在項(xiàng)目根目錄執(zhí)行):

        ./gradlew -Pmarket=markets.txt clean archiveApkRelease

        Windows系統(tǒng)

        • 如果你是在windows系統(tǒng)下使用,需要下載 Gradle,設(shè)置 GRADLE_HOME 環(huán)境變量,并且將Gradle的 bin 目錄添加到環(huán)境變量PATH,然后將命令行中的 ./gradlew 替換為 gradle.bat

        • 如果同時(shí)還需要使用gradlew,你需要給你的項(xiàng)目配置使用gradle wrapper,在設(shè)置好了gradle之后,在你的項(xiàng)目根目錄命令行輸入 gradle.bat wrapper 然后就可以使用 gradlew.bat

        • Windows系統(tǒng)下的命令行參考:

          • 使用gradle: gradle.bat clean assembleRelease

          • 使用gradle wrapper: gradlew.bat clean assembleRelease

        文件名格式

        可以使用 archiveNameFormat 自定義渠道打包輸出的APK文件名格式,默認(rèn)格式是

        ${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode}

        舉例:假如你的App包名是  com.your.company ,渠道名是 Google_Play ,buildTyperelease ,versionName2.1.15 ,versionCode200115 ,那么生成的APK的文件名是

        com.your.company-Google_Player-release-2.1.15-20015.apk

        版本號(hào)自增

        版本號(hào)自動(dòng)會(huì)自動(dòng)在在 vesionName 尾部增加 .buildNumer 該字段會(huì)自動(dòng)增長(zhǎng),舉例:如果App本來(lái)的版本號(hào)是 1.2.3,那么使用版本號(hào)自動(dòng)后會(huì)是 1.2.3.1 1.2.3.2 ... 1.2.3.25 末尾的build版本號(hào)會(huì)隨構(gòu)建次數(shù)自動(dòng)增長(zhǎng)。注意:如果在命令行使用 -PbuildNum=123 這種形式指定了build版本號(hào),那么自增版本號(hào)不會(huì)生肖

        配置選項(xiàng)

        • archiveOutput  指定渠道打包輸出的APK存放目錄,默認(rèn)位于${項(xiàng)目根目錄}/build/archives

        • archiveNameFormat - Groovy格式字符串, 指定渠道打包輸出的APK文件名格式,默認(rèn)文件名格式是: ${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode},可使用以下變量:

          • projectName - 項(xiàng)目名字

          • appName - App模塊名字

          • appPkg - applicationId (App包名packageName)

          • buildType - buildType (release/debug/beta等)

          • flavorName - flavorName (對(duì)應(yīng)渠道打包中的渠道名字)

          • versionName - versionName (顯示用的版本號(hào))

          • versionCode - versionCode (內(nèi)部版本號(hào))

          • buildTime - buildTime (編譯構(gòu)建日期時(shí)間)

        • manifestMatcher 指定渠道打包需要修改的AndroidManifest.xml的meta-data的項(xiàng)名稱,列表類型,舉例: ['UMENG_CHANNEL', 'Promotion_Market'],注意:需要同時(shí)在命令行使用 -Pmarket=yourMarketFileName 指定market屬性多渠道打包才會(huì)生效,如果沒(méi)有配置就使用多渠道打包,將會(huì)拋出異常

        • buildNumberAuto - 布爾值,是否使用自增版本號(hào)功能 設(shè)為 true 為使用插件提供的自增build版本號(hào)功能,該功能會(huì)在項(xiàng)目目錄生成一個(gè) packer.properties 文件,建議加入到 .gitignore 中,注意:該功能不會(huì)應(yīng)用于多渠道打包生成的APK,不會(huì)影響渠道打包

        • buildNumberTypeMatcher - 指定需要使用自增版本號(hào)的buildType,列表類型,舉例: ['release', 'beta'] 默認(rèn)是全部

        使用示例:

        多渠道打包

        • 修改項(xiàng)目根目錄的 build.gradlebuildscript.dependencies 部分加入 classpath 'com.mcxiaoke.gradle:packer:1.0.0'

        • 修改Android項(xiàng)目的 build.gradleapply plugin: 'com.android.application' 下面加入 apply plugin: 'packer'

        • 修改Android項(xiàng)目的 build.gradle 加入如下配置項(xiàng),manifestMatcher 是必須指定的,其它幾項(xiàng)可以使用默認(rèn)值:

        packer {    // 指定渠道打包輸出目錄
            // archiveOutput = file(new File(project.rootProject.buildDir.path, "archives"))
            // 指定渠道打包輸出文件名格式
            // archiveNameFormat = ''
            // 指定渠道打包需要修改的AndroidManifest文件項(xiàng)
            manifestMatcher = ['UMENG_CHANNEL','Promotion_Market']
        
        }
        • 假設(shè)渠道列表文件位于項(xiàng)目根目錄,文件名為 markets.txt ,在項(xiàng)目根目錄打開(kāi)shell運(yùn)行命令:

        ./gradlew -Pmarket=markets.txt clean archiveApkRelease
        // Windows系統(tǒng)下替換為:
        gradle.bat -Pmarket=markets.txt clean archiveApkRelease
        // 或
        gradlew.bat -Pmarket=markets.txt clean archiveApkRelease

        如果沒(méi)有錯(cuò)誤,打包完成后你可以在 ${項(xiàng)目根目錄}/build/archives/ 目錄找到最終的渠道包。說(shuō)明:渠道打包的Gradle Task名字是 archiveApk${buildType} buildType一般是release,也可以是你自己指定的beta或者someOtherType,使用時(shí)首字母需要大寫,例如release的渠道包任務(wù)名是 archiveApkRelease,beta的渠道包任務(wù)名是 archiveApkBeta,其它的以此類推

        版本號(hào)自增

        • 修改項(xiàng)目根目錄的 build.gradlebuildscript.dependencies 部分加入 classpath 'com.mcxiaoke.gradle:packer:1.0.0'

        • 修改Android項(xiàng)目的 build.gradleapply plugin: 'com.android.application' 下面加入 apply plugin: 'packer'

        • 修改Android項(xiàng)目的 build.gradle 加入如下配置項(xiàng),buildNumberAuto是開(kāi)關(guān)

        packer {    // 指定是否使用build版本號(hào)自增
            buildNumberAuto = true
            // 指定使用版本號(hào)自增的buildType,默認(rèn)是全部
            buildNumberTypeMatcher = ['release', 'beta']
        
        }
        • 在項(xiàng)目根目錄打開(kāi)shell運(yùn)行命令: ./gradlew clean assembleRelease  如果沒(méi)有錯(cuò)誤,你可以安裝apk查看versionName自增是否生效, 也可以運(yùn)行 ./gradlew -PbuildNum=123 clean assembleRelease 從命令行指定build版本號(hào),該方法多用于自動(dòng)化構(gòu)建系統(tǒng)

        完整示例:

        項(xiàng)目的 samples 目錄包含一個(gè)完整的項(xiàng)目示例,可以查看其中的 build.gradle

        buildscript {
            repositories {
                mavenCentral()
            }
            dependencies {
                classpath 'com.android.tools.build:gradle:1.0.0'
                // `添加packer插件依賴`
                classpath 'com.mcxiaoke.gradle:packer:1.0.0'
            }
        }
        
        repositories {
            mavenCentral()
        }
        
        apply plugin: 'com.android.application'// 建議放在 `com.android.application` 下面  // `使用 apply plugin使用packer插件`  apply plugin: 'packer'packer {    // 指定渠道打包輸出目錄
            archiveOutput = file(new File(project.rootProject.buildDir.path, "apks"))    // 指定渠道打包輸出文件名格式
            archiveNameFormat = ''
            // 指定渠道打包需要修改的AndroidManifest文件項(xiàng)
            manifestMatcher = ['UMENG_CHANNEL','Promotion_Market']    // 指定是否使用build版本號(hào)自增
            buildNumberAuto = true
            // 指定使用版本號(hào)自增的buildType,默認(rèn)是全部
            buildNumberTypeMatcher = ['release', 'beta']
        
        }
        
        android {
            compileSdkVersion 21
            buildToolsVersion "21.1.1"
        
            defaultConfig {
                applicationId "com.mcxiaoke.packer.sample"
                minSdkVersion 15
                targetSdkVersion 21
                versionCode 12345
                versionName "1.2.3"
            }
        
            signingConfigs {
                release {
                    storeFile file("android.keystore")
                    storePassword "android"
                    keyAlias "android"
                    keyPassword "android"
                }
            }
        
            buildTypes {
                release {
                    signingConfig signingConfigs.release
                    minifyEnabled false
                }
        
                beta {
                    signingConfig signingConfigs.release
                    minifyEnabled false
                    debuggable true
                }
        
            }
        
        }
        
        dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
            compile 'com.android.support:support-v4:21.0.2'}

        參與開(kāi)發(fā)

        plugin 目錄是插件的源代碼,用 Groovy 語(yǔ)言編寫,項(xiàng)目 sample 目錄是一個(gè)完整的Andoid項(xiàng)目示例,在項(xiàng)目根目錄有幾個(gè)腳本可以用于測(cè)試:

        • deploy-local.sh 部署插件到本地的 /tmp/repo/ 目錄,方便即時(shí)測(cè)試

        • test-build.sh 部署并測(cè)試插件是否有錯(cuò)誤,測(cè)試build版本號(hào)自增功能

        • test-market.sh 部署并測(cè)試插件是否有錯(cuò)誤,測(cè)試多渠道打包功能

        感謝

        本項(xiàng)目參考了公司內(nèi)部Android項(xiàng)目使用的多渠道打包工具,最初作者是 googolmo,文件名模板自定義部分的代碼修改自此項(xiàng)目 android-appversion-gradle-plugin

        瀏覽 15
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产视频久久久久久久 | 奇米影视666 | 国产在线1| 免费看黄色的视频 | 免费A级毛片无码免费视频120软件 | 色色色精品 | 另类国产TS人妖高潮系列视频 | 寡妇高潮免费视频一区二区三区 | 污视频在线| 日韩情色一区 |