欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

记录一次Android多渠道打包

程序员文章站 2022-08-12 13:24:50
背景我有一个需求,要求是同一份代码要打两个包出来,只不过包名、logo、名称、签名、部分代码不一样,我是这样做的。第一步app的build.gradle中android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "xxx" minSdkVersion 21 targetSdkVersion 30...

背景

我有一个需求,要求是同一份代码要打两个包出来,只不过包名、logo、名称、签名、部分代码不一样,我是这样做的。

第一步

app的build.gradle中

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "xxx"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 5
        versionName "1.0.4"//
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        //注意这个属性,当然设置在这个闭包的外面也是可以的。不设置会报错All flavors must now belong to a named flavor dimension
        flavorDimensions "default"
    }
    signingConfigs {
    //默认的渠道,这里签名的数据配置在项目里,见下图
        debug {
            // debug和release用的统一的jks避免重新新增MD5
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }
        release {
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }
        //新增的渠道签名
        debugxiamen {
            // debug和release用的统一的jks避免重新新增MD5
            keyAlias 'xxxx'
            keyPassword 'xxx'
            storeFile file('../doc/xxx.jks')
            storePassword 'xxx'
        }

        releasexiamen {
            keyAlias 'xxxx'
            keyPassword 'xxx'
            storeFile file('../doc/xxx.jks')
            storePassword 'xxx'
        }
    }
    productFlavors {
    //输出两个变体,即最终要打包的两个渠道
        hengqin {
        //可以单独指定某个渠道的包名,会覆盖manifest里面的packgename,也可以用这样配置 applicationIdSuffix ".demo"
            applicationId "com.ly.checkticket4hengqin"
        }
        xiamen {
            applicationId "com.ly.traffic.transport"

        }

    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            //productFlavors的闭包必须放到这个之前,否则肯定报错,没定义先使用嘛
            //还有很多文章上说在不同渠道上只能指定debug签名,relase签名只能用同一个,我这边测试了一下,非也!
            productFlavors.hengqin.signingConfig signingConfigs.release
            //解决 The application could not be installed: INSTALL_PARSE_FAILED_NO_CERTIFICATES
            productFlavors.xiamen.signingConfig signingConfigs.releasexiamen
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    dataBinding {
        enabled = true
    }
}

签名配置
记录一次Android多渠道打包

第二步

配置不同的logo、appname
记录一次Android多渠道打包

第三步

代码里抹平渠道区分:

        when(BuildConfig.FLAVOR){
            "xiamen"->{}
            "hengqin"->{}
        }

第四步

打包
记录一次Android多渠道打包
记录一次Android多渠道打包

本文地址:https://blog.csdn.net/u012346890/article/details/112536211