🤖
APP构建流程精讲:从源码到安装包
技术学习 · Android CI 实战 · 以 V免签监控端为例
🎯 核心结论
在一台 Linux 服务器上搭好 JDK 17 + Android SDK 35 + Gradle 8.10.2 工具链后,任何 Android 项目只需一条 ./gradlew assembleDebug 就能产出可安装的 APK。本文以真实的 V免签监控端项目为例,拆解从源码结构、编译环境、构建命令到签名分发的完整链路,所有命令均经过实机验证。
1
系统架构:APP 在整个收款链路中的位置
微信/支付宝 收款到账通知
↓
监控 APP(Android 手机常驻)
↓ NotificationListenerService 监听通知栏
识别金额 → HTTP 回调(MD5 签名)
↓
V免签服务端 → 你的业务系统
↓
监控 APP(Android 手机常驻)
↓ NotificationListenerService 监听通知栏
识别金额 → HTTP 回调(MD5 签名)
↓
V免签服务端 → 你的业务系统
💡 为什么这个设计很聪明
它没有碰任何官方支付接口,而是利用 Android 系统级 API NotificationListenerService 监听所有通知栏消息(需用户授予「通知使用权」),按包名 + 关键词识别收款通知,四级正则提取金额(¥100.50 → 收款100.50元 → 100.50元 → 兜底取数字)。服务器地址和通信密钥存在 SharedPreferences,由用户扫码或手填——这意味着换域名、迁服务器完全不用重新编译 APP。
2
技术栈全景
☕ Java 17
纯 Java 无 Kotlin,编译目标 17
📱 Android SDK 35
compile/target 35,min 24,覆盖 Android 7.0~15
🐘 Gradle 8.10.2
+ AGP 8.8.2,wrapper 方式自动下载
🌐 OkHttp 4.12.0
心跳(30秒)+ 收款推送
📷 ZXing 3.5.3
扫码配置,源码内嵌而非依赖库
🎨 AndroidX 1.7.0
2026 优化版已从旧 support 库迁移
3
源码结构:每个文件做什么
vmqApk-source/
├── app/src/main/java/com/vone/vmq/
│ ├── MainActivity.java # 扫码配置/手动配置/心跳测试
│ ├── NeNotificationService2.java # 核心 30KB:监听+识别+保活+推送
│ ├── BootReceiver.java # 开机自启动
│ └── util/ # BitmapUtil / Constant / UriUtil
├── app/build.gradle # SDK 版本 + 依赖清单
├── build.gradle # 项目级 AGP 8.8.2 声明
└── local.properties # sdk.dir=/opt/android-sdk(本机路径)
├── app/src/main/java/com/vone/vmq/
│ ├── MainActivity.java # 扫码配置/手动配置/心跳测试
│ ├── NeNotificationService2.java # 核心 30KB:监听+识别+保活+推送
│ ├── BootReceiver.java # 开机自启动
│ └── util/ # BitmapUtil / Constant / UriUtil
├── app/build.gradle # SDK 版本 + 依赖清单
├── build.gradle # 项目级 AGP 8.8.2 声明
└── local.properties # sdk.dir=/opt/android-sdk(本机路径)
4
服务器编译环境搭建(一次性)
以 Debian 12 为例,四步把裸服务器变成 Android 构建机:
① 安装 JDK 17
apt install -y openjdk-17-jdk
java -version # openjdk 17.0.20
java -version # openjdk 17.0.20
② 下载 Android 命令行工具
mkdir -p /opt/android-sdk/cmdline-tools
cd /opt/android-sdk/cmdline-tools
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-*.zip && mv cmdline-tools latest
cd /opt/android-sdk/cmdline-tools
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-*.zip && mv cmdline-tools latest
③ sdkmanager 装齐平台组件
yes | /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager \
"platform-tools" "platforms;android-35" "build-tools;35.0.0"
"platform-tools" "platforms;android-35" "build-tools;35.0.0"
④ 项目里声明 SDK 路径
echo "sdk.dir=/opt/android-sdk" > local.properties
⚠️ 许可提示:首次构建若报 "You have not accepted the license agreements",执行
yes | sdkmanager --licenses 即可。
5
重新生成 APP:日常构建流程
🚀 核心就一条命令
cd /www/wwwroot/vmqApk-source
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 ./gradlew assembleDebug
# 产物:
app/build/outputs/apk/debug/app-debug.apk
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 ./gradlew assembleDebug
# 产物:
app/build/outputs/apk/debug/app-debug.apk
✓ 首次构建
约 3~5 分钟(下载 Gradle 发行版和依赖),之后增量构建秒级
✓ 离线构建
依赖已缓存后可加 --offline 参数,断网也能出包
✓ 版本归档
cp 产物为 vmq-monitor-v3.2.apk,版本号在 app/build.gradle 里 versionCode+1
6
签名机制:debug vs release
debug 包(assembleDebug)自动用
release 包(assembleRelease)需要正式 keystore——不配置的话产出的是未签名包,装不上。要正式签名需生成密钥库并在 build.gradle 的 release 块配置 signingConfig。
~/.android/debug.keystore 签名,可直接安装到任何手机,日常使用和分发足够了。release 包(assembleRelease)需要正式 keystore——不配置的话产出的是未签名包,装不上。要正式签名需生成密钥库并在 build.gradle 的 release 块配置 signingConfig。
🔑 生成正式签名(需要时)
keytool -genkeypair -v -keystore vmq-release.jks \
-alias vmq -keyalg RSA -keysize 2048 -validity 10000
-alias vmq -keyalg RSA -keysize 2048 -validity 10000
🚨 签名一致性铁律:手机上已装 v3.1(debug 签名),换正式签名的包会因签名不同而覆盖安装失败,必须先卸载旧版。反过来,只要签名相同,新版本可以直接覆盖升级,用户的配置(服务器地址/密钥)都会保留。
7
保活与识别机制(原理精讲)
监控 APP 能 7×24 稳定运行,靠的是五层保活叠加:
🔔 前台服务
startForeground 持久通知,系统最高优先级
⚡ WakeLock
PARTIAL 电源锁,防 CPU 深度休眠
💓 心跳线程
每 30 秒与服务端通信,保持网络与进程活跃
🔄 自动重连
onListenerDisconnected 时 requestRebind 自愈
🔌 开机自启
BootReceiver 监听开机广播,重启即恢复
⚠️ 国产 ROM 提醒:小米/华为/OPPO/vivo 的后台限制比原生 Android 严格得多,装机后必须手动完成四项设置:通知使用权、电池优化白名单、锁定后台、自启动权限。缺一项都可能掉单。
8
故障排查速查表
🔍 万能调试命令
adb logcat | grep VmqNotification # 所有通知捕获日志
adb logcat -s VmqNotification:D # 只看本 APP
adb logcat -s VmqNotification:D # 只看本 APP
检测监听无反应
重开通知使用权开关 → 重启 APP → 部分机型需重启整机
微信收款无回调
确认微信已关注「微信支付」公众号,否则收不到到账通知
支付宝识别不到
用 adb 看通知原文,把新格式的关键词补进 NeNotificationService2.java 的关键词数组
心跳失败
检查 APP 内 host/key 配置,服务端是否可达,HTTPS 需改代码中 URL 前缀
💬 一句话总结
服务器装好 JDK + SDK + Gradle 三件套后,改代码 → ./gradlew assembleDebug → 拿 APK 就是全部流程。debug 签名直接装机可用,版本号递增做好归档;唯一要记牢的是签名一致性——同签名可覆盖升级,换签名必须先卸载。
评论区
0 条评论 · 评论需审核通过后显示
发表评论