Code Monkey home page Code Monkey logo

hotfix's Introduction

此项目已经废弃啦,各种各样的问题没时间来解决。

Issues

  1. MAC系统无法自动打包补丁,原因可能是路径分隔符问题
  2. 使用谷歌multidex分包后无法注入代码(开启multidex之后,jar包保存路径改变了)
  3. 暂不支持productFlavors

以上问题有空再改,最近正在忙其他事情,公司项目也准备重构。 而且此项目主要是科普和学习热补丁技术,有兴趣的可以自行解决上述问题。

一、HotFix简介

一个基于dex分包的热补丁框架,目前只支持gradle 1.5以上版本 具有以下特性:

  1. 支持混淆
  2. 自动生成补丁包
  3. 加载补丁包时进行签名校验

项目演示

image

二、使用方式

首先在build.gradle中有两个dsl需要进行配置。

image

2.1 fixMode

  • fixMode是在debug模式下运行项目的配置,可以控制是否使用javassist注入代码,是否自动生成补丁,日常开发的话两个设置成false即可
  • 因为注入代码后,自定义控件在preview预览的时候会报空指针(找不到Antilazy.class),所以需要将debugOn关掉才能方便预览。

2.2 fixSignConfig

这个是配置补丁包的签名文件,需要和Release签名打包时使用的一致,否则加载补丁的时候会校验失败,这也是为了安全性考虑,防止恶意注入代码。

storeFile,storePassword,keyAlias,keyPassword对应如下

image

build.gradle配置完毕后,只需要运行一次Release签名打包,然后修改代码,再次运行debug打包即可自动生成补丁了。

三、说明

  1. 在Release签名打包的时候会重新生成hash.txt,如果开启混淆的话还会生成mapping.txt,自动生成的补丁包是基于这个版本校验而来的。
  2. 在debug模式下直接运行或者打包会校验hash.txt和mapping.txt,自动生成补丁包并且为补丁包签名。
  3. 将生成的补丁包复制到sdcard根目录,重启应用即可实现热修复。

需要注意的是,如果在Release打包中开启了混淆,那么自动生成补丁的时候也需要将debug开启混淆,否则会将整个项目的所有类都打包成补丁包。

debug开启混淆方式如下

image

3.1 关于签名校验

只有使用Release产出的apk,加载补丁的时候才会进行签名校验。

如果你手机上安装的是debug包,那么不会进行签名校验。

3.2 关于android6.0以上

补丁包不能从sdcard中加载,因为android6.0后有运行时权限处理。从sdcard中加载只是为了方便测试和演示,一般情况下是建议放在私有目录中。

hotfix's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hotfix's Issues

运行不了

都运行不起来,求教。

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesWithDexForDebug'.

A problem occurred starting process 'command 'dx.bat''

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

项目中如果有使用AIDL方式的进程间通信的功能会报错

AndroidStudio 2.1.1
Gradle Version 2.10
Android Plugin Version 2.1.0
项目中如果有使用AIDL方式的进程间通信的功能会报错,编译项目时没有混淆,没有自动打包,使用的是这个阶段的方式:Android热补丁动态修复技术(三)—— 使用Javassist注入字节码,完成热补丁框架雏形(可使用) ,打印信息如下:
================injectClass!==========com.test.myapplication.ITestAidlInterface$Stub$Proxy
================injectClass!==========com.test.myapplication.ITestAidlInterface$Stub
================injectClass!==========com.test.myapplication.ITestAidlInterface
Error:Execution failed for task ':TestDemo:transformClassesWithPreDexForDebug'.

0

其中ITestAidlInterface 是AIDL自动生成的class,Stub 和Proxy 是 ITestAidlInterface 的内部类

签名出现问题

build.gradle配置
通过命令 gradle assembleRelease打包无法签名, 通过gradle assembleDebug打debug可以正确签名

signingConfigs {
        release {
            storeFile file('test_key_store.jks')
            storePassword '123123'
            keyAlias 'test'
            keyPassword '123123'
        }
        debug {
            storeFile file('test_key_store.jks')
            storePassword '123123'
            keyAlias 'test'
            keyPassword '123123'
        }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.