推广

拒绝魔改,flutter多渠道构建版本

iseeyu2年前 (2024-02-22)推广125

AS.png

在 additional run args 里面添加 --dart-define=DART_DEFINE_APP_ENV=debug

然后重复添加 release.

如下图

编译的时候选择对应的选项.

vs code

替换 launch.json 里面的内容


{

    // 使用 IntelliSense 了解相关属性。

    // 悬停以查看现有属性的描述。

    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",

    "configurations": [

        {

            "name": "flutter_app_2_0_debug",

            "request": "launch",

            "type": "dart",

            "args": [

                "--dart-define",

                "DART_DEFINE_APP_ENV=debug",

            ]

        },

        {

            "name": "flutter_app_2_0_server",

            "request": "launch",

            "type": "dart",

            "args": [

                "--dart-define",

                "DART_DEFINE_APP_ENV=server",

            ]

        },

        {

            "name": "flutter_app_2_0_release",

            "request": "launch",

            "type": "dart",

            "args": [

                "--dart-define",

                "DART_DEFINE_APP_ENV=release",

            ]

        }

    ]

}

在调试模式里面选择对应的环境.

原生多渠道

上面只能修改flutter 自己的环境, 有时候我们需要用到第三方库,需要再原生环境里面配置不同的数据,这时候怎么办呢.别急.来看看我怎么替换原生环境数据的

以我项目为例, 我接入的融云sdk 需要配置不同环境的key.

iOS

ios 是通过 xcconfig 来生成变量的.

我们再 user-define 里面发现 DART-DEFINES 里面会多一个 flutter.inspector.structuredErrors 值, 这个貌似不符合xcconfig的key定义.所以处理方式是把这个值给处理掉. 然后根据dart-defines 获取当前环境 然后通过脚本生成xcconfig.

如图. 新建一个 scheme.

在如图位置 添加脚本.

脚本代码


# Type a script or drag a script file from your workspace to insert its path.

function urldecode() { : "${*//+/ }"; echo "${_//%/\\x}"; }

IFS=',' read -r -a define_items <<< "$DART_DEFINES"

debug_env=DART_DEFINE_APP_ENV=debug

debug_server_env=DART_DEFINE_APP_ENV=debugServer

for index in "${!define_items[@]}"

do

    define_items[$index]=$(urldecode "${define_items[$index]}");

done

if [ ${#define_items[*]} > 1 ]; then

    # # echo ${#define_items[*]}

    # echo $define_items

    if [ ${define_items[0]} = $debug_env ]; then

        define_items[1]=RONGYUN=@"\"lmxuhwagl66vd\""

    elif [ ${define_items[0]} = $debug_server_env ]; then

        define_items[1]=RONGYUN=@"\"lmxuhwagl66vd\""

    else

        define_items[1]=RONGYUN=@"\"z3v5yqkbz22m0\""

    fi

    # unset define_items[1]

fi

# if [ ${#define_items[*]} > 0 ]; then

#    define_items

# fi

# fi

# echo ${define_items[1]}

# printf $define_items

# unset define_items[1]

# printf $define_items

# printf "$s\n" "${define_items[@]}"

printf "%s\n" "${define_items[@]}" > ${SRCROOT}/Flutter/DartDefines.xcconfig

这样就在 flutter 目录生成了 DartDefines.xcconfig文件

Debug.xcconfigRelease.xcconfig 分别引用这个文件.

编译后 就可以看到 RONGYUN 被添加到 用户定义的key里面去了

使用

在 Flutter 目录新建一个 Dart.xcconfig文件


DART_DEFINE_APP_ENV=release

#include "DartDefines.xcconfig"

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) RONGYUNKEY='$(RONGYUN)'

Debug.xcconfigRelease.xcconfig 分别引用这个文件.


NSString * rongyunKey = [RONGYUNKEY stringByAppendingPathExtension:@""];

    //生产环境

    [[RCIMClient sharedRCIMClient] initWithAppKey:rongyunKey];

android

安卓主要通过gradle 来生成

定义多渠道的值

在项目根目录新建一个 dart.properties 文件

添加如下内容


debug=rongyun=lmxuhwagl66vd,

debugServer=rongyun=lmxuhwagl66vd,

release=rongyun=z3v5yqkbz2

通过gradle 来生成环境值

在 app 下面的 build.gradle 的 android 里面添加如下内容


/// 设置默认配置参数

    def dartDefine = [

            DART_DEFINE_APP_ENV: 'debug',

    ]

    if (project.hasProperty('dart-defines')) {

        dartDefine = dartDefine + project.property('dart-defines')

                .split(',')

                .collectEntries { entry ->

                    def pair = URLDecoder.decode(entry).split('=')

                    [(pair.first()): pair.last()]

                }

    }

    println(dartDefine)

    def dartFile = rootProject.file("dart.properties")

    def dartProperties = new Properties()

    dartProperties.load(new FileInputStream(dartFile))

    println(dartProperties)

    def currentEvn = dartDefine.DART_DEFINE_APP_ENV

    println(currentEvn)

    def currentProperties = dartProperties["$currentEvn"]

//

    println(currentProperties)

    dartDefine = dartDefine + currentProperties

            .split(',')

            .collectEntries { entry ->

                def pair = URLDecoder.decode(entry).split('=')

                [(pair.first()): pair.last()]

            }

    println(dartDefine)

在 defaultConfig 中的 manifestPlaceholders 添加 RONGYUN : dartDefine.rongyun.

androidmanifest.xml 中定义 meta


<meta-data

            android:name="RONGYUN"

            android:value="${RONGYUN}" />

java中使用


val appInfo: ApplicationInfo = this.packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)

