背景
- 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項目中的最優解決方案,歡迎討論。