From 3690108ecac39c1142995c0bfb0e96a4d4adf3ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A8=80=E5=AD=90=E6=A5=AA=E4=B8=96?= <126686601+Suzhelan@users.noreply.github.com> Date: Fri, 13 Sep 2024 19:53:16 +0800 Subject: [PATCH] Update README.md --- README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 21ecc1f..5054d31 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,23 @@ ### 功能 自动检测QStory的更新,并且自动更新,加载到QQ --- +### 实现原理 +通过检测在线版本和本地版本是否匹配,不匹配则拉取在线版本的APK +再通过Dex/Apk热加载进行加载模块 +--- ### 使用的技术栈 -- SQLite -- XPosed -- OkHttp,RxJava,FastJSON +- ~~SQLite~~ 改为使用MMKV,简单数据用SQLite会增加数据库维护成本 +- XPosed Hook +- OkHttp,~~RxJava~~ Kotlin协程Flow更加轻量,FastJSON - 跨进程通信(跨应用)ContentProvider - 热更新(基于DexClassLoader) - 设计模式:观察者,异步回调等 --- ### 项目主要知识要点 - 如何动态加载模块并进行Hook:[ModuleLoader](./app/src/main/java/top/linl/qstorycloud/hook/moduleloader/ModuleLoader.java) - - 如何进行模块的更新,主要通过观察者模式实现定时拉取更新:[update](./app/src/main/java/top/linl/qstorycloud/hook/update) ,[更新检测](./app/src/main/java/top/linl/qstorycloud/hook/update/UpdateChecker.java),[观察和处理检测结果](./app/src/main/java/top/linl/qstorycloud/hook/update/UpdateObserver.java) - - 处理下载的任务和通知[DownloadTask](./app/src/main/java/top/linl/qstorycloud/hook/update/util/DownloadTask.java) - - 数据存储怎么做的,主要看本地模块信息记录:[ModuleInfoDAO](./app/src/main/java/top/linl/qstorycloud/db/ModuleInfoDAO.java) ,拉取到的更新记录[UpdateInfoDAO](./app/src/main/java/top/linl/qstorycloud/db/UpdateInfoDAO.java) + - 如何进行模块的更新,主要通过观察者模式实现定时拉取更新:[update](./app/src/main/java/top/linl/qstorycloud/hook/update) ,[更新检测](.app/src/main/java/top/linl/qstorycloud/hook/update/UpdateObserver.kt),[观察和处理检测结果](./app/src/main/java/top/linl/qstorycloud/hook/update/UpdateChecker.kt) + - 处理下载的任务和通知 [DownloadTask](./app/src/main/java/top/linl/qstorycloud/hook/update/util/DownloadTask.java) + - 数据存储配置MMKV相关 [Config](.app/src/main/java/top/linl/qstorycloud/config) - 如何使模块和QQ进行跨进程通讯采用的是[ContentProvider](./app/src/main/java/top/linl/qstorycloud/provider/AppContentProvider.java) ---