kotlin实现简单的增量更新apk

一 : 首先创建好kotlin工程


引入anko

开源地址:(https://github.com/Kotlin/anko)按照文档提示集成。

settled in your gradle file at the project level:ext.anko_version='0.10.8'

implementation "org.jetbrains.anko:anko:$anko_version"

二 : 采用谷歌的SmartAppUpdates 


开源地址::(https://github.com/jiyouliang2/SmartUpdateDemo)仔细按照文档集成即可

1. 在project的build.gradle添加如下代码

allprojects {

    repositories {

        maven { url "https://jitpack.io" }

    }

}

2. 在Module的build.gradle添加依赖

implementation 'com.github.jiyouliang2:SmartUpdateDemo:1.0.1'

3.添加权限

4.代码中使用

PatchUtil.patch(旧版本, 新版本, 差分包);

三 :生成patch包


下载生成patch包的工具  链接 : (https://download.csdn.net/download/qq_18983205/10244386)解压并进去目录如图


然后进入cmd执行命令如下图所示:(C:\Users\Administrator\Desktop\tools\bsdiff-4.3、bsdiff4.3-win32、bzip2-1.0.6\bsdiff4.3-win32-src\Release>bsdiff.exe jason_208.apk jason_226.apk jason.patch)


如图所示:

jason_208.apk (旧版本)

jason_226.apk(新版本)

jason.patch(执行命令以后的增量包)

运行最后的demo ,把增量包放到(adb push yuedao.patch sdcard/)sdcard下,模拟下载好的增量包,

jason_new.apk(合并以后生成的最新包,合并成的新包和最新版本的包大小一致)

四:具体代码实例


class MainActivity : AppCompatActivity() {

        private val mDialog:ProgressDialogby lazy {

            ProgressDialog(this)

       }

       override fun onCreate(savedInstanceState: Bundle?) {

                      super.onCreate(savedInstanceState)

                       setContentView(R.layout.activity_main)

                        btn_show.onClick {

                            update() //adb shell dumpsys window w /findstr \/ |findstr name(cmd 命令行查看包名字)

                       }

    }

     fun update(){//com.ss.android.article.news

           var pm:PackageManager =packageManager

            //应用程序的信息

            val applicationInfo = pm.getApplicationInfo("包名", 0)

            //旧版本的路径

            val sourceDir = applicationInfo.sourceDir

           / /path文件的保存

            val file = File(Environment.getExternalStorageDirectory(), "jason.patch")

           //生成新版本

          val newfile = File(Environment.getExternalStorageDirectory(), "jason_new.apk")

        //合并:jni 来操作 so库

        //子线程

        mDialog.show()

        doAsync {

                      //PatchUtil.patch(旧版本, 新版本, 差分包);

                       val result = PatchUtil.patch(sourceDir,newfile.absolutePath,file.absolutePath)

                     if (result ==0){

                         runOnUiThread{

                             mDialog.dismiss()

                              //安装  意图

                               val intent = Intent()

                            intent.action ="android.intent.action.VIEW"

                             intent.addCategory("android.intent.category.DEFAULT")

                              intent.setDataAndType(Uri.parse("file://" + newfile.absoluteFile),

                              "application/vnd.android.package-archive")

                             startActivity(intent)

                         }

                   }

         }

        //生成patch包(查看步骤三)

    }


革命尚未成功,通知仍需努力谢谢

你可能感兴趣的:(kotlin实现简单的增量更新apk)