【Code With SOLO】安卓app习惯养成助手

1.摘要:

解决长时间玩手机的难题,app可以设置默认弹出选择的app,当手机休眠唤醒时,会强制弹出该app

https://github.com/langmyerburling463-gif/solo_test

2.背景:

每次打开手机都会神不知鬼不觉打开抖音或者游戏,控制不住自己不知不觉得刷上1个小时,浪费时间。如果你有学习app,每次打开手机都会默认弹出该学习app,提升个人时间的合理利用

3.实践过程:

任务拆解与实现分析

任务拆解方法

我将整个项目拆解为以下几个核心模块:

  1. 基础架构搭建

    • React Native + TypeScript 项目初始化

    • Android 原生模块集成

    • 权限配置和清单文件设置

  2. 核心功能实现

    • 广播接收器(监听屏幕解锁事件)

    • 前台服务(保持应用进程活跃)

    • 应用启动逻辑(处理 MIUI 权限限制)

    • 设置持久化(SharedPreferences 集成)

  3. 用户界面

    • 时间范围选择

    • 应用列表选择

    • 服务控制

    • 权限设置引导

  4. 问题修复与优化

    • MIUI 权限适配

    • 时间选择模态框修复

    • 应用列表加载优化

    • 启动方式简化

使用的 SOLO 能力

  1. 代码分析与理解

    • 快速阅读和理解现有代码结构

    • 识别关键文件和功能模块

  2. 跨平台开发

    • React Native 前端开发

    • Android 原生代码编写和调试

  3. 问题定位与解决

    • 日志分析(解析 MIUI 系统日志)

    • 权限问题排查

    • 布局和交互问题修复

  4. 构建与部署

    • Gradle 构建配置

    • Release APK 生成

    • ADB 安装和调试

  5. 版本控制

    • Git 仓库初始化

    • 代码提交和推送

关键操作过程

  1. 初始化与配置

    • 检查项目结构和依赖

    • 配置 Android 权限和服务

  2. 核心功能开发

    • 实现 ScreenUnlockReceiver.java 监听屏幕事件

    • 实现 ScreenMonitorService.java 前台服务

    • 实现 ForegroundLauncherActivity.java 应用启动

    • 开发 React Native 原生模块(应用列表、设置持久化)

  3. UI 开发与修复

    • 实现独立时间选择功能

    • 添加 24:00 时间选项

    • 实现模糊搜索功能

    • 修复时间选择模态框问题

  4. 问题排查与优化

    • 分析 MIUI 权限限制

    • 简化应用启动逻辑

    • 优化设置持久化

  5. 部署与版本控制

    • 构建 Release APK

    • 初始化 Git 仓库

    • 推送代码到 GitHub

踩过的坑

  1. MIUI 权限限制

    • 问题:MIUI 系统对后台应用启动有严格限制

    • 解决方案:使用前台服务和透明活动,引导用户开启特定权限

  2. 时间选择模态框

    • 问题:时间选项不显示、无法滚动、点击无响应

    • 解决方案:重写模态框实现,使用 ScrollView 和 TouchableOpacity

  3. Kotlin 守护进程连接失败

    • 问题:Gradle 构建时 Kotlin 守护进程连接失败

    • 解决方案:Gradle 自动回退到非守护进程编译

  4. Git 推送失败

    • 问题:HTTPS 连接超时

    • 解决方案:切换到 SSH 协议,添加 GitHub 到已知主机

  5. 应用列表加载问题

    • 问题:应用列表为空或只显示一个应用

    • 解决方案:添加预设应用列表作为 fallback,优化加载逻辑

  6. 设置持久化

    • 问题:设置不保存或加载失败

    • 解决方案:优化设置加载时机,确保在应用列表加载完成后再加载设置

  7. Android 12+ 后台活动限制

    • 问题:Android 12+ 对后台活动有严格限制

    • 解决方案:使用前台服务和正确的 Intent 标志组合

4.效果与总结:

这个app对我很适用,我是后端开发,不会安卓,几乎用vibe coding一步一步做出来了