背景
- react-native开发的安卓APP
- 打包需要打不同渠道的包
- 不同渠道需要上不同的活动,有活动的渠道打包的时候需要调整代码,很是繁杂
解决方案
- 再page里面获取渠道名,根据渠道名做判断
首先获取渠道
https://www.npmjs.com/package/react-native-get-channel
在google搜索 react native channel 得到了这个组件,经过使用后发现是获取AndroidManifest.xml一个参数的value
把渠道动态配知道AndroidManifest里面
在上一步中,我发现并没有直接获取渠道(起初我没有读懂文档,以为可以直接获取到,这让我很绝望)
于是我又回到了build.gradle去看渠道是怎么配置的,我发现渠道都是配置在productFlavors里面,我就去搜索productFlavors是干嘛的,然后我就看到了这个帖子https://juejin.im/entry/5a586bfaf265da3e2c3808c5
《Gradle中productFlavors使用详解》
我的运气真的爆棚,这个帖子讲了如何把渠道名配置到AndroidManifest里面去,刚好和我前面使用的组件结合起来了。
于是赶紧测试,发现成功的串联起来了。
附上原博部分内容
配置渠道名到AndroidManifest
如果要配置不同的包名,版本号等,可直接在对应的产品定义中指定相应的属性值;如果要配置渠道号可以通过${name}的形式在AndroidManifest.xml中插入一个占位符,编译的时候会替换为真实值。
flavorDimensions "cooperator"
productFlavors {
cooperatorA {
applicationId "com.ckj.myapplication1"
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"channel1"]
versionCode 1
versionName "1.0"
dimension "cooperator"
}
cooperatorB {
applicationId "com.ckj.myapplication2"
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"channel2"]
versionCode 2
versionName "1.0.1"
dimension "cooperator"
}
}
在AndroidManifest.xml中添加渠道变量
<application
...>
...
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
</application>
在page获取渠道名
Add channel information into AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ownmoduletest">
...
<application
...
<meta-data android:name="JPUSH_APPKEY" android:value="12.324"/> // <--- ADD HERE
...
</application>
...
</manifest>
import {getAppMetaData} from 'react-native-get-channel';
_getChannel = ()=> {
getAppMetaData('JPUSH_APPKEY').then((data)=>{
alert(data);
}).catch((error)=>{
alert('获取失败');
});
}
写在最后
本人不是专业的Android所以很多地方不明白,不知道这个是不是在RN项目中的最优解决方案,欢迎讨论。