前言
在Android studio 2.2.2上没弄成功,今天换成2.3.1后成功啦
- 参考地址:http://blog.csdn.net/snailbaby_soko/article/details/69524380
https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md - 步骤
- 在项目中添加依赖
- 将robust.xml拷贝到app目录下,并进行配置,主要是两个地方(热补包名和补丁包名)
<!--需要热补的包名或者类名,这些包名下的所有类都被会插入代码-->
<!--这个配置项是各个APP需要自行配置,就是你们App里面你们自己代码的包名,
这些包名下的类会被Robust插入代码,没有被Robust插入代码的类Robust是无法修复的-->
<packname name="hotfixPackage">
<name>com.demo.evan.myrobustdemo</name>
</packname>
<!--补丁的包名,请保持和类PatchManipulateImp中fetchPatchList方法中设置的补丁类名保持一致( setPatchesInfoImplClassFullName("com.meituan.robust.patch.PatchesInfoImpl")),
各个App可以独立定制,需要确保的是setPatchesInfoImplClassFullName设置的包名是如下的配置项,类名必须是:PatchesInfoImpl-->
<patchPackname name="patchPackname">
<name>com.demo.evan.myrobustdemo</name>
</patchPackname>
- xml中设置读写权限,(测试时是在targetSdkVersion=21测试的,实际开发中可能在21以上,需要申请动态权限,美团demo中有一个申请动态权限,可以参考)
- 打正式包的配置
signingConfigs {
release {
storeFile file('robustTest.jks')
storePassword 'dsl_305'
keyAlias 'robusttest'
keyPassword 'dsl_305'
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
- 在app的build.gradle中开启apply plugin: 'robust' ,在命令行输入打包命令
gradlew clean assembleRelease --stacktrace --no-daemon
打包成功后,安装app,并在app目录下新建文件夹robust,将生成的mapping.txt文件以及app/build/outputs/robust/methodsMap.robust文件拷贝到这里
修改代码,
在改动的方法上面添加@Modify注解或者在修改的方法里面调用RobustModify.modify()(针对Lambda表达式),
新增的方法和字段使用@Add注解
,修改后关闭apply plugin: 'robust' ,开启apply plugin: 'auto-patch-plugin'后,再次打包,
如果打包成功,终端会出现auto patch end successfully这样的提示,在cmd中,输入命令将补丁包复制到sd卡
adb push /Users/Evan/Desktop/code/robust/app/build/outputs/robust/patch.jar /sdcard/robust/patch.jar
- 在app中,点击加载补丁,成功的话,会回调onPatchApplied方法,并且 result=true,就大功告成啦