Android 多渠道打包

688 阅读2分钟

摘要

需求

针对不同平台打包,时间,效率等方面提升的需要。

实现方式

通过Gradle自定义配置及、工程结构特殊配置实现打包过程时间效率的提示

结果

实现多渠道,多版本,动态替换包名、图片、资源文件。

详细说明

Gradle

  • buildTypes 定义
buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            applicationIdSuffix ".debug"
            minifyEnabled false
        }
    }

buildTypes声明编译类型,常规可以设置 releasedebugbeta等,可根据实际情况,定义相应属性配置,eg:是否混淆,最小化等

  • productFlavors 定义
//给定风格纬度
    flavorDimensions "platform"

    productFlavors {
        //Android 平台 app
        androidapp {
            dimension "platform"
            applicationId "com.example.multichannel.androidapp"
            manifestPlaceholders = [PACKAGE_NAME:"com.example.multichannel.androidapp"]
            versionCode = 101
            versionName = "1.0.1"
        }
        //ink 平台 app
        einkapp {
            dimension "platform"
            applicationId "com.example.multichannel.einkapp"
            manifestPlaceholders = [PACKAGE_NAME:"com.example.multichannel.androidapp"]
            versionCode = 102
            versionName = "1.0.2"
        }
        //其他 平台 app
        otherapp {
            dimension "platform"
            applicationId "com.example.multichannel.otherapp"
            manifestPlaceholders = [PACKAGE_NAME:"com.example.multichannel.otherapp"]
            versionCode = 103
            versionName = "1.0.3"
        }
    }

flavorDimensions "platform 3.0(Android Studio Gradle plugin)之后需要明确声明风格,并且在渠道内明确声明dimension

同样,渠道声明内部也可以定义相应属性配置

buildTypes组合可以形成对应的 flavors + buildTypes

  • 定义输出.apk文件名
// 输出文件配置
    applicationVariants.all { variant ->
        variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData ->
            apkData.outputFileName = "multi-channel-${variant.flavorName}-${variant.versionName}-${variant.buildType.name}.apk"
        }
    }

以上代码表示,输出apk会自动打包成 :

multi-channel-[flavorName]-[versionName]-[buildType].apk

Eg: buildTypesrelease,flavoreinkapp则会生成 multi-channel-einkapp-1.0.2-release.apk

动态替换包名、图片、资源文件

示意图

如图在src下,新建与渠道同名包,将对应渠道的资源放入其中(目录结构与main相同)

注意:相同资源需要同名

因资源文件种类众多,不做赘述

打包

示意图

示意图

打包过程无区别,可以选择需要的版本进行打包,支持单个或多个,打包好后会在app目录下生成对应的渠道包,在渠道包下生成对应的构建类型包,如图:

示意图

结语

到此,多渠道打包,动态替换包名、图片、资源文件功能需求已完成,后续也可根据实际情况,进行相应的定制。