【Kotlin】热修复

使用Andfix

AS创建kotlin项目

AndroidManifest增加权限

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

activity_main.xml放一个TextView

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    //懒加载初始化view
    val mTvResult by lazy {
        //findviewbyid
        tv_result
    }

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

        tv_result.text = "有bug的版本"
    }
}

引入Andfix

app下的build.gradle

    implementation 'com.alipay.euler:andfix:0.5.0@aar'

初始化要放到Application中,新建MyApplication.kt

class MyApplication:Application(){
    override fun onCreate() {
        super.onCreate()

        val patchManager = PatchManager(this);
        patchManager.init("1.0");//current version

        patchManager.loadPatch();
        //设置文件路径
        val filePath = File(Environment.getExternalStorageDirectory(),"fixbug.apatch")
        //合并补丁文件
        if(filePath.exists()){
            patchManager.addPatch(filePath.absolutePath);
        }
    }
}

AndroidManifest中注册

	<application
        android:name=".MyApplication">
        ......
    </application>

运行程序把生成的apk改名为bug
在这里插入图片描述

修改MainActivity.kt

    	tv_result.text = "修复bug的版本"
        tv_result.setTextColor(Color.RED)
        tv_result.textSize = 50F

再次运行程序,把生成的apk改为fix-bug
在这里插入图片描述
在这里插入图片描述

获取差分包

在Andfix的github地址提供了一个获取差分包的工具,apkpatch

如果下载慢可以去我的网盘下载
提取码:te2k

把刚才两个apk和默认的签名文件debug.keystore放到解压好的文件夹中,在当前路径打开cmd

输入apkpatch.bat可以查看使用说明
在这里插入图片描述


apkpatch -f fix-bug.apk -t bug.apk -o out -k debug.keystore -p android -a androiddebugkey -e android

-f 新apk
-t 旧apk
-o 输出路径
-k keystore
-p keystore密码
-a keystore别名
-e keystore密码

在这里插入图片描述

运行之后,生成的out中有.patch文件,我们改成代码中的名字fixbug.aptch
在这里插入图片描述
安装有bug版本apk

adb install -r -t bug.apk

把fixbug.apatch保存到sd卡

adb push fixbug.apatch sdcard/

杀死进程,打开权限。再次打开即可得到修复bug的apk

(经测试。在mumu模拟机上成功了。锤子手机也成功了。但是小米6并没有成功,大牛请评论告诉我原因…)

不足

热修复不能保证完全修复

下面为不同热修复性能对比图
在这里插入图片描述

资源下载

https://download.csdn.net/download/u010356768/12103313

发布了640 篇原创文章 · 获赞 143 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/103973462