万网网站建设特点基本seo
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
引言
原生项目复杂就复杂于就算一个颜色的改动可能都比较麻烦,不像普通web项目或者vue项目,其次原生项目安卓Android的环境配置是很复杂的,很多人 第一步可以搞一周 甚至一个月都搞不成功,再次之前说了可以用trae辅助我们编程,但是真正的开发和调试还是得Android studio 离开Android studio 原生安卓项目也是没法运行的,至少trae满足不了,vs要满足也比较麻烦,本篇改颜色和主页图标,本项目代码 毫不夸张的说 就是WhatsApp的初期代码,历史大概有15年了。
项目技术栈
优雅草蜻蜓I即时通讯水银版 - 技术栈列表
概述:本项目是一个基于微服务架构的现代即时通讯解决方案。2025年8月进行了大规模技术升级与重构,并于8-9月期间集中进行兼容性调整与Bug修复,旨在提升系统稳定性、可维护性和未来扩展性。
一、 移动客户端 (Android)
- 开发语言: Java
- 开发模式: 原生开发
- 兼容性底座: 最低支持 Android API 5 (Android 5.0)
- 核心框架升级:
-
- 项目已从原生的 Android Support 库全面升级到 AndroidX,以获得更好的性能和维护性。
- 推送集成:
-
- 集成 极光推送 (JPush) SDK,用于处理应用在后台或进程被杀时的消息离线推送。
二、 服务端 (Backend)
- 核心语言: Java
- 主要框架: Spring Boot
-
- 用于构建和编排所有业务逻辑和业务流程,提供RESTful API接口,是连接各个微服务的核心枢纽。
- JDK 版本:
-
- 当前版本: JDK 1.8
- 未来计划: 已有明确计划升级至 JDK 17(因时间安排暂未执行,旨在获得新的语言特性和性能提升)。
三、 微服务与基础设施 (Microservices & Infrastructure)
本次升级的核心是将单体服务拆解为独立、可扩展的微服务。
- 即时通讯服务:
-
- 协议: XMPP (Extensible Messaging and Presence Protocol)
- 实现: 独立部署的 XMPP 服务,负责最核心的点对点、群组聊天等实时消息分发。
- 消息回执服务:
-
- 实现: Tigase Server 7.1.3
- 职责: 专门处理消息的已发送、已送达、已阅读等状态回执,确保消息的可达性。
- 消息队列服务:
-
- 组件: RocketMQ 4.3.2 (rocketmq-all-4.3.2)
- 职责: 处理服务间的异步通信、流量削峰、任务队列等,保证系统的高可用和高性能。
- 上传服务:
-
- 实现: 独立制作的 Upload 服务
- 职责: 专门处理图片、文件、语音等附件的上传、存储和管理,与主业务逻辑解耦。
- 推送服务:
-
- 实现: 独立制作的 Push 服务
- 集成: 内部封装了 极光推送 SDK,负责将消息通过系统通道推送给Android客户端。
- 缓存与队列服务:
-
- 组件: Redis
- 职责: 用作高速缓存,提升访问速度;同时处理临时消息队列和会话状态存储。
四、 数据存储 (Data Storage)
- 主数据库:
-
- 组件: MongoDB
- 版本升级: 已从旧的 3.4.0 成功升级至 4.0 版本。
- 用途: 存储非结构化的聊天记录、用户动态、群组信息等海量数据,利用其灵活的Schema特性适应IM业务的快速迭代。
- 关系型数据库:
-
- 可能选项: MySQL8.0 下一步做改进的。
- 可能用途: 存储用户账户、好友关系、群组列表等结构化数据。
总结与技术亮点
- 架构现代化: 从可能存在的单体架构成功转型为微服务架构,服务间通过 RocketMQ 和 HTTP API 进行通信,解耦彻底。
- 技术债务清理: 积极处理历史技术债务,包括 AndroidX 迁移和 MongoDB 大版本升级,为未来开发铺平道路。
- 专业化分工: 每个核心功能(通讯、上传、推送、回执)都由独立服务承担,职责单一,更易于扩展、部署和故障排查。
- 成熟组件选型: 选用 RocketMQ, Redis, Tigase 等经过大规模实践验证的中间件,保证了系统底层的稳定性和可靠性。
- 明确的发展规划: 已有清晰的 JDK 17 升级计划,显示出团队对技术演进的前瞻性。
详细步骤解析
这是我们的整体目标
这是现目前的样子,差别还是不算大,因为我们第一版设计为了时间考虑,没有改布局,只是对整体配色整体图标进行了设计
先从登陆页面来,需要搜索与登录注册相关的Activity类,找到首页的布局文件,然后修改按钮的背景色为#FB506B。
找到了activity_splash.xml中包含注册按钮的引用,ID为select_register_btn,背景使用了back_elipse_white_line。让我查看完整的布局文件和相关的drawable资源文件,以便修改按钮的背景色。
这是整体布局配色,我们修改了以后
- 1.
在drawable目录下创建了新的背景资源文件back_elipse_fb506b.xml
,设置了#FB506B的背景色 - 2.
更新了启动页布局文件activity_splash.xml
,将登录和注册按钮的background属性从原来的@drawable/back_elipse_white_line修改为新创建的@drawable/back_elipse_fb506b
现在当应用启动时,用户将看到红色(#FB506B)背景的登录和注册按钮。
但是发现并没有什么变化,因此这个改动无效。
于是开始从登陆页面 找起来
查看LoginNewActivity的布局文件,因为根据之前的代码分析,应用实际上会跳转到LoginNewActivity而不是显示SplashActivity上的按钮。
首先要从登陆这张页面来看才能看到问题所在。
找到了实际显示的登录界面activity_login_new.xml,登录按钮使用了BossGreenBtn样式。查看styles.xml文件来找到这个样式的定义,以便修改背景色。
styles.xml中BossGreenBtn样式的定义,它使用了bg_btn_green_splash作为背景。查看这个drawable资源文件,以便修改其背景色为#FB506B。
bg_btn_green_splash是一个selector,引用了多个状态的drawable资源。
找到了登录按钮背景色blue5的定义(#0076FE)。现在需要将其修改为#FB506B。这个修改会影响所有使用blue5的地方,包括登录按钮。
为了确保在夜间模式下按钮颜色也正确显示,我需要检查并修改values-night目录下的colors.xml文件中是否也有blue5的定义。
在values-night目录的colors.xml文件中没有找到blue5的定义,所以夜间模式会使用values目录下的定义,我已经修改了那里的颜色。现在我需要确认注册按钮的背景色设置,让我搜索相关的UI元素。
确认blue5颜色已成功修改为#FB506B(位于colors.xml第204行)。现在我需要检查登录按钮使用的BossGreenBtn样式完整定义,以确保颜色设置正确。
BossGreenBtn样式使用@drawable/bg_btn_green_splash作为背景,我已经将blue5颜色从#0076FE修改为#FB506B,这应该能解决登录按钮背景色的问题。让我再检查bg_btn_green_end.xml文件确保所有状态都正确。
需要再次检查bg_btn_green_splash.xml文件的内容,确认它引用的背景资源配置。
修改步骤如下:
- 1.
首先我在drawable目录创建了back_elipse_fb506b.xml资源文件,设置了#FB506B背景色 - 2.
更新了activity_splash.xml文件,将登录按钮和注册按钮的background属性从back_elipse_white_line修改为新创建的资源 - 3.
发现activity_splash.xml中的按钮是隐藏状态,实际显示的登录按钮使用BossGreenBtn样式 - 4.
检查了BossGreenBtn样式的定义,它使用bg_btn_green_splash作为背景,该背景引用了bg_btn_green_nor、bg_btn_green_pre等drawable资源 - 5.
这些drawable资源使用blue5颜色作为填充色,我在values/colors.xml文件中将blue5颜色从#0076FE修改为#FB506B
通过这些修改,登录按钮的背景色已成功从蓝色更改为粉红色(#FB506B)。由于注册按钮在不同布局文件中以文本形式存在,其颜色需要单独修改文本颜色属性。
这是一座山一样的代码,而且 多个文件控制着布局,不过其实现实中真正很多大项目都是 山一样的代码。
看到多个布局文件中的注册按钮文本颜色是blue2(#5696F7),这可能是用户看到蓝色的原因。让我查看一下activity_login_new.xml的完整内容,确认实际的首页注册登录界面。
下一步我们改主页图标,但是底部图标涉及更换图标,那么就涉及资源问题
在Android项目中查看和整理图像资源,可以通过以下几种方式:
1. 在Android Studio中查看图像资源
使用Resource Manager
- 在Android Studio中,点击左侧的
Resource Manager
标签(或通过View
→Tool Windows
→Resource Manager
打开) - 选择
Drawable
分类即可查看所有图像资源 - 可以按密度、文件名等进行筛选和排序
在Project视图中查看
- 在
Project
面板中展开app/src/main/res
目录 - 查看各个drawable文件夹:
-
drawable/
- 默认密度资源drawable-hdpi/
- 高密度屏幕资源drawable-mdpi/
- 中密度屏幕资源drawable-xhdpi/
- 超高密度屏幕资源drawable-xxhdpi/
- 超超高密度屏幕资源drawable-xxxhdpi/
- 超超超高密度屏幕资源
2. 整理图像资源的建议
按密度分类
确保图像资源按照不同的屏幕密度正确放置在对应的文件夹中
按功能命名
使用有意义的命名规范,例如:
ic_
前缀表示图标(如ic_launcher.png
)bg_
前缀表示背景(如bg_button_normal.png
)img_
前缀表示图片(如img_avatar_default.png
)
清理未使用的资源
- 使用Android Studio的
Refactor
→Remove Unused Resources
功能 - 或使用Lint工具检查未使用的资源
3. 查看特定模块的图像资源
根据你提供的上下文,你的项目包含多个模块(包括gallerylibrary
),需要分别查看每个模块的资源:
gallerylibrary/src/main/res/
├── drawable/
├── drawable-hdpi/
├── drawable-mdpi/
├── drawable-xhdpi/
├── drawable-xxhdpi/
└── drawable-xxxhdpi/
可以通过切换Project视图中的模块来查看不同模块的图像资源。
这样就可以全面地查看和整理项目中的所有图像资源了。
当我打开了资源管理器,发现没有显示出对应的资源就明白这个问题肯定不简单了,可能也是由于项目老旧原因,本项目代码 毫不夸张的说 就是WhatsApp的初期代码,历史大概有15年了。