请选择 进入手机版 | 继续访问电脑版

flutter-为flutter项目创建不同环境,实现ios/Android原生/flutter自动更改

[复制链接]
阿峻 发表于 2021-1-1 18:34:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
最终效果


  • flutter端,打开flutter项目,会看到以下三个自界说的选项:

  • 安卓端,打开对应的安卓项目(即打开android文件夹), 会看到Build Variants下,app有多个情况可选, 分别是test情况的profile、release、debug版; dev情况的profile、release、debug版 和 prod情况的profile、release、debug版

  • iOS端,用xcode打开对应的ios项目,即打开ios文件夹下的Runner.xcworkspace,可以看到3个Scheme…, 每个Scheme各个版(debug、profile、release)都可以设置差异的bundle id, app name、等

开始

这里我为项目添加了3个情况,dev、test和prod,三个情况所用的接口、项目名称、包名、icon不一致
用flutter打开项目,点击如下所示的Edit Configurations,创建3个name分别为dev、test、prod, flavor分别为dev、check、prod; (由于test在安卓不能设置为flavor的值,所以这里改成check)



为安卓设置情况

在android/app/build.gradle 下添加如下代码:
  1. flavorDimensions "appEnvironment"productFlavors {check {            dimension "appEnvironment"        }        prod {            dimension "appEnvironment"        }        dev {            dimension "appEnvironment"        }    }
复制代码
现在这里还未设置任何根据情况改变的值,这样就设置好了安卓端的多flavor, 如果要添加包名,项目名等, 就可以在这里设置了,关于更多设置可以网络搜索gradle 设置多渠道,
用安卓打开该项目,就可以看到如下: 在安卓端就可以使用他来实现多情况设置了,接下来设置ios的,都设置好了,再设置详细变量

这个时候执行flutter build apk 是会报错的,如果没有报错,需要执行flutter clean一下,错误如下:

观察该项目build目次下的build/app/outputs/flutter-apk/可以看到会有好几个apk,分别是app-check-release.apk, app-check-release.apk和app-prod-release.apk;
报错原因: 这是因为flutter build apk会把所有的flavor包都生成, (flutter build apk 不知道版本情况下是默认生成release版本的),所以会看到这3个版本, 但是生成之后,他却不知道用哪个了,所以报错
办理办法: flutter build apk --flavor dev/check/prod 指定情况;
为iOS设置情况


  • 添加scheme, 名称分别为dev、check、prod


  • 添加完成可以看到如下:

  • 选中PROJECT下的info,找到configurations选择,点击+号, 分别Duplicate 3份 Debug、Release、Profile, 复制之后给每个版的3分更改名称分别为check、dev、prod



  • 之后就可以为每个configurations设置单独的bundle id、证书、签名等信息


  • 我这里没有更改 bundle id,只是为debug情况和release情况设置了差异的签名,所以最后看到的效果如下:

  • 除此之外,Podfile还需要更改如下位置:

    更改后为:

    此时可以删掉原来默认的runner的scheme, 和Debug、Profile、Release三个默认configurations
之后执行pod install, 就会看到, Pod的PROJECT下的info多出了如下内容:

以上,ios和安卓设置多情况就完成了,接下来就是使用多情况实现自界说需求了,比如更改请求api,更改包名
从flutter端获取当前情况

ios端

在info.plist 文件添加一条key为Flavor, value为$(PRODUCT_FLAVOR),如下:

之后来到Runner下的Build Setting, 选择Add User-Defined Setting,

为每个configuration添加值

写一个channel, 以供flutter方获取ios的flavor值
打开appdelegate,添加如下代码, 我这里是swift语言,用oc语言的,翻译成oc语言就可以

  1. let channelName = "flavor"    let rootViewController : FlutterViewController = window?.rootViewController as! FlutterViewController    let methodChannel = FlutterMethodChannel(name: channelName, binaryMessenger: rootViewController as! FlutterBinaryMessenger)        methodChannel.setMethodCallHandler {(call: FlutterMethodCall, result: FlutterResult) -> Void in        result(Bundle.main.infoDictionary?["Flavor"])    }
复制代码
安卓端

在mainActivity里添加如下代码

  1. MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "flavor").setMethodCallHandler { call, result ->  result.success(BuildConfig.FLAVOR) }
复制代码
这里说明一个BuildConfig,这个文件,在选择了flavor后,会自动生成,这里只需要引用一下就可以,

flutter端通过channel读取情况


  1. const MethodChannel('flavor')      .invokeMethod('getFlavor')      .then((String flavor) {    print('STARTED WITH FLAVOR $flavor');    if (flavor == 'prod') {           } else if (flavor == 'check') {           } else if (flavor == 'dev') {           }  }).catchError((error) {    print(error);    print('FAILED TO LOAD FLAVOR');  });
复制代码
这样就拿到了当前运行情况,flutter也可以设置自己的一些设置
以上,就完成了,之后运行打包,只要选择对应configuration就可以,下令行需要指定flavor, 比如: 和
  1. flutter build apk --flavor dev
复制代码
  1. flutter build ios --flavor dev
复制代码
更多资料 设置 flavors 构建双端
博客地点: csdn
GitHub: flutter_muti_env

来源:https://blog.csdn.net/ai_pple/article/details/112009087
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )