当前位置: 首页 > news >正文

做网站挣钱来个好心人指点一下呗sem广告

做网站挣钱来个好心人指点一下呗,sem广告,dw网页设计模板100套,凡客诚品服装购物网flutter开发实战-实现多渠道打包及友盟统计#xff08;亲测有效#xff09; 最近开发过程中#xff0c;需要引入友盟进行统计服务。友盟统计还需要区分不同渠道的打开应用的情况#xff0c;所以需要处理多渠道打包的问题。 一、引入友盟统计 在工程的pubspec.yaml中引入…flutter开发实战-实现多渠道打包及友盟统计亲测有效 最近开发过程中需要引入友盟进行统计服务。友盟统计还需要区分不同渠道的打开应用的情况所以需要处理多渠道打包的问题。 一、引入友盟统计 在工程的pubspec.yaml中引入插件 // 在工程 pubspec.yaml 中加入 dependencies:umeng_common_sdk: ^1.2.3 导入及调用初始化友盟 import package:umeng_common_sdk/umeng_common_sdk.dart; 调用友盟统计 overridevoid initState() {super.initState();initPlatformState();UmengCommonSdk.initCommon(5e3f96f3cb23d2a070000048, 5e3f96f3cb23d2a070000048, Umeng);UmengCommonSdk.setPageCollectionModeManual();} 这里需要填写channel渠道名后续我们需要根据打包的渠道来设置。 二、flutter代码中获取渠道 Flutter命令工具增加了自定义参数的功能 --dart-define可以用这个命令参数在打包或运行 App 时设置参数。 如 flutter run --dart-defineCHANNELYYB 在lib/main.dart中定义变量配置可以方便调用 /// 定义环境变量配置 class EnvironmentConfig {static const CHANNEL String.fromEnvironment(CHANNEL); } 在需要的地方调用获取渠道名 String currentChannel ;overridevoid initState() {// TODO: implement initStatesuper.initState();// 获取CHANNEL 参数值String channel EnvironmentConfig.CHANNEL;print(channel:${channel});currentChannel channel;setState(() {});} 显示渠道名 Container(height: 136,width: 300,color: Colors.lightGreen,alignment: Alignment.center,child: Text(当前渠道${currentChannel},style: TextStyle(fontSize: 12, color: Colors.white),),), 最终获得渠道显示效果图如下 三、android中gradle配置 我们需要在android/app/build.gradle中添加一下配置 /// 获取渠道参数使用,这里设置一下默认值 def dartEnvironmentVariables [CHANNEL: guanfang-app, ]if (project.hasProperty(dart-defines)) {dartEnvironmentVariables dartEnvironmentVariables project.property(dart-defines).split(,).collectEntries { entry -def pair new String(entry.decodeBase64(), UTF-8).split()[(pair.first()): pair.last()]} } 在输出的apk中添加对应渠道名在android一下${dartEnvironmentVariables.CHANNEL}进行区分不同渠道的apk名称。 ext {publishName AppDemoLab }android {android.applicationVariants.all {variant -variant.outputs.all {def buildTime new Date().format(yyyyMMddHHmm)outputFileName ${project.publishName}_${variant.versionName}_${variant.versionCode}_${buildTime}_${variant.buildType.name}_${dartEnvironmentVariables.CHANNEL}.apk}} } 打包与测试命令 # 调试例子1设置渠道为应用宝。 flutter run --dart-defineCHANNELYYB#打包例子1打包应用宝渠道包 flutter build apk --dart-defineCHANNELYYB 可以是多个–dart-define如 #打包例子2打包应用宝渠道包,DEBUG参数是Y flutter build apk --dart-defineCHANNELYYB --dart-defineDEBUGY 四、apk.sh多渠道打包脚本 在脚本中定义了渠道channels(YYB HUAWEI MI OPPO VIVO) 在工程目录下创建shell目录将apk.sh放到shell目录下。 在工程目录下创建prod目录prod目录下创建apk目录用于存放打包的渠道apk文件 apk.sh多渠道打包脚本如下 #!/bin/sh#---------------------请修改渠道数组----------------# channels(YYB HUAWEI MI OPPO VIVO)#当前工程绝对路径 project_path$(pwd)#安卓包product文件夹路径 prod_path${project_path}/prod/apk/ #Flutter打包生成的最初地址 release_path${project_path}/build/app/outputs/apk/release/clean_tips执行flutter clean(默认:n) [ y/n ] echo $clean_tips read -t 5 is_clean if [ ! -n ${is_clean} ];thenis_cleann fi while([[ $is_clean ! y ]] [[ $is_clean ! n ]]) doecho 错误!只能输入[ y/n ] echo $clean_tipsread is_clean donetips请输入选择渠道(默认0) [ ALL: 0 c_length${#channels[]}; for(( i0; i$c_length; i)) doif (($i $c_length-1 )); thentips${tips}${channels[i]}: $((i1)) elsetips${tips}${channels[i]}: $((i1)) ]fi done;echo $tips read -t 5 number if [ ! -n ${number} ];thennumber0 fi while(( $number 0 || $number $c_length )) doecho 错误!只能输入0到${c_length} echo $tipsread number done#如果有product/apk文件夹则删除然后再创建一个空文件夹 if [ -d ${prod_path} ]; thenrm -rf ${prod_path} fi #创建目录 mkdir -p ${prod_path}if [ ${is_clean} y ];thenecho 开始清理 flutter clean fiif (($number 0 )); thenecho 开始构建全部渠道包 for(( i0;i${c_length};i)) doecho 正在构建${channels[$i]} 渠道包flutter build apk --no-shrink --dart-defineCHANNEL${channels[$i]}cp -R ${release_path}*.apk ${prod_path}done; elseecho 正在构建${channels[$((number-1))]} 渠道包 flutter build apk --no-shrink --dart-defineCHANNEL${channels[$((number-1))]}cp -R ${release_path}*.apk ${prod_path} fi#判断apk目录下是否有文件 if [ $(ls -A $prod_path) ]; thenecho APK包已导出:$prod_path open $prod_path elseecho APK包导出失败 exit 1 fi exit 0 查看脚本可以看出 控制是否执行flutter clean 输入是全部渠道打包 打包后的apk拷贝到prod/apk文件夹下。 通过cd切换到shell目录下执行apk.sh脚本进行多渠道打包 ./shell/papk.sh 在prod/apk目录下可以看到打包的apk 参考https://github.com/sugood/flutter_shell 五、更改友盟渠道 在文中使用友盟时候需要传递渠道名我们通过EnvironmentConfig.CHANNEL拿到渠道名后作为参数传给友盟。 友盟即可根据渠道进行统计。 六、附录完整的gradle配置 android/build.gradle配置如下 buildscript {ext.kotlin_version 1.7.10repositories {maven { url https://maven.aliyun.com/repository/google }maven { url https://maven.aliyun.com/repository/central }maven { url https://maven.aliyun.com/repository/jcenter }}dependencies {classpath com.android.tools.build:gradle:7.2.0classpath org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version} }allprojects {repositories {maven { url https://maven.aliyun.com/repository/google }maven { url https://maven.aliyun.com/repository/central }maven { url https://maven.aliyun.com/repository/jcenter }} }rootProject.buildDir ../build subprojects {project.buildDir ${rootProject.buildDir}/${project.name} } subprojects {project.evaluationDependsOn(:app) }task clean(type: Delete) {delete rootProject.buildDir } android/app/build.gradle配置如下 def localProperties new Properties() def localPropertiesFile rootProject.file(local.properties) if (localPropertiesFile.exists()) {localPropertiesFile.withReader(UTF-8) { reader -localProperties.load(reader)} }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 keystoreProperties new Properties() def keystorePropertiesFile rootProject.file(key.properties) if (keystorePropertiesFile.exists()) {keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) }/// 获取渠道参数使用,这里设置一下默认值 def dartEnvironmentVariables [CHANNEL: GuanFang, ]if (project.hasProperty(dart-defines)) {dartEnvironmentVariables dartEnvironmentVariables project.property(dart-defines).split(,).collectEntries { entry -def pair new String(entry.decodeBase64(), UTF-8).split()[(pair.first()): pair.last()]} }ext {publishName AppDemoLab }apply plugin: com.android.application apply plugin: kotlin-android apply from: $flutterRoot/packages/flutter_tools/gradle/flutter.gradleandroid {compileSdkVersion 34ndkVersion flutter.ndkVersioncompileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}defaultConfig {// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).applicationId com.example.flutter_app_demolab// You can update the following values to match your application needs.// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.minSdkVersion 21targetSdkVersion flutter.targetSdkVersionversionCode flutterVersionCode.toInteger()versionName flutterVersionNamendk {abiFilters armeabi-v7a, arm64-v8a}}buildTypes {release {// TODO: Add your own signing config for the release build.// Signing with the debug keys for now, so flutter run --release works.signingConfig signingConfigs.debug}}android.applicationVariants.all {variant -variant.outputs.all {def buildTime new Date().format(yyyyMMddHHmm)outputFileName ${project.publishName}_${variant.versionName}_${variant.versionCode}_${buildTime}_${variant.buildType.name}_${dartEnvironmentVariables.CHANNEL}.apk}} }flutter {source ../.. } 七、小结 flutter开发实战-实现多渠道打包及友盟统计亲测有效根据自身需求调整后亲测有效可以根据渠道来做一些代码上的区分。 学习记录每天不停进步。 本文地址https://brucegwo.blog.csdn.net/article/details/138907985 快快微信扫码玩一玩小游戏吧 战机长空小绳套牛
http://www.hkea.cn/news/14312766/

