获取版本号_flutter 获取应用程序版本号/版本名字

在Flutter中获取应用程序的版本号和版本名,通常需要借助package_info包。然而,修改`local.properties`或`gradle`文件可能无法立即更新获取到的版本信息。正确做法是直接在`app.gradle`文件中写死版本号,对于iOS,需关注Generated.xconfig。关键在于理解Flutter的提示,versionCode对应`+号前`,buildNum为`+号后数字`。修改后执行`flutter clean ios`以使更改生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个用到一个三方依赖包https://pub.dev/packages/package_info

package_info: ^0.4.0+13 
PackageInfo.fromPlatform().then((PackageInfo packageInfo) { String appName = packageInfo.appName; String packageName = packageInfo.packageName; String version = packageInfo.version; String buildNumber = packageInfo.buildNumber;});

这里面是有坑的.

首先是android.android的同学都知道修改android的版本号和版本名称是一般是配置在 local.properties文件里面.很多人都以为只要去修改local.properties文件.

sdk.dir=/Users/mac/Library/Android/sdkflutter.sdk=/Users/mac/flutterflutter.versionName=1.0.0flutter.versionCode=1flutter.buildMode=debug

如果是这样,那么你就错了.

你会发现你修改了之后,去获取的版本信息依然是不变的

当然对android还有一种最笨的方法,那就是直接去修改gradle文件,里面写死,默认情况下 ,app.gradle里面是这样的

def flutterRoot = localProperties.getProperty('flutter.sdk')if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")}def flutterVersionCode = localProperties.getProperty('flutter.versionCode')if (flutterVersionCode == null) { flutterVersionCode = '1'}def flutterVersionName = localProperties.getProperty('flutter.versionName')if (flutterVersionName == null) { flutterVersionName = '1.0'}

你写死的话就是.def flutterVersionCode = 1.1.0,不再去配置文件里面读取

ios也是一样的.你会发现你去配置了版本号信息之后,运行生成的app其实版本号依然没有发生变化.可以去看下 Generated.xconfig

// This is a generated file; do not edit or check into version control.FLUTTER_ROOT=/Users/mac/flutterFLUTTER_APPLICATION_PATH=/Volumes/Macintosh HD/Users/smartsoft/boss_appFLUTTER_TARGET=lib/main.dartFLUTTER_BUILD_DIR=buildSYMROOT=${SOURCE_ROOT}/../build/iosFLUTTER_FRAMEWORK_DIR=/Users/mac/flutter/bin/cache/artifacts/engine/ios-releaseFLUTTER_BUILD_NAME=1.0.0FLUTTER_BUILD_NUMBER=1

然后我想flutter不可能这么笨吧,生成的android和ios的版本号还要分别去配置??

所以.问题到底在哪呢??

在于我们都太粗心了,我们还是应该更细心一点的,我们其实应该多去阅读flutter给的提示信息.

2d14f90bba2233611fd0828fed016f10.png

仔细阅读这段话,你就发现人家说得很明白了

version: 1.0.+3

+号前面对应的就是versioncode 后面那个3就是buildNum

大家还是要多看文档.

最后还要补充一点,修改了之后要执行一下flutter clean ios才可以生效

Flutter 中,你可以通过 Android Gradle 插件 (Android.bp) 或者 Dart 的 platform_channel 来获取 Android SDK 版本号。以下是两种常见方法: **1. 使用 Android Gradle 插件:** 在 `build.gradle` 文件中的 `defaultConfig` 部分查找 `targetSdkVersion` 属性,它的值就是 Android SDK 的版本号。例如: ```groovy defaultConfig { // ... targetSdkVersion 30 // 这里就是 SDK 版本号 } ``` **2. 使用 Dart 的 platform_channel:** 如果你需要在运行时动态获取,可以创建一个 Android 应用模块,并使用 `MethodChannel` 来与 dart 主程打交道。首先,在 Android 库中创建一个 `MainActivity.kt` 并初始化 MethodChannel: ```kotlin import io.flutter.embedding.android.FlutterActivity import io.flutter.plugin.common.MethodChannel class MainActivity: FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { val methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "getSDKVersion") methodChannel.setMethodCallHandler { call -> val result = if (call.method == "getSDKVersion") call.result.success(ApplicationInfo.currentApplication().targetSdkVersion.toString()) else call.result.notFound() } } // ... } ``` 然后,在 dart 代码中,通过 `MethodChannel` 调用该方法: ```dart import 'package:flutter/services.dart'; Future<int> getAndroidSDKVersion() async { final channel = MethodChannel('getSDKVersion'); try { return int.parse(await channel.invokeMethod('getSDKVersion')); } on PlatformException catch (_) { throw Exception('Failed to fetch Android SDK version.'); } } // 使用示例 int sdkVersion = await getAndroidSDKVersion(); print('Current SDK Version: $sdkVersion'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值