android部分代码
IOS请自行绕道
最近老板一直催我写一个东西,就是类似热更新的东西。要求看起来很简单,weex打包成js文件,js文件生成一个全量的zip,还有一个增量的zip,然后对应一个版本号。并且顺便把apk更新也做了,而且跟我说没有后台配合,要求我直接用文件的形式来写json。
PS:为什么写这个东西,因为我没干劲,没思路,不想写,写个文章可以逼着我写思路,写东西
思路
- 自己搭建tomcat,在一个文件里面写json充当接口使用,本来就是死数据不会变化的。
- 用okhttp下载文件
- 解压zip文件
- 对比版本号挨个下载解压
Server
服务器部分用tomcat随便搞一下
首先你要有个tomcat,自己去下个idea,怎么配置idea web项目怎么运行tomcat自行百度,我也不会vert.x暂时先这样tomcat比较简单。
项目结构
version文件中的内容
{
"android_url": "/app.apk",
"android_vs": 1,
"js_full_zip": "/full.zip",
"js_vs": 5,
"patch": [
{
"js_vs": 5,
"url": "/patch_5.zip"
},
{
"js_vs": 4,
"url": "/patch_4.zip"
},
{
"js_vs": 3,
"url": "/patch_3.zip"
},
{
"js_vs": 2,
"url": "/patch_2.zip"
},
{
"js_vs": 1,
"url": "/patch_1.zip"
}
]
}
android 原生部分,网络请求
interface IHttpResponse {
fun onFailed(s: String?, type: String)
fun onResult(s: String?, type: String)
fun onSocketFailed()
fun onFailedConnect()
fun onFailed()
}
class OkReq(private val response: IHttpResponse) {
val gson = Gson()
fun getSimple(url: String, type: String) {
val request = Request.Builder()
.url(url)
.get()
.build()
val newCall = OkClients.okHttpClient.newCall(request)
simpleCallback(newCall, type)
}
private fun simpleCallback(newCall: Call, type: String) {
launch(CommonPool) {
try {
val response = newCall.execute()
val string = response.body()?.string()
string?.let { launch(UI) { this@OkReq.response.onResult(it, type) } }
} catch (e: Exception) {
e.printStackTrace()
launch(UI) {
this@OkReq.response.onFailed(e.message, type)
}
}
}
}
}
然后我们去获取json,http://localhost:8080/version
现在我们要处理的问题
1.是获取安卓的版本然后强制更新,因为后台喜欢随意改接口
2.获取sp中的js版本
3.根据版本号去判断这个是不是需要下载,如果超过两个包那么就直接重新下个全量的包。如果小于2那么就一个个的更新。
话不多说我先写写
正在更新中
to be continue