android热补丁
㈠ andfix原理
AndFix,全称是Android hot-fix,是一个Android热补丁框架。
原理是:apkpatch将两个apk做一次对比,然后找出不同的部分。可以看到生成的apatch了文件,后缀改成zip再解压开,里面有一个dex文件。通过jadx查看一下源码,里面就是被修复的代码所在的类文件,这些更改过的类都加上了一个_CF的后缀,并且变动的方法都被加上了一个叫@MethodReplace的annotation,通过clazz和method指定了需要替换的方法。然后客户端sdk得到补丁文件后就会根据annotation来寻找需要替换的方法。最后由JNI层完成方法的替换。
如果本地保存了多个补丁,那么AndFix会按照补丁生成的时间顺序加载补丁。具体是根据.apatch文件中的PATCH.MF的字段Created-Time。
局限性:不支持YunOS
无法添加新类和新的字段
需要使用加固前的apk制作补丁,但是补丁文件很容易被反编译,也就是修改过的类源码容易泄露。
使用加固平台可能会使热补丁功能失效。
andfix与Nuwa对比,
Nuwa是另一个热补丁框架。
㈡ android热修复与加固冲突吗
针对Android平台,Dexposed支持函数级别的在线热更新,例如对已经发布在应用市场上的宿主APK,当我们从crash统计平台上发现某个函数调用有bug,导致经常性crash,这时,可以在本地开发一个补丁APK,并发布到服务器中,宿主APK下载这个补丁APK并集成后,就可以很容易修复这个crash。
Dexposed是基于久负盛名的开源Xposed框架实现的一个Android平台上功能强大的无侵入式运行时AOP框架。
Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者字节码重写器。集成Dexposed框架很简单,只需要在应用初始化阶段加载一个很小的JNI库就可以,这个加载操作已经封装在DexposedBridge函数库里面的canDexposed函数中,源码如下所示:
/**
* Check device if can run dexposed, and load libs auto.
*/
public synchronized static boolean canDexposed(Context context) {
if (!DeviceCheck.isDeviceSupport(context)) {
return false;
}
//load xposed lib for hook.
return loadDexposedLib(context);
}
private static boolean loadDexposedLib(Context context) {
// load xposed lib for hook.
try {
if (android.os.Build.VERSION.SDK_INT > 19){
System.loadLibrary("dexposed_l");
} else if (android.os.Build.VERSION.SDK_INT == 10
|| android.os.Build.VERSION.SDK_INT == 9 ||
android.os.Build.VERSION.SDK_INT > 14){
System.loadLibrary("dexposed");
}
return true;
} catch (Throwable e) {
return false;
}
}
Dexposed实现的hooking,不仅可以hook应用中的自定义函数,也可以hook应用中调用的Android框架的函数。Android开发者将从这一点得到很多好处,因为我们严重依赖于Android SDK的版本碎片化。
㈢ Android开发Tinker热更新的问题
通过阅读官方的技术文档,始终没有发现有对这个情况的相关配置项,所以只能从别处下手,最后发现,通过在 app mole 的 “build.gradle” 文件中,注释掉依赖插件脚本,最终解决掉这个问题:
说两句:
目前运行调试一切正常,不过要始终留意后续是否会出现问题;重要的一点是,当要打包新版本时,一定要解开这个注释。
2、can’t the get signConfig for this build
问题:
执行 buildTinkerPatchRelease 打 Release 版本补丁包时报以下错误:
Error:Execution failed for task ':app:tinkerPatchRelease'.
> can't the get signConfig for this build
1
2
解决:
android {
...
// 签名配置【buildTypes中调用了signingConfigs,则signingConfigs{}要置于buildTypes{}前面】
signingConfigs {
release {
try {
storeFile file("MyProject.jks")
storePassword "111111"
keyAlias "zhangzeqiao"
keyPassword "111111"
} catch (ex) {
throw new InvalidUserDataException(ex.toString())
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
debug {
...
signingConfig signingConfigs.release
}
}
...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
其中要特别注意,signingConfigs{} 方法体要置于 buildTypes{} 方法体前面,不然会报以下错误:
㈣ 安卓圣安地列斯能用热咖啡补丁吗
也可以的,方法差不多,但我的先root了手机,你要是不行就root后再试
㈤ android热更新框架哪个好
一.基础知识
1.阿里的热更新框架已经开源 了。但已经很久没有更新过新版本了。当前的版本只支持到了 Android 4.4。由于 5.0 起新的 ART 虚拟机、更严格的 SELinux 策略以及对 64 位的支持之类的事,使得 Xposed 都在开发上做了很多调整。我不知道 Dexposed 现在是否支持,但至少阿里没有开源。
2.在本地动态执行远端下发的代码是极度危险的行为。利用此方法执行非法代码等或用于绕过 Google Play 等市场的审查是违反相关协议的,也是对用户极度不负责任的行为。
3.在一些访问非常密集的地方使用热更新可能会对效率产生相对比较大的影响,应该避免使用.
4.我们可以对 Java 的 ScriptEngine 进行一些封装成为一个 HotPatch 类使得它更适合做热更新的工作。
5.首先,检查热更新补丁的管道一定要建立在 https 上,因为下发代码是极其危险的,如果被劫持,后果是无法想象的。其次,请求时最好自动带上 Android 版本、手机型号、地区、版本号等信息,以方便更精确地下发,千万不能下发错。
6.Java在运行时加载对应的类是通过ClassLoader来实现的,ClassLoader本身是一个抽象来,Android中使用PathClassLoader类作为Android的默认的类加载器
7.我们的如果想做hotpatch,一定要保证我们的hotpacth dex文件出现在dexElements列表的前面。
二.常用的热更新技术框架:
基于QQ空间的HotFix →→ 要使用到android dex分包方案→拆分dex的项目的话,可以参考一下谷歌的multidex方案实现.
大众点评的NuWa←项目补丁自动化做的很完整
alibaba/AndFix
阿里巴巴的DexPosed
dalvik_patch实现multidex
使用React-Native实现app热部署的一次实践
alibaba/AndFix
三、常用的热更新技术框架比较
Advantage
disadavantage
NuWa
1,可以新增类和字段,
2,兼容到6.0系统
1,基本原理是classloader,类加载器
2,不能修改资源文件,如图片布局等(可通过动态布局实现)
AndFix
1, 支持Android2.3到6.0版本
2, 支持arm与x86系统架构
3, 支持dalvik和ART的runtime
4, 不需要重启App即可应用补丁
1,不能新增类和字段,
2,不能修改资源文件,
3,不能修改manifest文件
4,不能新增成员变量
5,不能使用加固后的apk制作pacth文件
四、github地址
网络的同学的实现 HotFix
点评的同学的实现 Nuwa
阿里的同学的实现 AndFix
另:AndFix对static的支持不太好,下面是试验的Demo:
添加了一个静态的字段addString:
通过AndFix来制作patch会直接报错:
㈥ Android Studio创建项目后,修改代码后,需要保存吗
不需要,androidstudio编写代码,都是自动保存的,不需要手动保存。不过建议把代码放到服务器保存一份,比如GitHub,这样一个可以算是备份,二来你在其他地方也可以拉代码编写
㈦ 2016年,移动开发领域有哪些最佳实践值得参考
参考下面
从开发角度看,移动相关的架构、开发也有很多独特之处。在即将于4月21~23日举行的QCon北京2016上,就准备了很多移动开发方面的最佳实践,来自腾讯、阿里巴巴、网络、京东、华为、美团、网易、和滴滴出行等公司的专家将分享他们的一手经验。
本次QCon,有“移动开发挑战”和“移动测试技术”两个移动相关的专题,其他专题也有与移动相关的产品设计、大数据和架构方面的演讲。
移动开发挑战
移动开发挑战专题,出品人是美团网高级技术专家、美团客户端平台团队负责人陈晓亮。先来看看这个专题会有哪些精彩内容。
随着3G、4G网络的普及,Wi-Fi热点的增多,移动网络上的音视频需求越来越多。移动互联网的很多领域对音视频通话有强需求,例如社交、情侣、在线教
育、移动医疗、O2O
等。让App能通话,是一件既炫酷又实用的事情。不过移动互联网的音视频通话存在方方面面的挑战,比如中国东北网通用户,和中国南方电信用户通话,网
络不好怎么办;通话卡顿,如何诊断问题出在哪里;如何评估某次通话的传输质量好不好;机场、学校、公司这些场所,有防火墙封端口怎么办。种种问题,声网首
席音视频架构师孙雨润将在演讲《移动互联网的音视频传输挑战》中一一解答。
手机App在音视频方面的应用产品,近两年呈井喷状态。观众在流畅地观看着视频画面的同时,背后其实包含了大量的技术难题。网易杭州研究院多媒体技术专家
郭再荣也将谈谈《移动端音视频应用优化之道》。本次分享将从手机摄像头数据采集开始,把视频编码、数据传输、视频解码、画面显示整条链路中的技术难点和优
化方法进行详细讲解。另外,还会对音视频开发者最关心的一些问题如直播延时、画面清晰度、手机端资源消耗等展开讨论。
很多团队要同时维护多个项目,还要快速迭代,稳定性、容错能力都非常重要。网络的凤巢App团队就是这样,在同一时间要开发和维护数个项目。网络移动开发
平台针对Android和iOS两个平台,通过对基础功能抽取并单独封装SDK完成非业务剥离,剥离后的通用功能整体为一个SDK,每个独立功能又单独封
装为SDK,即SDK插件化;这样SDK不但具备可插拔功能,而且在开发者角度上具备自动获取更新功能。网络移动端架构师李祎嵩将分享《网络移动开发平台
最佳实践》。
随着移动互联网蓬勃发展,App规模越来越大,对App发布迭代速度和质量有更高的要求,技术开发同学面临着更大的挑战。怎样让App发布更快更灵活,以
及上线后更快地修复各种Crash和紧急Bug,让用户免去下载安装的操作,在最短的时间内升级用户手中的App,是Android开发人员面临的一个重
要的技术课题。腾讯社交平台部Android平台组组长俞尚将分享《Android超级补丁包技术》。QQ空间团队在去年实现class替换热补丁包技术
的基础上,更进一步在业内首创超级补丁包技术,实现了App上Dex和资源替换覆盖,在开发人员和用户都完全透明无感知的情况下,可把任意App直接升级
到最新版本。补丁技术已经在空间、微信和QQ等腾讯公司重量级产品上得到推广和应用,在此希望和业内其他团队在技术上做些分享和交流。
前端技术和移动端开发结合越来越紧密。Weex是阿里巴巴提出的移动应用的全新技术解决方案,能够将传统Native的性能和HTML5的灵活和开发体验
巧妙结合,同时在大规模工程实践和在微观问题上的无侵入性运用方面具备非常大的优势。淘宝无线前端架构负责人赵锦江(勾股)和阿里技术专家徐凯(鬼道)将
分享《Weex——灵活的移动端高性能动态化方案》,希望从前端开发体验和理念上,以及从Native端的渲染能力上,完整的呈现。
㈧ 求安卓侠盗猎车手SA 热咖啡补丁
热咖啡补丁被封了,下不到了,如果在贴吧关系不错的话可以去贴吧问问,因为这个补丁让rockstar当时股票跌了不少。
㈨ RiskWare/android/mtracker.a这个是不是病毒
这是非法获得root权限的程序(内置于母程序),作为子程序被母程序调用。其实网络一键root和360一键root都有类似的模块。无法单独从这个名字看出是哪个病毒。有一种模块叫Rootkit,不过应该不是这个。
SDK开发者应尽可能地避免使用云控、热补丁等动态代码加载技术,要谨慎接入具有动态更新能力的SDK,防止恶意SDK影响自身应用的口碑;
用户在下载手机软件时,应通过正规应用市场进行,避免直接在网页上点击安装不明软件。
最后,用户应养成良好的安全使用手机的习惯,借助第三方安全软件对手机进行安全检测,移除存在安全风险的应用。
㈩ 腾讯开源的c++项目
1、Android热修复框架Tinker。2、微信客户端跨平台组件Mars。3、小程序组件化开发框架wepy。4、轻量级高性能的Hybrid框架VasSonic。5、微信团队前端开发工具WeFlow。
Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。Mars是微信官方的终端基础组件,目前已接入微信Android、iOS、Mac、Windows、WP等客户端。WePY是一款让小程序支持组件化开发的框架,通过预编译的手段让开发者可以选择自己喜欢的开发风格去开发小程序。框架的细节优化,Promise,AsyncFunctions的引入都是为了能让开发小程序项目变得更加简单,高效。