Android热更新神器!无需重装 APK,代码立即生效 🔥
Android热更新神器!无需重装 APK,代码立即生效 🔥
一套完整的 Android 热更新解决方案,支持 DEX、资源、SO 库、Assets 的热更新,还提供 Web 管理后台!
📖 前言
在 Android 开发中,我们经常遇到这样的场景:
- 😱 线上发现了一个严重 Bug,但重新发版需要几天审核
- 😓 想快速修复一个小问题,却要让用户重新下载整个 APK
- 😤 资源文件有个小错误,却要走完整的发版流程
有没有办法让应用不重装就能更新呢?答案是:热更新!
今天给大家介绍一个开源的 Android 热更新工具,它不仅功能强大,而且完全免费,还提供了 Web 管理后台!
✨ 核心特性
🔥 真正的热更新
- DEX 热更新:代码修改立即生效,无需重启
- 资源热更新:布局、图片、字符串等资源更新
- SO 库热更新:Native 库更新,立即生效
- Assets 热更新:配置文件、数据文件更新
🚀 高性能
- Native 引擎加速:补丁生成速度提升 2-3 倍
- 设备端生成:支持在 Android 设备上直接生成补丁
- 自动降级:Native 不可用时自动使用 Java 引擎
🛡️ 安全可靠
- 签名验证:防止补丁被篡改
- AES-256 加密:保护补丁内容不被窃取
- 防篡改保护:自动检测并恢复被篡改的补丁
- 多重安全策略:可配置强制签名、强制加密
🌐 管理后台(新增)
- Web 管理界面:可视化管理补丁
- 灰度发布:支持百分比控制、设备 ID 哈希
- 统计分析:仪表板、下载趋势、版本分布
- 用户管理:多用户支持、权限分级
- 通知系统:站内通知、实时更新
🎯 快速开始
1. 添加依赖
只需要一行代码:
dependencies {
// 热更新核心库(包含完整功能)
implementation 'io.github.706412584:update:1.3.4'
}
2. 生成补丁
方式一:使用命令行工具
# 下载工具
wget https://repo1.maven.org/maven2/io/github/706412584/patch-cli/1.3.4/patch-cli-1.3.4-all.jar
# 生成补丁
java -jar patch-cli-1.3.4-all.jar \
--base app-v1.0.apk \
--new app-v1.1.apk \
--output patch.zip
方式二:在 Android 设备上生成
AndroidPatchGenerator generator = new AndroidPatchGenerator.Builder(context)
.baseApk(baseApkFile)
.newApk(newApkFile)
.output(patchFile)
.callback(new SimpleAndroidGeneratorCallback() {
@Override
public void onComplete(PatchResult result) {
if (result.isSuccess()) {
Log.i(TAG, "补丁生成成功!");
}
}
})
.build();
generator.generateInBackground();
3. 应用补丁
HotUpdateHelper helper = new HotUpdateHelper(context);
helper.applyPatch(patchFile, new HotUpdateHelper.Callback() {
@Override
public void onSuccess(HotUpdateHelper.PatchResult result) {
Log.i(TAG, "热更新成功!");
// DEX 和 SO 立即生效,资源更新需要重启应用
}
@Override
public void onError(String message) {
Log.e(TAG, "热更新失败: " + message);
}
});
4. 在 Application 中集成
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 加载已应用的补丁(必须在 attachBaseContext 中调用)
HotUpdateHelper helper = new HotUpdateHelper(base);
helper.loadAppliedPatch();
}
}
就这么简单!🎉
🛡️ 安全机制
APK 签名验证
使用与 APK 相同的签名密钥对补丁进行签名:
// 生成带签名的补丁
patchGenerator {
signing {
keystoreFile = file("keystore.jks")
keystorePassword = "password"
keyAlias = "alias"
keyPassword = "password"
}
}
// 启用签名验证
HotUpdateHelper helper = new HotUpdateHelper(context);
helper.setRequireSignature(true); // 强制要求补丁签名
helper.applyPatch(patchFile, callback);
AES-256 加密
保护补丁内容不被窃取:
// 加密补丁
SecurityManager securityManager = new SecurityManager(context);
String password = "your_secure_password";
File encryptedPatch = securityManager.encryptPatchWithPassword(patchFile, password);
// 应用加密补丁
helper.applyPatchWithAesPassword(encryptedPatch, password, callback);
防篡改保护
自动检测并恢复被篡改的补丁:
- ✅ SHA-256 哈希验证
- ✅ 启动时自动验证完整性
- ✅ 检测到篡改自动从加密存储恢复
- ✅ 最多允许 3 次篡改尝试
🌐 补丁管理服务端
提供完整的 Web 管理后台,让补丁管理更简单!
核心功能
📦 补丁管理
- 上传补丁文件
- 版本控制
- 状态管理(草稿、发布、下线)
- 批量操作
🎯 灰度发布
- 百分比控制(如:只对 10% 用户推送)
- 设备 ID 哈希分流
- 强制更新开关
- 大版本安装包管理
📊 统计分析
- 实时仪表板
- 下载趋势图表
- 版本分布统计
- 设备分布分析
👥 用户管理
- 多用户支持
- 权限分级(管理员、开发者、测试)
- 应用审核机制
在线服务
我们提供了免费的补丁托管服务供测试使用:
- 服务地址: https://android-hotupdateserver.zeabur.app
- 管理后台: https://android-hotupdateserver.zeabur.app/dashboard
- 默认账号: admin / admin123
客户端集成
// 检查更新
UpdateManager updateManager = new UpdateManager(context, "http://your-server.com");
updateManager.checkUpdate("your-app-id", "1.0.0", new UpdateCallback() {
@Override
public void onUpdateAvailable(PatchInfo patchInfo) {
// 有新补丁可用
updateManager.downloadAndApply(patchInfo, callback);
}
@Override
public void onNoUpdate() {
// 已是最新版本
}
});
💡 热更新原理
DEX 热更新原理
ClassLoader
↓
pathList (DexPathList)
↓
dexElements[] (Element[])
↓
[补丁DEX] [原始DEX1] [原始DEX2] ...
通过反射修改 dexElements 数组,将补丁 DEX 插入到最前面,类加载时优先从补丁 DEX 查找。
资源热更新原理
创建新的 AssetManager
↓
加载补丁资源
↓
替换所有 Resources 的 AssetManager
↓
清空 ResourcesManager 缓存
SO 库热更新原理
提取补丁 SO 文件
↓
修改 nativeLibraryPathElements
↓
将补丁 SO 路径插入最前面
🎯 Demo 应用
下载 Demo APK 体验完整功能:
👉 点击下载
Demo 功能:
- 📱 设备端生成补丁
- 🔒 配置安全策略(签名验证、加密)
- 🔐 支持多种加密方式
- 🛡️ 自动防篡改保护
- 🔄 补丁回滚功能
- 🌐 服务端 API 测试
📊 性能对比
| 操作 | Native 引擎 | Java 引擎 |
|---|---|---|
| 小型 APK (< 10MB) | 5-10 秒 | 10-15 秒 |
| 中型 APK (10-50MB) | 15-30 秒 | 30-60 秒 |
| 大型 APK (> 50MB) | 30-60 秒 | 1-3 分钟 |
性能提升:2-3 倍 🚀
🔧 兼容性
Android 版本
- ✅ Android 5.0+ (API 21+)
- ✅ 推荐 Android 7.0+ (API 24+)
- ✅ 最高支持 Android 14 (API 34)
ABI 支持
- ✅ armeabi-v7a (32位 ARM)
- ✅ arm64-v8a (64位 ARM)
- ✅ x86 (32位 x86)
- ✅ x86_64 (64位 x86)
定制 ROM
- ✅ MIUI
- ✅ EMUI
- ✅ ColorOS
- ✅ Flyme
- ✅ 其他定制系统
📋 与其他方案对比
| 特性 | 本项目 | Tinker | Robust | Sophix |
|---|---|---|---|---|
| 开源 | ✅ | ✅ | ✅ | ❌ |
| 免费 | ✅ | ✅ | ✅ | ❌ |
| DEX 热更新 | ✅ | ✅ | ✅ | ✅ |
| 资源热更新 | ✅ | ✅ | ❌ | ✅ |
| SO 热更新 | ✅ | ✅ | ❌ | ✅ |
| 设备端生成 | ✅ | ❌ | ❌ | ❌ |
| Web 管理后台 | ✅ | ❌ | ❌ | ✅ |
| Native 加速 | ✅ | ✅ | ❌ | ✅ |
| 签名验证 | ✅ | ✅ | ❌ | ✅ |
| 加密保护 | ✅ | ❌ | ❌ | ✅ |
| 防篡改保护 | ✅ | ❌ | ❌ | ✅ |
🤔 常见问题
Q: 支持哪些 Android 版本?
A: 支持 Android 5.0+ (API 21+),推荐 Android 7.0+ (API 24+)
Q: 可以热更新 AndroidManifest.xml 吗?
A: 不可以,这是 Android 机制的限制,需要重新安装 APK
Q: 资源更新为什么需要重启?
A: 资源需要重新加载到 AssetManager,需要重启 Activity 才能看到新界面
Q: 如何回滚补丁?
A: 调用 helper.clearPatch() 然后重启应用
Q: 支持加固的 APK 吗?
A: 部分支持,建议在加固前生成补丁,加固后充分测试
Q: 可以商用吗?
A: 可以!采用 Apache License 2.0,可以免费商用
📚 文档资源
- GitHub 仓库: https://github.com/706412584/Android_hotupdate
- 快速开始: README.md
- 详细使用文档: USAGE.md
- 常见问题: FAQ.md
- 服务端文档: patch-server/README.md
🎉 总结
这个 Android 热更新工具具有以下优势:
- 功能完整 - DEX、资源、SO、Assets 全面支持
- 性能优秀 - Native 引擎加速,速度提升 2-3 倍
- 安全可靠 - 签名验证、加密保护、防篡改
- 易于使用 - 简单的 API,完善的文档
- 管理方便 - Web 管理后台,灰度发布
- 完全免费 - Apache License 2.0,可商用
如果你正在寻找一个功能强大、安全可靠、完全免费的 Android 热更新方案,不妨试试这个项目!
🙏 致谢
本项目参考了以下优秀的开源项目:
📞 联系方式
- GitHub Issues: 提交问题
- Email: 706412584@qq.com
⭐ 如果这个项目对你有帮助,请给个 Star!
浙公网安备 33010602011771号