react-native開發(fā)的程序支持熱更新赏胚,而熱更新使用最多的是code-push組件凭豪。今天介紹使用code-push完成android平臺的熱更新。
1旁振、android項目打包發(fā)布release版本
參照文章《 http://www.reibang.com/p/a8d7c1907494 》完成android平臺的發(fā)布揣钦,注意雳灾,修改android的 android/app/build.gradle文件里面的版本號如下:
versionCode 1
versionName "1.0.1"
這個是因為code-push需要版本號是x.y.z格式。
2冯凹、集成code-push
具體可以查照github 《 https://github.com/Microsoft/react-native-code-push 》
3谎亩、創(chuàng)建app
這篇文章介紹很詳細(xì),我通過命令建立了一個app名稱是CodePushExample-Android
4宇姚、android配置調(diào)整
buildTypes {
releaseStaging {
buildConfigField "String", "CodePushExampleAndroid", '"這是一個KEY值"'
}
release {
buildConfigField "String", "CodePushExampleAndroid", '"這是另外一個KEY值"'
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new VectorIconsPackage(),
new CodePush(BuildConfig.CodePushExampleAndroid, getApplicationContext(), BuildConfig.DEBUG)
);
}
這里有很多高級設(shè)置等等团驱,我這里最簡單的設(shè)置了。gradle配置里面增加1個buildconfig配置field空凸,名稱是『CodePushExampleAndroid』,類型是『String』寸痢,值在2種部署情況下分別是『這是一個KEY值』和『這是另外一個KEy值』呀洲。
5、js代碼調(diào)整
componentDidMount() {
CodePush.sync({
updateDialog: {
title: "An update is available!",
appendReleaseDescription: true,
descriptionPrefix: "\n\nChange log:\n"
},
installMode: CodePush.InstallMode.IMMEDIATE
});
}
6、打熱發(fā)布的包和發(fā)布到code-push服務(wù)器##
#!/bin/sh
react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --assets-dest ./bundles/ --dev false
大家在項目目錄下面建立『bundles』文件夾道逗,執(zhí)行上面的命令得到j(luò)s和assets的文件兵罢;
發(fā)布使用命令:
#!/bin/sh
code-push release CodePushExample-Android ./bundles/ 1.0.1 --deploymentName Production --description "1.支持這里;2.支持那里滓窍;3.支持很多" --mandatory true
這里的『CodePushExample-Android』是我的app名稱卖词。
注意:這里的版本1.0.1 表示我們對1.0.1這個版本進行js的熱發(fā)布。
7吏夯、android客戶端包更新
code-push提供了一種動態(tài)更新js此蜈、images的能力,但是當(dāng)我們引入新的native組件噪生,或者修改了native相關(guān)的代碼裆赵、配置,我們就不能通過code-push完成更新了跺嗽,這時需要對native客戶端進行更新战授。這種情況如何解決?
todo?
8桨嫁、其他##
通過sync方法來自定義update提示植兰、進度等;
通過checkForUpdate方法來判斷是否最新版本璃吧;