val rongyunKey: String? = appInfo.metaData.getString("RONGYUN")

RongIMClient.init(this, "$rongyunKey")

这样就完全做到了多渠道构建!

码字不易!!!!

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56381.html

相关文章

淘宝上开店怎么开淘宝新店铺如何运营

淘宝上开店怎么开淘宝新店铺如何运营

怎样开网店,淘宝网店怎么开,如何开淘宝店铺,网店怎么开啊流程是怎样,如何开网店不用囤货,手机怎么开网店 开网店因为门槛低、收益大,成为众多年轻人创业的首选。而在今天,在平台上开网店已经很是人性与便捷,甚至可以说一部手机即可轻松开店。有意向开网店其实非常容易,...

10个顶级商业思维,顶尖高手操控人性,赚大钱的2个核心秘密

马上揭秘!各行各业高手一直操控人性的核心秘诀。他们在悄无声息的影响观众的大脑认知,做出他们想要的行为。而且,在悄悄的赚大钱。99%的人都被蒙在鼓里,毫无察觉。 接上篇,继续分享10个顶级商业。如果你不知道其他几个思维,请翻看之前分享的文章。 顶级商业思维四:本质思维...

清单:市场营销人必看的10部记录片

清单:市场营销人必看的10部记录片

很多人都喜欢通过看视频来学习新,视频学习的好处是能够让我们更直观,更轻松,更灵活的完成学习。下面是推荐人,特别是从事线上业务的市场营销人必看的10部纪录片。No 10:《你瞧,网络世界的幻想》 Lo and Behold, Reveries of the Connected...

重磅揭秘:抖音自播流量密码

重磅揭秘:抖音自播流量密码

品牌自播已成为全网营销的承接地。 如今的品牌自播正发挥着更多的功能,销售增长、营销承接、品牌建设、私域引流等功能。 巨量千川的推出让“品效合一”有了新的可能性,传统的营销方式是流量平台与承接平台割裂,一个平台做推广,另一方平台做流量承接和转化; 即便消费者已经熟悉了跳转旗舰店的链路,...

如何看待一个网站的质量优化。

如何看待一个网站的质量优化。

在优化的过程中,我们常说后应该看哪些指标。在这里,SEO给你分析和分析,希望能对你有所帮助。 首先看网站的权重,当然这收录百度权重和谷歌公关价值。当百度权重越大,来自百度的流量就越大。同时,百度权重越高可以带动网站其他关键词排名的提高。如果Google的PR很高,说明这个网页的质量非常好...

六大移动营销策略

六大移动营销策略

你是否正在使用移动来增加浏览量?我猜应该是吧。疫情改变了人们的购物方式。为了吸引客户的注意力并增加浏览,现在比以往任何时候都更加重要。在全球范围内,随着继续投资于其应用App策略,2022年在移动设备上购物应用App的时间与上一年相比增加了45%。在《Appify跨境独立站...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片