推广

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

iseeyu3年前 (2024-02-22)推广136

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.xcconfig 和 Release.xcconfig 分别引用这个文件.

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

使用

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


DART_DEFINE_APP_ENV=release

#include "DartDefines.xcconfig"

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

在 Debug.xcconfig 和 Release.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

相关文章

西安企业做百度推广,一个月花三千和花三万到底差在哪?

4|最近跟几个西安的老板聊天,发现一个挺有意思的现象:同样做百度推广,有人一个月花三千块,询盘不断;有人一个月砸三万,水花都没见着。问他们区别在哪,大多数人说不清楚,只知道'钱花了,没效果'。 5| 6|百度推广这东西,说复杂也复杂,说简单也简单。核心就一件事:让你的潜在客户搜某个词的时候,你的信息...

我想当策划,大学应该选什么专业?

我想当策划,大学应该选什么专业?

学,广告,传播,公关,这些专业其实都可以。另外也可以学像汉语言文学,以及一些跟文学相关的一些专业,会对你找工作有帮助。但是,你想从事这个这份职业,除了专业的学习之外,更多的是,你要在上学的时候积极参与一些更营销策划相关的社会实践。比如说你可以做一些兼职,比如说帮别人去写稿,...

服装市场营销策略分析,“定位不慎满盘皆输”

服装市场营销策略分析,“定位不慎满盘皆输”

不同的区域需要不同的策略,而不同的营销策略需要不同的销售思路来配合。因此,在研究女装产品销售思路之前,最好先对于市场与营销策略做一次深入地了解。1.市场区域化(market segmentation):目标营销的第一步,是将整个市场拆分成若干个同性质的小市场。2.目标市场的...

晚间悦读丨你的思维方式,决定你的人生高度!

晚间悦读丨你的思维方式,决定你的人生高度!

越长大,越发现,能够决定你人生高度的,往往是你的认知层次。 你的认知在哪个层级,你的人生就处在什么状态。你认知的高度,决定了你人生的高度。 那如何才能升级方式、提升认知能力呢?可以从这三个方面做出改变。 NO. 1 改变态度 有人...

编写项目营销策划方案六大要点

编写项目营销策划方案六大要点

现在商业发展非常迅速,的需求非常的大,但是要做好营销策划是有一定难度的,我把自己做营销策划的一些体会在这里分享给朋友们。营销策划方案六大要点我们先说项目营销策划方案这个话题。大部分的营销策划人都是在企业里工作,大部分项目之初都是来源于一个想法,创始人、老板或者创始团队的一个...

【商场营销策划】如何进行商场营销策划?

【商场营销策划】如何进行商场营销策划?

商场是策划者们关注的永恒话题,那么究竟该如何作好商场营销策划呢?掌握以下这几点营销策略设计原则,至关重要!1.义利兼顾的原则。商场在获取利润的同时要充分考虑到消费者的合法利益和商场的长远利益。在作商场活动营销策略方案的时候应该将这一点作为首要的原则。对商场有利而对顾客不利的...

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

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