NetControl 是一款基于 Android 原生开发的轻量级局域网网页展示终端:启动后全屏无边框显示指定网页,并在后台运行本地 HTTP 服务,供局域网内的“中控主机/服务端”查询设备状态与下发 URL 切换指令。
- 全屏沉浸式 WebView 展示网页(适配不同分辨率)
- 本地 HTTP 监听服务(默认端口 8080)
- 断电/重启后自动恢复上一次下发的 URL(SharedPreferences 持久化)
- 支持需要登录弹窗的网页(HTTP Basic Auth)
- 支持首次主文档请求附带自定义请求头(headers)
- Android:minSdk 23(Android 6.0+)
- JDK:建议 17(本项目本机打包使用 JDK 17)
- Android Studio / Android SDK(可用命令行 Gradle 构建)
PowerShell(Windows)示例:
$env:JAVA_HOME = "C:\Program Files\Java\jdk-17"
.\gradlew assembleDebug生成路径:
app/build/outputs/apk/debug/app-debug.apk
Release 签名通过环境变量或 Gradle 属性注入(仓库默认忽略 keystore/签名配置文件):
RELEASE_STORE_FILERELEASE_STORE_PASSWORDRELEASE_KEY_ALIASRELEASE_KEY_PASSWORD
示例(PowerShell):
$env:JAVA_HOME = "C:\Program Files\Java\jdk-17"
$env:RELEASE_STORE_FILE = "C:\path\to\your.jks"
$env:RELEASE_STORE_PASSWORD = "******"
$env:RELEASE_KEY_ALIAS = "your_alias"
$env:RELEASE_KEY_PASSWORD = "******"
.\gradlew assembleRelease生成路径:
app/build/outputs/apk/release/app-release.apk
项目已集成 GitHub Actions 工作流(.github/workflows/build.yml),实现 Push 自动构建 + Tag 自动发布 Release。
| 事件 | 行为 |
|---|---|
Push 到 main / master |
构建 Release APK,上传为 Artifact(保留 30 天) |
提交 PR 到 main / master |
构建验证,确保代码可正常编译 |
推送 v* 格式的 Tag |
构建 APK 并自动创建 GitHub Release,附带 APK 下载 |
在 GitHub 仓库的 Settings → Secrets and variables → Actions 中添加以下 4 个 Secret:
生成 KEYSTORE_BASE64(PowerShell):
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\path\to\your.jks")) | Set-Clipboard注意:若不配置 Secrets,工作流仍会运行,但构建产物为未签名包(
app-release-unsigned.apk),无法直接安装。
git tag v1.0.0
git push origin v1.0.0推送 Tag 后,Actions 自动构建并在 Releases 页面发布带 APK 附件的版本。
设备在局域网内固定监听:
http://<设备IP>:8080
请求:
GET http://<设备IP>:8080/api/status
返回(200)示例:
{
"code": 200,
"msg": "success",
"data": {
"device_name": "NetControl_Terminal",
"device_ip": "192.168.1.105",
"current_url": "http://192.168.1.100/display1.html",
"screen_resolution": "1920x1080",
"is_fullscreen": true
}
}请求:
POST http://<设备IP>:8080/api/set_urlContent-Type: application/json
Body 示例(最简):
{
"url": "http://192.168.1.100/new_dashboard.html"
}注意:
url支持http:///https://- 服务端侧如果会额外包裹引号/反引号,App 端会做首尾清理(trim + 去除外层引号/反引号)
{
"url": "http://192.168.18.119:1880/static/",
"basic_user": "admin",
"basic_pass": "admin"
}{
"url": "http://192.168.1.100/new_dashboard.html",
"headers": {
"X-Auth-Token": "xxxx",
"Cookie": "a=b; c=d"
}
}返回(200)示例:
{
"code": 200,
"msg": "Command received, loading URL...",
"data": null
}PowerShell 中建议使用 curl.exe:
curl.exe "http://192.168.1.105:8080/api/status"
curl.exe -X POST "http://192.168.1.105:8080/api/set_url" -H "Content-Type: application/json" -d "{\"url\":\"http://192.168.1.100/new_dashboard.html\"}"- App 启动:进入全屏沉浸式 WebView
- 若本地无历史 URL:显示“等待主机下发指令…”
- 启动本地 HTTP 服务监听 8080
- 收到
/api/set_url:保存 URL 并在 UI 线程加载,重启后自动恢复
- 根目录
ico.png用于生成 launcher 图标资源(不同密度 mipmap + 自适应前景图)
- WebView 全屏与持久化逻辑:
app/src/main/java/com/example/netcontrol/MainActivity.java - 本地 HTTP 服务与 API:
app/src/main/java/com/example/netcontrol/LocalHttpServer.java - Android 配置:
app/src/main/AndroidManifest.xml
