场景:设备还没接进平台、或人站在机架前不想插线时,原来得在手机上手动输平台地址和
令牌(还可能漏指纹)。现在平台「设备池」里点某台设备的「二维码」,手机上点
「扫码配置」扫一下即完成。
- ScanActivity:Camera1 + **ZXing core**(刻意不用 ML Kit —— 那要 Google Play 服务,
国内机型普遍没有);QR 的定位图案让 ZXing 自带旋转不变性,不用手动转 YUV 帧
- 二维码内容(平台侧生成):{"v":1,"server":…,"token":…,"fingerprint":…,"name":…}
—— 指纹只能由平台给(应用读不到 ro.serialno,见 Prefs 说明),扫码正好是最省事的传递方式
- MainActivity 加「扫码配置」按钮(原「配置」改名「手动配置」)
实机踩到的坑(已修):
- **相机必须在拿到权限后再打开**:surfaceCreated 早于权限回调触发,先开相机会报
"Fail to connect to camera service" 并把流程直接断掉(第一次实测就是这么挂的)
→ 改成 surfaceCreated 只记下 holder,授权回调里再开
- `params.previewSize = size` 编译不过:setPreviewSize 收的是两个 int 不是 Size 对象
实测(A07 / USB 连接):扫码 → 相机启动 → 解码 → 保存 → 立刻拉清单,
平台认出「A07」,全程无需打字、无需 adb。
53 lines
1.5 KiB
Groovy
53 lines
1.5 KiB
Groovy
plugins {
|
|
id 'com.android.application'
|
|
id 'org.jetbrains.kotlin.android'
|
|
}
|
|
|
|
android {
|
|
namespace 'com.example.deviceagent'
|
|
compileSdk 34
|
|
|
|
defaultConfig {
|
|
applicationId "com.example.deviceagent"
|
|
minSdk 29 // Android 10;剪贴板限制就是从这一版开始的
|
|
targetSdk 34
|
|
versionCode 5
|
|
versionName "1.4"
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled false // 工具类 App,不混淆(方便排查)
|
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
}
|
|
debug {
|
|
applicationIdSuffix ""
|
|
}
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_17
|
|
targetCompatibility JavaVersion.VERSION_17
|
|
}
|
|
kotlinOptions {
|
|
jvmTarget = '17'
|
|
}
|
|
|
|
// 设备都是 arm64,只出一个架构的包,构建快、体积小
|
|
splits {
|
|
abi {
|
|
enable false
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
// 刻意只引两个:
|
|
// androidx.core —— 只为 FileProvider(把下载的 APK 授权给系统安装器读)
|
|
// zxing core —— 扫码配置用。**刻意不用 ML Kit**:那要 Google Play 服务,
|
|
// 国内机型上普遍没有,扫码会直接不可用。
|
|
// HTTP 用 HttpURLConnection、JSON 用 org.json(系统内置),不引网络/序列化库。
|
|
implementation 'androidx.core:core-ktx:1.13.1'
|
|
implementation 'com.google.zxing:core:3.5.3'
|
|
}
|