• Android多渠道打包且根据不同产品打包不同的assets资源目录


    因为项目中存在多种环境,既要区分bebug与release版本,release又要区分测试环境与生产上线环境,每次打包都得浪费不少的等待时间;并且哪个版本有问题还得去切换环境一个个打包,关键是还得牢记每次切换环境需要修改的内容,尽管每次都检查仔细,但总有可能疏忽的时候,一旦有问题既浪费自己的时间又浪费测试人员的时间;因此不得不去研究一键切换环打包的功能

    一、区别debug与release

    首先在build.gradle中配置签名信息,为debug配置差异属性

    android { 
     
    defaultConfig {
        versionName "v2.2.2" 
        versionCode 20
    }
     
    signingConfigs {
            release {
                storeFile file('/Users/ram/WorkSpace/AndroidWorkSpace/....keystore')//签名key所在目录
                keyAlias '...'
                keyPassword '...'
                storePassword '...'
            }
        }
     
    buildTypes {
        release {
            buildConfigField "Boolean", "isDebug", "false"//参数1:类型 参数2:变量名 参数3:变量值
            debuggable false
            minifyEnabled true //删除无用代码
            shrinkResources true//删除无用资源
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release//签名
        }
        debug {
            buildConfigField "Boolean", "isDebug", "true"//参数一:类型,参数二:变量名,参数三:变量值
            debuggable true // debug模式下,显示log
            versionNameSuffix "-debug" // 为版本名添加后缀
            minifyEnabled false  
            zipAlignEnabled false  
            shrinkResources false   
        }
    }

    签名文件及其他通用代码应该都会熟悉,这里主要区别定义的一个常量

    buildConfigField "Boolean", "isDebug", "false"//参数一:类型,参数二:变量名,参数三:变量值

    这是用于区别是否调试版本,用于是否打印log日志时所用,java中调用方式:

    public static final boolean isDebug = BuildConfig.isDebug;


    在代码中就可以通过这个值判断是否需要开启Log;还有一个versionNameSuffix "-debug",这个是我的项目中需要显示版本号,在versionName后追加了一个名称,用以区分

    二、多渠道区分,配置不同产品的差异属性

    同样是在grdle中android{}目录里面添加

        productFlavors {//设置不同产品的特性
            uat {//测试环境
                buildConfigField "String", "HOST", "".....""
                versionName "v2.2.2.2" 
            }
            prod {//正式上线环境
                buildConfigField "String", "HOST", "".....""
                versionName "v2.2.2" 
            }
        }

    这里配置两个不同产品渠道,根据自己的需求可增加删除,其中buildConfigField "String", "HOST", "".....""

    同上面isDebug一样是根据环境差异增加的一个常量,我这里是用于访问服务器的地址更改;根据自己需求也可以增删改,这里要注意的是第三个参数字符串的双引号需要用转义字符;

    同样在java中的调用方法:

    public static final String ROOTHOST = BuildConfig.HOST;
    其中versionName是对版本号名称的重命名,这是我项目中对不同环境做版本号区分所用;

    三、打包apk文件的重命名

    继续在grdle中android{}目录里面添加

     //apk文件重命名
        applicationVariants.all { variant ->
            variant.outputs.all {
                def fileName = "xxx-" + versionName + ".apk"
                outputFileName = fileName
    //            output -> output.outputFileName = "NYTalk_" + buildType.name + "_" + defaultConfig.versionName + "_" //+ new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) + ".apk"
            }
        }

    这个是用于打包的时候根据自己的需求重命名apk,简单点就自己项目名称加版本号,需要时间等其他参数也可用注释掉的代码,或者自行个更改;需要注意的是defaultConfig.versionName调用的是开始默认的versionName,需要用自己后面修改过的versionName命名,不加defaultConfig即可;

    四、assets资源目录做区分

    前面主要做的区分都是一些java代码可调用的变量;那么原生assets资源目录如何根据环境做区分:

    1.项目结构视图调整为project,在src目录下,mian的同级目录创建uat与prod文件夹(根据productFlavors自己定义的不同产品渠道创建),并创建assets资源目录,这里资源目录里就可以放置不同渠道的同名不同资源,例如:

     

    2.然后继续在grdle中android{}目录里面根据flavors指向定义的资源目录

    sourceSets {
     assets.srcDirs = ['src/assets']
        uat{
            assets.srcDirs = ['src/ust/assets']
        }
        prod {
            assets.srcDirs = ['src/prod/assets']
        }
    }

    差异的资源根据产品做区分存放,通用的assets资源按原来的存放方式不变

    3.不过我的项目因为是以前的eclipse迁移过来的,src下直接存放是java代码,res与src是同级目录,所以我这里创建的uat与prod文件夹是与src、res同级的,然后在gradle中的配置如下:

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
        uat{
            assets.srcDirs = ['uat/assets']
        }
        prod {
            assets.srcDirs = ['prod/assets']
        }
     
    }

    五、环境一键切换,更改Build variants中相应即可,运行手机上切换平台就行

     

    六、一键打包不同平台的apk

    Gradle---项目名称下的Tasks---build---assemble,也可以根据不同的assemble生成特定apk

    编译生成的apk在build--outputs下查看:

    打包好的apk可以自行验证assets资源是否是对应的平台资源,可直接解压apk文件查看

  • 相关阅读:
    搭建vue环境
    git常用命令整理
    highcharts 当Y轴全部没有数据的时候 数据标签显示最下面 而不是居中显示
    highcharts 不显示X轴 Y轴 刻度
    关于placeholder中 文字添加换行 用转义字符&#13;&#10;代替<br>
    highcharts 柱状图 折线图 混合 双纵轴显示
    单行、多行文字溢出 显示省略号
    Highcharts 饼图 文字颜色设置
    多行文本,垂直居中显示,文字超出高度显示省略号
    学习方法-5:比较学习法
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/11400830.html
Copyright © 2020-2023  润新知