# 安卓端 Kotlin + Jetpack Compose。功能与 Web 端同构:登录 → 工作区 → 任务 / 工单 / 知识。 ## 它已经能编译出 APK 了(本机实测) ``` BUILD SUCCESSFUL in 38s app/build/outputs/apk/debug/app-debug.apk 9.94 MB ``` 本机从零把编译链搭起来踩过的坑都固化在仓库里了,别再走一遍: | 现象 | 原因 | 仓库里的解法 | |---|---|---| | `Failed to load native library 'native-platform.dll'` | 旧 `~/.gradle` 缓存坏了 | 用独立 `GRADLE_USER_HOME`(我用的 `.local/gradle-home`) | | `validateSigningDebug: AccessDeniedException debug.keystore.lock` | 沙箱/受限用户对 `~/.android` 无写权限 | 工程内 keystore:`android/keystore/debug.keystore`,`app/build.gradle.kts` 显式指向 | | `compileDebugKotlin: AccessDeniedException %TEMP%\kotlin-compiler-*.alive` | `%TEMP%` 不可写 | 构建前把 `TEMP`/`TMP` 指到工程内可写目录 | | `Could not connect to Kotlin compile daemon` | 受限环境里 Kotlin 编译守护进程连不回来 | `gradle.properties` 里 `kotlin.compiler.execution.strategy=in-process` | | 依赖下载极慢(5 分钟 2MB) | Google Maven 直连慢 | `settings.gradle.kts` 先走阿里云镜像,再回落 google/mavenCentral | 需要:**JDK 17**(`JAVA_HOME`)、Android SDK **platform 35** + build-tools。 ```bash cd android gradle :app:assembleDebug # 或 ./gradlew(wrapper 需 Android Studio 补齐) ``` ## 连哪个后端 `android/local.properties`(不入库): ```properties dadao.apiBase=http://10.0.2.2:8100 # 模拟器访问宿主机 # dadao.apiBase=http://192.168.8.160:8100 # 真机走局域网 ``` 真机调试时后端必须监听 `0.0.0.0` 而不是 `127.0.0.1`: ```bash uvicorn app.main:app --host 0.0.0.0 --port 8100 ``` `app/src/debug/AndroidManifest.xml` 对 debug 变体放开了明文 HTTP—— release 仍然只允许 `network_security_config.xml` 里列出的域,别把这条挪到 main。 ## 安装到手机 ```bash adb install -r app/build/outputs/apk/debug/app-debug.apk ``` 首次打开 → 手机号登录(开发环境验证码在接口响应里回显,形如 `开发环境验证码:123456`)。 ## 结构 ``` app/src/main/java/com/dadao/task/ ├── MainActivity.kt 入口 + Splash/Login/Home/Tasks/Knowledge 路由 ├── data/ │ ├── Api.kt OkHttp + kotlinx.serialization;信封解包、业务码抛 ApiException │ └── TokenStore.kt 令牌本地存储(TODO:换 EncryptedSharedPreferences) └── ui/ ├── Theme.kt 与 Web 一致的墨青 + 陶土色板 ├── LoginScreen.kt 手机号 + 验证码 ├── HomeScreen.kt 工作区列表 / 新建 / 生成邀请码 ├── TaskListScreen.kt 任务视图切换、快速新建、勾选完成、详情与评论 └── KnowledgeScreen.kt 知识四态 tab、手记、按状态给动作(发布需 owner/admin) ``` ## 已知待办 - 工单页还没做(Web 已有):需要"我指派的 / 我发起的"两栏 + 接收/开工/提交/验收按钮; 接口在 `Api.kt` 里已经齐了(`tickets` / `ticketAction` / `verifyTicket` / `promote`)。 - 明文令牌存储(`TokenStore` 里已标 TODO)。 - 无离线缓存,弱网直接报错——与产品 D7「在线优先」一致。 - 邀请链接 `https://dadaotask.com/join//` 已在 Manifest 注册,落地处理尚未实现。 - 未在本机跑过模拟器(无 system-image、无连接设备),端到端只验证到"能编译、能装"。