Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android應用發布的准備——生成渠道包

Android應用發布的准備——生成渠道包

編輯:關於Android編程

我們需要使用一個變量標明該app的渠道,通常我們可以在manifest中的application節點下聲明,如下。

然後將CHANNEL_VALUE的值替換成對應的渠道名。我們可以使用gradle的flavor替我們完成

        flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    } data-snippet-id=ext.ce943ea9d51c68f4f0a3339e1de051bc data-snippet-saved=false data-csrftoken=Eq6LIWAR-4Cx8Srvsca1PFMG7mGEOwWNPoGc data-codota-status=done> productFlavors {
        wandoujia {}
        qihu360 {}
        baidu {}
        hiapk {}
        shoujizhushou {}
        tencent {}
        xiaomi {}
        anzhi {}
        uc {}
        appchina {}
        wangyi {}
        mumayi {}
        huawei {}
        lenovo {}
        flyme {}
    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    }

當然有時候我們需要配置某些渠道自動更新,某些渠道部自動更新,這時候需要一個變量來標明。我們讓所有渠道默認支持自動更新,讓豌豆莢的不進行自動更新。

defaultConfig {
        buildConfigField boolean, AUTO_UPDATES, true
    }
productFlavors {
        wandoujia {
            buildConfigField boolean, AUTO_UPDATES, false
        }
}

在程序中可以這樣獲得該變量

boolean autoUpdate=BuildConfig.AUTO_UPDATES;

甚至有時候需要更改生成的apk的名字,這時候可以自己定義生成的名字

        variant.outputs.each { output ->
            def oldFile = output.outputFile
            def newName = '';
            if (variant.buildType.name.equals('release')) {
                def releaseApkName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + '-signed.apk'
                output.outputFile = new File(oldFile.parent, releaseApkName)
            }
            if (variant.buildType.name.equals('beta')) {
                newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -build + getDate() + .apk
                output.outputFile = new File(oldFile.parent, newName)
            }
            if (variant.buildType.name.equals('debug')) {
                newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -debug + getDate() + .apk
                output.outputFile = new File(oldFile.parent, newName)
            }
        }
    }
} data-snippet-id=ext.2d8967d75590fed2f15bdfa52c0825b3 data-snippet-saved=false data-csrftoken=w6snEJhm-V_o5qFIgYY_rrEhmATollsIqVfA data-codota-status=done>//獲取產品名
def getProductName() {
    return ProductName
}
//獲取時間戳
def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}
android {
    ...
    //修改生成的apk名字
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def oldFile = output.outputFile
            def newName = '';
            if (variant.buildType.name.equals('release')) {
                def releaseApkName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + '-signed.apk'
                output.outputFile = new File(oldFile.parent, releaseApkName)
            }
            if (variant.buildType.name.equals('beta')) {
                newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -build + getDate() + .apk
                output.outputFile = new File(oldFile.parent, newName)
            }
            if (variant.buildType.name.equals('debug')) {
                newName = getProductName() + -v${defaultConfig.versionName}- + variant.productFlavors[0].name + -debug + getDate() + .apk
                output.outputFile = new File(oldFile.parent, newName)
            }
        }
    }
}

最後我們還需要在程序中獲得我們的渠道名進行後續的一些操作,比如做一些統計之類的工作

        String channel=AppUtil.getMetaValue(this,CHANNEL_NAME);
        Log.d(TAG,channel);

一切完成之後,我們就可以生成渠道包了
打開終端,輸入以下命令回車就生成了所有的渠道包

gradlew assembleRelease

此外還可以點擊andorid studio右邊懸停的的gradle按鈕,彈出的窗口裡面有個圓形的execute gradle task的按鈕,command Line裡輸入assembleRelease點擊ok也可以生成所有渠道包

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved