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 哈希分流
  • 强制更新开关
  • 大版本安装包管理

📊 统计分析

  • 实时仪表板
  • 下载趋势图表
  • 版本分布统计
  • 设备分布分析

👥 用户管理

  • 多用户支持
  • 权限分级(管理员、开发者、测试)
  • 应用审核机制

在线服务

我们提供了免费的补丁托管服务供测试使用:

客户端集成

// 检查更新
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,可以免费商用

📚 文档资源

🎉 总结

这个 Android 热更新工具具有以下优势:

  1. 功能完整 - DEX、资源、SO、Assets 全面支持
  2. 性能优秀 - Native 引擎加速,速度提升 2-3 倍
  3. 安全可靠 - 签名验证、加密保护、防篡改
  4. 易于使用 - 简单的 API,完善的文档
  5. 管理方便 - Web 管理后台,灰度发布
  6. 完全免费 - Apache License 2.0,可商用

如果你正在寻找一个功能强大、安全可靠、完全免费的 Android 热更新方案,不妨试试这个项目!

🙏 致谢

本项目参考了以下优秀的开源项目:

  • Tinker - 腾讯的 Android 热修复方案
  • Robust - 美团的热修复方案

📞 联系方式


⭐ 如果这个项目对你有帮助,请给个 Star!

GitHub: https://github.com/706412584/Android_hotupdate

posted on 2026-01-20 10:59  xcwl2026  阅读(1)  评论(0)    收藏  举报

导航