关于Android app一次性打包多个版本包

      之前实现了在正式和测试版本之间的切换:https://blog.csdn.net/R_ine/article/details/81412650
      但是如果切换版本生成包会麻烦,需要一个个参数修改,然后再次生成。然后我就在想能不能实现一次性打包多个版本的apk。
然后查阅资料进行研究,下面看代码。

def Base_Url = "\"http://正式服务器/\""  //斜杠必须得加,为了让java代码识别这是String类型
def CBase_Url = "\"http://测试服务器/\""
android {
//中间省略若干代码
  buildTypes {
        release {
            //混淆
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 
            'proguard-rules.pro'
            //密钥直接run生效
            signingConfig signingConfigs.release
            //正式,其中“BASE_URL”为Java中引用的字段
            buildConfigField "String", "BASE_URL",  Base_Url
            //友盟来源设置,如果你接了友盟
            manifestPlaceholders = [umeng_app_key: Base_UM]
          
        }
 
        debug {
            //混淆
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 
            'proguard-rules.pro'
            //密钥直接run生效
            signingConfig signingConfigs.release
            //测试
            buildConfigField "String", "BASE_URL", CBase_Url
            manifestPlaceholders = [umeng_app_key: "ceshi"]
            
        }
    }
 
//不同版本的参数
 flavorDimensions "default"
    productFlavors {
        guanwang{
            resValue "string", "app_name", "app名"  //这是替换strings中的app_name。删strings中的app_name,不然会报错!
            Base_UM = "guanwang"   //友盟纪录渠道
            buildConfigField "String", "Base_UM",  "\""+Base_UM+"\""
            manifestPlaceholders = [umeng_app_key : Base_UM]
        }
        baidu {
           resValue "string", "app_name", "app名" 
            Base_UM = "baidu"
            buildConfigField "String", "Base_UM",  "\""+Base_UM+"\""
            manifestPlaceholders = [umeng_app_key : Base_UM]
        }
        xiaomi {
            resValue "string", "app_name", "app名" 
            Base_UM = "xiaomi"
            buildConfigField "String", "Base_UM",  "\""+Base_UM+"\""
            manifestPlaceholders = [umeng_app_key : Base_UM]
        } 
       
        debug1{
            resValue "string", "app_name", "app名" 
            Base_UM = "debug"
            buildConfigField "String", "Base_UM",  "\""+Base_UM+"\""
            manifestPlaceholders = [umeng_app_key : Base_UM] 
        }
    }

 //自动生成指定名称的release发布版的 apk文件
    android.applicationVariants.all { variant ->
        def appName
  //下面是修改每个版本的apk文件的名字
        if(variant.buildType.name.equals('release')){
            if(New_Base_Url.contains("api")){
                if(Base_UM.equals("guanwang")){
                    appName = "NameV"+defaultConfig.versionName
                }else{ 
                    def um = "${variant.productFlavors[0].name}"
                    appName = "Name-"+um+"V"+defaultConfig.versionName
                }
            }else if(Base_Url.contains("sixsix")){
                appName = "测试_V"+defaultConfig.versionName
            }else {
                appName = "未知_V"+defaultConfig.versionName
            }
        } else {
            appName = "测试"
        }
        variant.outputs.all {
            output ->
                //文件位置 
                outputFileName = "${appName}.apk"
        }
    }
}

在java中引用BASE_URL:
String BASE_URL = BuildConfig.BASE_URL;

在AndroidManifest.xml中引用友盟来源

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

具体可以参考以下:
https://blog.csdn.net/abc6368765/article/details/52786509
https://blog.csdn.net/zhourui_1021/article/details/78800399

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值