关于Android app正式版本和测试版本的切换

        前段时间发版app出现了问题,app上的服务器链接竟然是测试服务器的链接,这让我很尴尬。
        因为每次正式和测试服务器的切换都是手动替换的,所以才会出现这种问题,然后我就在想能不能根据release和debug来进行切换正式和测试的服务器链接。最后研究出结果,在这里记录。

正式和测试的代码是在build.gradle中实现的。

def Base_Url = "\"http://正式服务器/\""  //斜杠必须得加,为了让java代码识别这是String类型
def CBase_Url = "\"http://测试服务器/\""
def Base_UM = "baidu"
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"]
            
        }
    }

 //自动生成指定名称的release发布版的 apk文件
    android.applicationVariants.all { variant ->
        def appName
        if(variant.buildType.name.equals('release')){
            //在正式模式下,再根据服务器链接来判断是否为正式服务器
            if(Base_Url.contains("api")){
                if(Base_UM.equals("guanwang")){
                    appName = "NameV"+defaultConfig.versionName
                }else{
                    appName = "Name-"+Base_UM+"V"+defaultConfig.versionName
                }
            }else if(Base_Url.contains("sixsix")){
                appName = "测试_V"+defaultConfig.versionName
            }else {
                appName = "未知_V"+defaultConfig.versionName
            }
        } else {
            appName = "测试"
        }
//        if(variant.buildType.name.equals('release')){
//        } else {
//        }
        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"/>

最后的那个自动生成apk,是为了更加方便。因为要生成不同来源的apk进行上传,为了不用每次生成改名字,直接这么生成名字。

猜你喜欢

转载自blog.csdn.net/R_ine/article/details/81412650
今日推荐