versioncode(Android 配置gradle如何实现VersionCode自增)

发布时间:2025-12-10 23:38:40 浏览次数:1

Android是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

我是因为构建多渠道包的时候有这个需求,平常工作多个渠道包频繁的打包,总会忘记versioncode提高一下,从而打包出来的apk无法覆盖原先的安装包,这里只介绍了自增VersionCode,网上还有动态设置versionName,有需要也可以看看其他人的实现。

以下介绍下配置Gradle自动增加versionCode的值

一、项目的根目录新建一个文件version.properties

二、文件内容写上初始的versioncode

三、主gradle配置

defgetVersionCode(){defversionFile=file('version.properties')if(versionFile.canRead()){defPropertiesversionProps=newProperties()versionProps.load(newFileInputStream(versionFile))defversionCode=versionProps['VERSION_CODE'].toInteger()defrunTasks=gradle.startParameter.taskNames//仅在assembleRelease任务是增加版本号,其他渠道包在此分别配置if('assembleInsectRelease'inrunTasks){versionProps['VERSION_CODE']=(++versionCode).toString()versionProps.store(versionFile.newWriter(),null)}returnversionCode}else{thrownewGradleException("Couldnotfindversion.properties!")}}android{....}

只在release模式下才自增,保证测试的时候versionCode不增加

四、调用

defcurrentVersionCode=getVersionCode()defaultConfig{applicationId'com.chongzzz.texas'minSdkVersion15targetSdkVersion25multiDexEnabledtrueversionCodecurrentVersionCodeversionName"1.0.1.21"}

补充知识:Android 动态替换 Manifest.xml中的值

根据情况替换 Manifest.xml 中的值

android 中有很多个渠道,每个渠道都有 debug 和 release 版本, 如果Manifest.xml 中每个版本有不同的值

一般的可以用 manifestPlaceholders = [APP_KEY : '对应的值'] 来替换,在 debug和 release 的时候也可以,但是多渠道的时候可能就会有些问题了

解决方式

1、简单

两个渠道

flavorDimensions'defaultDimension'productFlavors{alibaba{}tencent{}}

每个渠道的版本的不同的值

ext{alibabaDebug='alibabaDebug'alibabaRelease='alibabaRelease'tencentDebug='tencentDebug'tencentRelease='tencentRelease'}

替换值

afterEvaluate{project.android.applicationVariants.all{variant->//最简单的方法variant.mergedFlavor.manifestPlaceholders=[APP_KEY:project."${variant.name}"]}}

2、自定义任务,和上面的其实差不多

两个渠道

flavorDimensions'defaultDimension'productFlavors{alibaba{}tencent{}}

每个渠道的版本的不同的值

ext{alibabaDebug='alibabaDebug'alibabaRelease='alibabaRelease'tencentDebug='tencentDebug'tencentRelease='tencentRelease'}

替换值

afterEvaluate{project.android.applicationVariants.all{variant->//自定义任务tasks.create("${variant.name}ManifestPlaceHolder",ManifestPlaceHolder){current=variant}variant.outputs.first().processManifest.dependsOn"${variant.name}ManifestPlaceHolder"}}classManifestPlaceHolderextendsDefaultTask{@Inputdefcurrent@TaskActiondefchangeManifestPlaceHolder(){current.mergedFlavor.manifestPlaceholders=[APP_KEY:project."${current.name}"]}}
versioncode
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477