react native 项目多渠道配置

1 篇文章 0 订阅
1 篇文章 0 订阅

原来主分支作为上传应用商店的分支,开发分支就上传蒲公英的,随着开发节奏紧凑,时不时需要更新商店上的app,合并代码变的频繁,很容易出错,不得不考虑其他方式。

 

iOS:duplicate 一个新的target作为上传应用商店

问题:

duplicate target 后模拟器运行可通过,而archive报错“react/*.h”头文件找不到

解决方法:去manager scheme中查看新target与原target有什么不同,可发现在build下原工程有两个target(react 与项目工程target)而新target只有一个,按照原target添加即可,同时去掉parallelize Build的勾

完成以上配置后就可以修改 new target的相关打包信息,如bundle id,display name 等

如果有些代码在新target中不需要,则在新target中通过配置宏来判断是否编译某些代码。

 

iOS多target后,如果需要添加新的第三方包,link时有两种方式:

  • react-native link will link all targets by default
  • allow a --target="" flag for react-native link, so that each target can be linked via the cli

 

android :

在module :app下添加

// 多渠道/多环境 的不同配置

productFlavors {

dev {

// gradle 3.0.0 以上需要有这个

flavorDimensions "default"

 

applicationId "com.eproedc5"

 

resValue "string", "app_name", "EPRO"

 

buildConfigField "boolean", "STORE", "false"

 

manifestPlaceholders = [

JPUSH_PKGNAME: "com.ePROForPatient",

JPUSH_APPKEY : "084ee60926ddff720c36f8a4", //JPush 上注册的包名对应的 Appkey.

APP_CHANNEL : "developer-default", //暂时填写默认值即可.

]

}

 

store {

// gradle 3.0.0 以上需要有这个

flavorDimensions "default"

 

applicationId "com.ePROForPatient"

 

resValue "string", "app_name", "EPRO"

 

buildConfigField "boolean", "STORE", "true"

 

manifestPlaceholders = [

JPUSH_PKGNAME: "com.ePROForPatient",

JPUSH_APPKEY : "afab251db7375eaaee81faa2", //JPush 上注册的包名对应的 Appkey.

APP_CHANNEL : "developer-default", //暂时填写默认值即可.

]

}

}

 

Store环境不需要蒲公英检测

public static final boolean STORE = BuildConfig.STORE;

if (!STORE){

PgyCrashManager.register();

new PgyUpdateManager.Builder()

.register();

}

 

通过 ./gradlew assembleRelease 打包后可看到dev和store两个文件,按渠道上传相应的安装包即可。

 

iOS通过宏,Android通过buildconfig可以把当前是什么渠道传给js端,做一些判断。如是否需要环境选择的控件,是否记住账号密码等。

BOOL bIsAppStore = true;

#ifndef APPSTORE

bIsAppStore = false;

#endif

 

然后

initialProperties:@{@"bIsAppStore":@(bIsAppStore)}];

 

 

iOS:

 

android 需要重写createReactActivityDelegate

@Override

protected ReactActivityDelegate createReactActivityDelegate(){

return new MyReactDelegate(this,getMainComponentName());

}

 

class MyReactDelegate extends ReactActivityDelegate{

 

public MyReactDelegate(ReactActivity activity, @Nullable String mainComponentName) {

super(activity, mainComponentName);

}

 

@javax.annotation.Nullable

@Override

protected Bundle getLaunchOptions(){

Bundle bundle = new Bundle();

bundle.putBoolean("bIsAppStore",STORE);

return bundle;

}

}

 

调试:

ios 选择相应的target即可直接运行调试

Android:需要选择app对应的build variant ,

如下图选择devDebug则buildconfig中的STORE就是false

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值