GodViewer 编译教程(Windows)
适用仓库:repo/(fork 自 https://github.com/tobbytian/GodViewer ) 本文所有版本号、路径、耗时均为本机实测记录。 本文件放在 git 仓库外面 ,不会被 git add . 误提交。
0. 一句话速查 cd D:\DevTools\Codeartswork\Godviewer\repo.\gradlew.bat assembleRelease
1. 环境要求
组件
要求版本
本机实测
说明
JDK
17 (必须)
OpenJDK 17.0.20.1 (Temurin)
AGP 8.5.2 最低 JDK 17;JDK 8/11 会直接报 Unsupported class file major version
Android Gradle Plugin
8.5.2
由 wrapper 自动下载
见 repo/build.gradle
Kotlin
1.9.24
同上
不要升到 2.x,和 libxposed:service 有冲突(见 §6.4)
Gradle
8.7
由 wrapper 自动下载
见 repo/gradle/wrapper/gradle-wrapper.properties,不需要单独装 Gradle
Android SDK Platform
android-35
已装(android-36 也有)
compileSdk 35
Android Build-Tools
35.0.0
已装(34/35/36 都有)
Android SDK Platform-Tools
任意新版
已装
提供 adb,用于安装 APK
磁盘/内存
≥ 2 GB 空闲
org.gradle.jvmargs=-Xmx2048m
内存太小会在 R8 阶段 OOM
1.1 检查本机环境 java -version Get-ChildItem "D:\DevTools\Android\Sdk\platforms" -Name Get-ChildItem "D:\DevTools\Android\Sdk\build-tools" -Name
1.2 没有 Android SDK 怎么装 两条路,选一条:
A. 装 Android Studio(最省事)
下载 https://developer.android.com/studio ,安装时保持默认(自带 SDK 管理器)。
首次启动 → More Actions → SDK Manager → SDK Platforms 勾选 **Android 15 (API 35)**。
SDK Tools 选项卡勾选 Android SDK Build-Tools 、Android SDK Platform-Tools 。
Apply 下载完即可。SDK 默认在 %LOCALAPPDATA%\Android\Sdk。
B. 命令行 sdkmanager(不想装 Studio)
sdkmanager --install "platforms;android-35" "build-tools;35.0.0" "platform-tools" sdkmanager --licenses
注意:SDK 路径不要带中文、空格、括号 (例如 Program Files (x86) 会引发奇怪的解析问题)。放 D:\DevTools\Android\Sdk 这类纯英文短路径最稳。
2. 获取源码 cd D:\DevTools\Codeartswork\Godviewergit clone https://github.com/tobbytian/GodViewer.git repo cd repo
若要改代码后提 PR,配好 fork:
git remote rename origin upstream git remote add fork https://github.com/<你的用户名>/GodViewer.git git checkout -b feature/xxx
3. 配置 local.properties(关键,最容易漏) 文件位置:repo/local.properties。该文件被 .gitignore 忽略,每人本地各建一份。 没有它构建会直接失败:SDK location not found。
"sdk.dir=D\:\\DevTools\\Android\\Sdk" | Set-Content repo\local.properties -Encoding ascii
最终文件内容:
sdk.dir =D\:\\DevTools\\Android\\Sdk
三种等价写法,任选其一:
sdk.dir =D\:\\DevTools\\Android\\Sdk # 反斜杠转义(AS 默认生成) sdk.dir =D:/DevTools/Android/Sdk # 正斜杠,更清爽,推荐手写 sdk.dir =C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk
也可以用环境变量替代(不建此文件):
[Environment ]::SetEnvironmentVariable("ANDROID_HOME" ,"D:\DevTools\Android\Sdk" ,"User" ) [Environment ]::SetEnvironmentVariable("ANDROID_SDK_ROOT" ,"D:\DevTools\Android\Sdk" ,"User" )
4. 命令行编译 在 repo 目录下执行(PowerShell 用 .\gradlew.bat,不能只写 gradlew):
cd D:\DevTools\Codeartswork\Godviewer\repo.\gradlew.bat clean .\gradlew.bat assembleRelease .\gradlew.bat assembleDebug
4.1 产物路径
变体
路径
本机实测大小
Release
repo\app\build\outputs\apk\release\app-release.apk
2,232,594 B ≈ 2.13 MB
Debug
repo\app\build\outputs\apk\debug\app-debug.apk
略大(未混淆)
成功标志:
BUILD SUCCESSFUL in 1m 8s 52 actionable tasks: 12 executed, 40 up-to-date
首次编译要下载 Gradle 8.7 + AGP + 依赖,约 5–15 分钟(看网络)。第二次起走缓存,1 分多钟。
4.2 只验证代码能不能编过(不出 APK,更快) .\gradlew.bat compileReleaseKotlin
4.3 带日志排查 .\gradlew.bat assembleRelease --stacktrace --info 2 >&1 | Tee-Object build.log
4.4 国内网络加速 在 repo/gradle.properties 里加 JVM 代理(或配全局 Gradle 代理):
systemProp.http.proxyHost =127.0.0.1 systemProp.http.proxyPort =7890 systemProp.https.proxyHost =127.0.0.1 systemProp.https.proxyPort =7890
5. Android Studio 编译(图形界面)
File → Open → 选 repo 目录 (不是 app 子目录)。
等右下角 Gradle Sync 完成(首次会下载依赖)。
File → Settings → Build, Execution, Deployment → Build Tools → Gradle:
Gradle JDK 选 17 (jbr-17 或 temurin-17)。
菜单 Build → Build Bundle(s) / APK(s) → Build APK(s)。
弹窗点 locate 直达产物目录。
想直接装到手机:选好设备后点绿色三角 Run 'app'。
若 AS 报 SDK location not found,手动建 repo/local.properties 并填 §3 的内容,然后 File → Sync Project with Gradle Files。
6. 常见报错对照表
报错
原因
解决
SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable or by setting the sdk.dir path in your project's local properties file
缺 local.properties
见 §3
Failed to find target with hash string 'android:35'
没装 API 35
sdkmanager --install "platforms;android-35"
Unsupported class file major version 61/65 / Gradle requires JVM 17
JDK 版本不对
切到 JDK 17:$env:JAVA_HOME="C:\Program Files\Eclipse Adoptium\jdk-17..."
Invalid package name: com.xxx(或 R 类找不到)
改 applicationId 时漏改 namespace
两者都在 app/build.gradle,包名是 com.godviewer.app
Dependency requires compileSdk 36/37 / AarMetadata check failed
libxposed:service 的 AAR 元数据要求高版本
项目已在 app/build.gradle 里 tasks.matching { it.name.contains('AarMetadata') } { enabled = false } 关掉,并在 gradle.properties 加了 android.suppressUnsupportedCompileSdk=35,36,37。不要删这两处
Kotlin compiler version conflict / kotlin-stdlib 2.2 报错
libxposed:service 传递依赖了 Kotlin 2.2
已在 app/build.gradle 用 exclude group: 'org.jetbrains.kotlin' 排除
安装时报 INSTALL_FAILED_UPDATE_INCOMPATIBLE / signatures do not match
手机上已装别的签名版本(比如官方 release)
先卸载:adb uninstall com.godviewer.app
R8 阶段 OutOfMemoryError
堆内存不足
调大 gradle.properties 的 -Xmx2048m → -Xmx4096m
gradlew : command not found
用了 PowerShell 语法
PowerShell 里写 .\gradlew.bat
中文乱码(如 鈥? 鈫?)
PowerShell 默认 GBK 读写 UTF-8 文件
读写时显式 -Encoding utf8;gradle.properties 已有 -Dfile.encoding=UTF-8
7. 安装与启用(LSPosed 模块) GodViewer 是 Xposed / LSPosed 模块 ,光装 APK 不生效,必须走完 4 步。
adb devices adb install -r repo\app\build\outputs\apk\release\app-release .apk
手机上装好 LSPosed / libxposed 框架 (需 root + Magisk/Kernelsu)。
LSPosed 管理器 → 模块 → 启用 GodViewer 。
在模块作用域里勾选目标 App (例如 com.xunmeng.pinduoduo)→ 重启目标 App。
目标 App 内出现 GodViewer 悬浮控件调试层即成功。
改了模块代码后重新 assembleRelease + adb install -r,然后必须重启目标 App (必要时重启手机)才会加载新 hook。
8. 版本号机制(改版本前必读) app/build.gradle 顶部:
def RELEASE_VERSION_CODE = 11 def RELEASE_VERSION_NAME = "4.3.2"
Release :固定用上面两个常量,发版时手改。
Debug :每次跑 assembleDebug / installDebug / bundleDebug,自动 +1,并写回 app/debug-version.properties(该文件也是本地生成物,不进 git)。
所以反复编 debug 后版本号会一直涨,属正常设计,不是 bug。
9. 打包发布 / 签名说明 当前 release 构建块里:
signingConfig signingConfigs.debug
即自用 release 用 debug keystore 签名 ,方便自测。要正式分发必须换自己的 keystore:
keytool -genkey -v -keystore godviewer.jks -keyalg RSA -keysize 2048 -validity 10000 -alias godviewer
android { signingConfigs { release { storeFile file("../godviewer.jks" ) storePassword "..." keyAlias "godviewer" keyPassword "..." } } buildTypes { release { signingConfig signingConfigs.release } } }
密码别硬写进 build.gradle 提交上去。放 gradle.properties(已 gitignore)或环境变量。
10. 目录结构速查 repo/ ├─ build.gradle # AGP 8.5.2 / Kotlin 1.9.24 ├─ settings.gradle # repositories: google() + mavenCentral() ├─ gradle.properties # JVM 参数、UTF-8、suppressUnsupportedCompileSdk ├─ local.properties # ★ sdk.dir,每人自建,不进 git ├─ gradlew.bat # Windows 命令行入口 ├─ gradle/wrapper/ # Gradle 8.7 配置 └─ app/ ├─ build.gradle # compileSdk 35 / minSdk 23 / 依赖 / 版本逻辑 ├─ debug-version.properties # debug 自增版本号,本地生成 └─ src/main/ ├─ java/com/godviewer/app/ │ ├─ host/ # 宿主 UI(规则管理、镜像详情页) │ ├─ target/ # 注入侧(规则应用、属性编辑器) │ └─ shared/model/ # ViewRule / ViewAttrSnapshot 数据模型 ├─ res/layout/ # 属性编辑面板等 XML ├─ res/values{,-zh-rCN}/strings.xml # 中英文文案 └─ resources/META-INF/xposed # libxposed 模块声明(module.prop / scope.list / java_init.list)
11. 提交 PR 前的检查清单 cd repo.\gradlew.bat assembleRelease git status --short git diff --stat
[ ] 编译通过(不是只”能编过 Kotlin”,要跑到 assembleRelease 出 APK)
[ ] 未提交 local.properties、app/debug-version.properties、app/build/、*.log
[ ] 中英文 strings.xml 都加了新字符串,且无重复 key (重复会直接构建失败)
[ ] 改了数据模型 → 旧 JSON 规则文件仍可加载(字段有默认值 / 有 null 守卫)
[ ] commit message 说清”为什么改”,不只是”改了什么”
12. 已验证的完整流程(本机实录) cd D:\DevTools\Codeartswork\Godviewer\repo.\gradlew.bat assembleRelease Get-Item app\build\outputs\apk\release\app-release .apk | Select-Object Lengthadb install -r app\build\outputs\apk\release\app-release .apk