kotlin学习笔记——增量更新

采用谷歌Samrt App Updates更新机制

更智能的版本更新,降低2/3流量


集成的这个库:https://github.com/jiyouliang2/SmartUpdateDemo

怎么实现的不知道。

import android.app.ProgressDialog
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.support.v7.app.AppCompatActivity
import com.itheima.updatelib.PatchUtil
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.sdk25.coroutines.onClick
import java.io.File

class MainActivity : AppCompatActivity() {

    //懒加载初始化
    private val mDialog: ProgressDialog by lazy {
        ProgressDialog(this)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //findViewById之后,设置点击监听
        btn_update.onClick {
            //集成增量更新
            update()
        }
    }

    //增量更新:旧版本+patch= 合并生成新版本apk
    fun update() {
        var pm: PackageManager = packageManager
        //通过命令行获取当前项目的包名adb shell dumpsys window w |findstr \/ |findstr name=
        //应用程序的信息
        val applicationInfo = pm.getApplicationInfo("com.jingbanyun.smartappupdate", 0)
        //1.获取旧版本apk路径
        val oldPath = applicationInfo.sourceDir
        //2.指定patch文件保存路径
        val patchFile = File(Environment.getExternalStorageDirectory(), "app-test.patch")
        //3.设置新版本apk保存路径
        val newApkFile = File(Environment.getExternalStorageDirectory(), "haha_new.apk")

        //4.合并生成新版本

        mDialog.show()
        //子线程
        doAsync {
            //合并完成 (参数:旧版本, 新版本, 差分包)
            val result = PatchUtil.patch(oldPath,newApkFile.absolutePath,patchFile.absolutePath)
            if (result == 0) {
                //合并成功
                runOnUiThread {
                    mDialog.dismiss()
                              //安装新版本apk,系统包安装器
                              val intent = Intent()
                              //设置action,数据:
                              intent.action = "android.intent.action.VIEW"
                              intent.addCategory("android.intent.category.DEFAULT")
                              intent.setDataAndType(Uri.parse("file://"+newApkFile.absoluteFile),"application/vnd.android.package-archive")
                              startActivity(intent)
                }
            }
        }
    }
}

差分包:使用bsdiff.exe来生成

这个库里面有工具:https://github.com/jiyouliang2/SmartUpdateDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值