GodViewer 编译教程(Windows)

适用仓库:repo/(fork 自 https://github.com/tobbytian/GodViewer)
本文所有版本号、路径、耗时均为本机实测记录。
本文件放在 git 仓库外面,不会被 git add . 误提交。


0. 一句话速查

cd D:\DevTools\Codeartswork\Godviewer\repo
.\gradlew.bat assembleRelease # 产物: app\build\outputs\apk\release\app-release.apk


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                      # 期望: openjdk version "17.x"
Get-ChildItem "D:\DevTools\Android\Sdk\platforms" -Name # 期望包含 android-35
Get-ChildItem "D:\DevTools\Android\Sdk\build-tools" -Name # 期望包含 35.0.0

1.2 没有 Android SDK 怎么装

两条路,选一条:

A. 装 Android Studio(最省事)

  1. 下载 https://developer.android.com/studio ,安装时保持默认(自带 SDK 管理器)。
  2. 首次启动 → More Actions → SDK Manager → SDK Platforms 勾选 **Android 15 (API 35)**。
  3. SDK Tools 选项卡勾选 Android SDK Build-Tools、Android SDK Platform-Tools。
  4. Apply 下载完即可。SDK 默认在 %LOCALAPPDATA%\Android\Sdk。

B. 命令行 sdkmanager(不想装 Studio)

# 先建目录,下载 commandline-tools: https://developer.android.com/studio#command-line-tools-only
# 解压得到 cmdline-tools\latest\bin\sdkmanager.exe
sdkmanager --install "platforms;android-35" "build-tools;35.0.0" "platform-tools"
sdkmanager --licenses # 全部输入 y 接受协议

注意:SDK 路径不要带中文、空格、括号(例如 Program Files (x86) 会引发奇怪的解析问题)。放 D:\DevTools\Android\Sdk 这类纯英文短路径最稳。


2. 获取源码

cd D:\DevTools\Codeartswork\Godviewer
git 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。

# 内容一行即可(注意 Windows 路径的冒号要写成 \:)
"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 # 编译正式版 APK
.\gradlew.bat assembleDebug # 编译调试版 APK

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 编译(图形界面)

  1. File → Open → 选 repo 目录(不是 app 子目录)。
  2. 等右下角 Gradle Sync 完成(首次会下载依赖)。
  3. File → Settings → Build, Execution, Deployment → Build Tools → Gradle:
    • Gradle JDK 选 17(jbr-17 或 temurin-17)。
  4. 菜单 Build → Build Bundle(s) / APK(s) → Build APK(s)。
  5. 弹窗点 locate 直达产物目录。
  6. 想直接装到手机:选好设备后点绿色三角 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 步。

# 1) 装 APK(手机开 USB 调试)
adb devices # 确认能看到设备
adb install -r repo\app\build\outputs\apk\release\app-release.apk

  1. 手机上装好 LSPosed / libxposed 框架(需 root + Magisk/Kernelsu)。
  2. LSPosed 管理器 → 模块 → 启用 GodViewer。
  3. 在模块作用域里勾选目标 App(例如 com.xunmeng.pinduoduo)→ 重启目标 App。
  4. 目标 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 # 必须 BUILD SUCCESSFUL
git status --short # 确认没有 local.properties / debug-version.properties / build/
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
# local.properties 内容: sdk.dir=D\:\\DevTools\\Android\\Sdk
.\gradlew.bat assembleRelease
# BUILD SUCCESSFUL in 1m 8s
Get-Item app\build\outputs\apk\release\app-release.apk | Select-Object Length
# Length
# 2232594
adb install -r app\build\outputs\apk\release\app-release.apk