美文网首页
kotlin实现简单的增量更新apk

kotlin实现简单的增量更新apk

作者: JaosnZhao | 来源:发表于2019-08-07 23:14 被阅读0次

    一 : 首先创建好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.添加权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    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

          本文链接:https://www.haomeiwen.com/subject/avjzdctx.html