Gradle中的配置与多版本开发


  最近做的项目牵扯到多版本开发,app要分两个版本,两个版本功能基本相同,但是访问的url不同,显示的功能有些许不同,同时需要在一个手机能够同时安装,于是便研究了一下Gradle的配置:

一.BuildConfig全局变量的定义:

 android在运行时默认会有一个常量的BuildConfig,默认有个常量DEBUG,在buildtypes为debug和release时分别为true和false我们可以利用这个变量来设置是否打印日志等功能。

如果想要添加额外的变量我们可以在buildTypes或者productFlavors中添加:

buildConfigField("boolean", "SHOWLOG", "false")//不在打印Log

二.manifest中变量的动态配置:

  有时候我们需要在清单文件中根据不同的版本使用不同的资源,设置APP不同的名称,这时就能够使用manifestPlaceholders来存储一些会变动的常量:

manifestPlaceholders = [
        'APPLICATION_ID'  : "${APPLICATIONID_YUNYING}",
        'BAIDUMAP_AK'     : "${BAIDMAP_KEY_YUNYING}",
        'APPLICATION_NAME': "${APPNAME_YUNYING}",
        'APP_ICON'        : "@drawable/push",
]
在清单文件中使用也很简单,前面加$然后替换就行了。
 <application
        android:name=".base.App"
        android:allowBackup="true"
        android:icon="${APP_ICON}"
        android:label="${APPLICATION_NAME}"
        android:persistent="true"
        android:screenOrientation="portrait"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:label,android:icon">

三.buildtype和productflavors的设置

为了减小apk的大小我一般会在debug的时候支持x86架构的cpu发布版只支持armeabi-v7a

  buildTypes {
        release {
            buildConfigField("boolean", "SHOWLOG", "false")//不在打印Log
            shrinkResources false
            signingConfig signingConfigs.config
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            ndk {
                // 设置支持的SO库架构
                abiFilters 'armeabi-v7a'//,'x86' ,'armeabi', 'x86_64', 'arm64-v8a'
            }

        }

        debug {
            buildConfigField("boolean", "SHOWLOG", "true")//调试状态打印Log
            shrinkResources false
            signingConfig signingConfigs.config

            ndk {
                // 设置支持的SO库架构
                abiFilters 'armeabi-v7a', 'x86' //,'armeabi', 'x86_64', 'arm64-v8a'
            }
        }
    }

而不同的版本中的productflavors我一般会添加不同的动态常量

四.打包时签名的设置

  因为我添加了百度地图,我想在编译调试状态也添加签名文件,于是我在debug编译时也添加了签名文件的配置

 signingConfigs {
        config {
            storePassword '123456'
            keyAlias 'test'
            keyPassword '123456'
            storeFile file('/Users/z2wenfa/Downloads/test.jks')
        }
    }

五.打包时apk名称的自定义:

根据不同的版本自定义不同的apk名称

 applicationVariants.all { variant ->
            variant.outputs.each { output ->

                // 获取渠道
                def flavor = variant.productFlavors[0]
                def flavorName
                if (flavor == null) {
                    flavorName = "defaultName"
                } else {
                    flavorName = flavor.name
                }

                def appname
                if (flavorName.equals("yunying")) {
                    appname = APP_LOGIN_SHOW_NAME_YUYING
                } else {
                    appname = APP_LOGIN_SHOW_NAME_YEWUYUAN
                }

                def outputFile = output.outputFile
                def fileName
                if (outputFile != null && outputFile.name.endsWith('.apk')) {

                    fileName =
                            "${appname}-${variant.buildType.name}-v${variant.versionName}.apk";
                    println fileName
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }


六.gradle中的def 定义变量的使用

自定义几个变量 之后到其他设置处使用 例如添加几个版本号的设置,减少耦合,版本变化只需要修改变量就行了,减少误操作

def APPVERSIONCODE = 9; //小版本号

def APPMIDDLEVERSION = 0//中版本号
def APPGENERATION = 1 //大版本号


七.通过productflavors进行多版本开发,多版本使用不同资源文件

  既然要开发不同的版本那么代码和需要使用的资源就会不同,我们需要在src下与main同级建立几个文件夹来进行开发,根据不同的版本编写不同的代码,


当我们需要开发指定版本时我们只需要点击修改当前的开发版本就行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值