相关文章:

  • 哪家公司做网站便宜l林州住房建设部官方网站
  • 深圳建设工程价格信息网站传奇小程序代理
  • 网上做调查问卷赚钱的网站广州文化网站模板
  • 怎么做网站推上海招聘网最新招聘2023
  • 网站开发支付宝支付西安百度seo排名
  • 贵阳网站建设贵阳网站建设哪家好vi设计品牌案例ppt
  • 互联网网站备案流程wordpress主题模板怎么用
  • 体育局网站建设wordpress分类添加关键词
  • 外贸业务怎么利用网站开发客户百度云服务器官网
  • wordpress多本小说站出售深圳特区建设
  • 手机移动端网站建设宣传网站推广投放
  • 凤山县住房和城乡建设局网站厦门网站建设公司怎么选
  • 哪个网站做浏览器主页好网站上线后如何换模版
  • 网站建设流程知乎wordpress建站教程简书
  • 网站建设ps模板下载微商城免费开通
  • 绿色系的网站wordpress中文图片不显示
  • 南京做网站询南京乐识淘宝特价版
  • 高度重视机关门户网站建设建筑模板的规格及价格
  • 学做网站教程网站建设需要云主机吗
  • 网站建设与运营策划书网站开发技术考试题目
  • 什么好的网站学做食品免费友链平台
  • 祁阳网站建设装修设计合同范本
  • 东莞做网站最好有哪些公司成都机房托管
  • 做的比较漂亮的网站wordpress网站背景设置方法
  • 图书馆网站建设需求分许服务器注册
  • 整站seo运营泰安红河网站建设
  • 好听好记的网站域名变量命名网站
  • 多平台网站建设培训网网站源码
  • 做旅游的网站单页面网站模板
  • 如何查询网站临淄信息港发布信息