前言
Flutter 是 Google 使用 Dart 语言开发的一套移动应用开发框架,介绍Flutter开发的文章已经汗牛充栋, 所以这里我们主要不是来讨论怎么去开发一个Flutter应用,而是来解决在开发过程中遇到的问题。
现状
环境配置
在应用开发过程中, 我们往往是有很多配置的,比如开发环境,一般我们分为线上和测试,在不同的环境中链接不同的服务器,也可能根据不同的环境本地加载不同的代码,以前我们做Android或者IOS 在本地创建一个配置文件,比如我们在Android下面创建一个config.properties
# env, switch
ENV=ONLINE
#ENV=TEST
应用在打包的时候读取配置,注入BuildConfig自动调整环境:
def configProperties = new Properties()
def versionPropertiesFile = rootProject.file('../config.properties')
if (versionPropertiesFile.exists()) {
versionPropertiesFile.withReader('UTF-8') {
reader -> configProperties.load(reader)
}
}
def evn = configProperties.getProperty("ENV")
if (evn == null) {
evn = 'TEST'
}
// 在应用的build.grade的defaultConfig节点根据环境注入我们的需要的配置,也可以同时注入BuildConfig
defaultConfig {
applicationId "xxxxxx"
minSdkVersion 21
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
manifestPlaceholders = [COM_NETEASE_NIM_APP_KEY: evn == 'ONLINE' ? onlineKey : testKey]
}
上述方式就需要Android一份配置,IOS一份配置,每次有变更,两边都需要配置和修改。
版本配置
我们知道在Android中我们配置版本号,在应用的build.gradle的defaultConfig节点配置versionCode和versionName:
android {
compileSdkVersion 28
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
applicationId "xxxxx"
minSdkVersion 21
targetSdkVersion 28
versionCode 5
versionName 1.0.0
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
而在IOS中我们需要在Info.plist中进行配置CFBundleShortVersionString与CFBundleVersion,一般我们在xcode的runner-General手动配置或者脚读取:
上面只是Android端和IOS端,目前我们已经采用Flutter来进行开发,在Flutter中很多时候我们也有需要读取当前的版本号,这时我们怎么办? 我们一般都采用读取平台的版本来实现,这里我们可以采用在pubspec中添加dependencies:
dependencies:
flutter:
sdk: flutter
package_info