Android中使用Flutter的版本

4 篇文章 0 订阅
3 篇文章 0 订阅

使用Flutter开发Android项目的同学相信都有这个体会: 打包的apk并没有使用Flutter中设置的版本,每次都要单独gradle中维护Android的版本名和版本号。

先看下我们创建项目后,系统是如何设置版本的:
Flutter
Flutter项目的版本是在yaml文件中设置的

version: 1.0.0+1

这种带**+**形式命名的版本在Flutter中很常见,在我们引入依赖库都是这样的,但Android工程中却很少见,但作为应用开发这个version实际上没有用到。
Android

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

android {
	defaultConfig {
		versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
	}
}

从上面gradle中可以看出在Android项目中是通过获取在local.properties中定义flutterVersionCode和flutterVersionName来分别对应versionCode和versionName的。显然我们每次更改版本都需要在local.properties中进行更改。

我们希望的在yaml中配置版本名和版本号,打包时gradle直接使用yaml中的配置。

解决方法

需要在gradle中读取yaml,并解析。

  1. 在gradle中引入yaml的解析库
    由于只是在打包脚本中使用解析库,项目代码中并没有使用,因此需要将依赖库放在buildscript中。
    在工程的build.gradle中添加
buildscript {
   	...
    dependencies {
        ...
        classpath 'org.yaml:snakeyaml:1.17'
    }
}
  1. 加载并解析yaml文件
    在项目中的gradle中做解析工作
import org.yaml.snakeyaml.Yaml

BufferedReader br = new BufferedReader(new FileReader("${rootDir.parent}/pubspec.yaml"))
Yaml yaml = new Yaml()
var yamlConfig = yaml.load(br)
def flutterVersionName = yamlConfig['version']

android {
	defaultConfig {
        versionName flutterVersionName
	}
}

这样apk中的versionName就和yaml中的version一致了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得食猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值