安卓开发从源码看后端技术——搭建环境与断点调试

简介: 今天就让我们开启源码共读的篇章吧,希望这不同的眼界探索可以在这截然不同的领域会有所收获,为自身技术带来启发。

前言

源码阅读其实在工作中也是经常的事,但我毕竟是安卓开发,后端技术我真不是很了解,不过既然掘金提供了这么一个学习的机会,那我自然不会放过,今天就让我们开启源码共读的篇章吧,希望这不同的眼界探索可以在这截然不同的领域会有所收获,为自身技术带来启发。

正篇

本章是根据源码共读活动提供的小册学习任务学习收获而得,内容是有关Netty的,总共七块任务以及一个额外任务,本篇是完成第一个任务。

事先申明,本人从未接触过相关内容,如果在分析过程中有问题,望各位积极指正!


网络异常,图片无法展示
|

导入项目与准备工作

根据文章给出的git克隆命令:

git clone https://github.com/arthur-zhang/netty-study.git

我使用其URL地址(github.com/arthur-zhan… )在GitHub Desktop软件上获取了相应项目库


网络异常,图片无法展示
|


后面发现家中电脑中没有安装IDEA,只有Android Studio,所以还需要安装IDEA,直接官网安装社区版免费的(Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains)就可以。


网络异常,图片无法展示
|


安装好IDEA后我们打开拉到本地的项目:


网络异常,图片无法展示
|


作者很贴心的为我们分好了任务结构以及附带README.md文件方便查看任务目标,我一般选择project files(项目文件)形式的目录,我安装的IDEA默认安装了简体中文插件,有点不适应,但官方推荐就安了,安装好要重启一遍才能显示中文版


网络异常,图片无法展示
|

网络异常,图片无法展示
|


接着我们可以看到一行要求导入netty的建议在你打开MyServer.java文件时,我们确定后等待完成即可


网络异常,图片无法展示
|


全部完成我们就能进入源码阅读任务阶段了

断点调试

第一个任务是进行断点调试,这在工作中也经常使用,一般出现日志缺少或需要知道某一结构的具体运行情况时,我们通过在相应位置断点,就可以查看运行时这个区域的相应情形,甚至可以模拟数据来分析相应情况,这在我之前的文章中也提到,虽然我是使用Android Studio的,但AS也是IDEA的魔改,所以都差不多。

但本任务中是使用断点看调用堆栈,据我了解,调用堆栈可以一句一句溯源该语句运行的逻辑;


网络异常,图片无法展示
|


我们可以在MyServer文件中Ctrl+F查询“bind”(Windows系统中),然后定位到该使用语句,在该语句左侧如上图红框处点击鼠标打断点,红色圆代表该处有断点

运行查看

但netty需要服务端和客户端,这里demo是Netty echo server的,所以可以如下操作:

服务端在netty依赖添加好后运行MyServer文件即可


网络异常,图片无法展示
|


如果依赖添加中途关掉了,下次也可以自己在maven文件处右击鼠标选meavn添加好:


网络异常,图片无法展示
|
网络异常,图片无法展示
|


客户端方面,我们在windows系统上先在控制面版上打开Telnet客户端功能,接着直接Win+R,然后cmd,输入命令

telnet localhost 8888

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|


下面nc方法未成功,且作者电脑运行IDEA中突然抽风一次,自动重启了而且重启商标画面变红,有点后怕,暂时建议读者如果没有试过就不要试试,或者等评论区大佬有正确方法再尝试

客户端也可以用nc(netcat)方式,Windows系统需要先下载(netcat 1.11 for Win32/Win64 (eternallybored.org))


网络异常,图片无法展示
|

网络异常,图片无法展示
|


会触发病毒提醒,需要运行在设备上,然后执行操作,再重新下载,解压文件


网络异常,图片无法展示
|


将nc.exe 复制到C:\Windows\System32的文件夹下

作者nc方式未成功,目前原因未解决

命令类似

nc -l -p 8888

网络异常,图片无法展示
|

调试断点,分析结果

我们在main()方法出点击绿色三角形然后选择调试(debug):


网络异常,图片无法展示
|


调试完成后结果如下:


网络异常,图片无法展示
|


可以把光标对到bind代码处,然后Ctrl+单击鼠标可以跳到源码处,如果没有下载,会有提示:


网络异常,图片无法展示
|


至此我成功发现自己没找到任务要求bind的正确位置,但方法同理,我们看看要求在哪个地方断点:


网络异常,图片无法展示
|


原来是ServerSocketChannelImpl类,我们全局搜索一下,Ctrl+Shift+R,再选择最后一个范围,可以查看所有含该关键词的代码:


网络异常,图片无法展示
|


在这个类的第8个bind关键词搜索到我们任务需要的地方,再打断点 这次再调试,成功,我们找到了任务所需要的调试任务栈:


网络异常,图片无法展示
|

backlog参数分析

接下来我们看看打印的backlog参数,


网络异常,图片无法展示
|


可以看到默认为0 然后我们在源码中可以定位到unixBind和netBind方法


网络异常,图片无法展示
|

网络异常,图片无法展示
|


发现该参数小于1时会在Net.listen(...,...)方法中第二个参数转为值50。 到这里看字面意思是网络监听文件描述器,有点懵,去查了一下网上的博客,有如下解释:

backlog影响的accept队列大小

客户端把数据放到accept队列,JVM再从accept队列取。

如果accept队列太小,JVM取数据不够快,那么accept队列就会溢出 不知道靠不靠谱,又看了一下listen方法是native方法:


网络异常,图片无法展示
|


而且四处使用都一样的逻辑:


网络异常,图片无法展示
|


上述的解释有点靠谱,暂时分析到此处。

总结

这次因为包含安装和环境搭建过程,所以总用时较长,阅读源码千万不能钻牛角尖,我们可以在不清楚的地方多查查搜索引擎,看看大神博客,结合起来,才能收获更多,断点的方式也能更好的回溯我们的方法调用过程,在开发维护的时候还是很方便的,源码阅读第一次使用,在文中没有展现出来,我们其实可以从栈底部到顶部依次去看到如何跳到bind方法的:


网络异常,图片无法展示
|
如上图,我们从main方法开始向上一行行点击就能找到运行的跳转逻辑,最终到达断点处bind方法。

除此以外,肯定也有很多实用其他方法,等待我们去发现,也希望掘友们能够提出自己的使用方法,集思广益,才能更利于技术发展!

相关文章
|
开发工具 Android开发 iOS开发
如何在Android Studio中配置Flutter环境?
如何在Android Studio中配置Flutter环境?
3336 160
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1439 1
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
868 70
|
小程序 安全 关系型数据库
专业打造一款圈子源码软件系统 / 后端 PHP 搭建部署一样实现利益化
本教程详解基于PHP后端与Uni-app的小程序开发全流程,涵盖技术选型、环境搭建、源码导入、接口对接及功能实现。采用Laravel/Symfony框架,结合MySQL/PostgreSQL数据库,使用WebSocket实现实时通信,并集成IM SDK实现音视频聊天。前端使用Uni-app开发,支持跨平台运行。教程包含完整部署流程与安全优化方案,助力快速搭建高性能、安全稳定的小程序系统。
807 5
|
人工智能 Java API
后端开发必看:零代码实现存量服务改造成MCP服务
本文介绍如何通过 **Nacos** 和 **Higress** 实现存量 Spring Boot 服务的零代码改造,使其支持 MCP 协议,供 AI Agent 调用。全程无需修改业务代码,仅通过配置完成服务注册、协议转换与工具映射,显著降低改造成本,提升服务的可集成性与智能化能力。
3668 1
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
925 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
前端开发 Java 数据库连接
后端开发中的错误处理实践:原则与实战
在后端开发中,错误处理是保障系统稳定性的关键。本文介绍了错误分类、响应设计、统一处理机制及日志追踪等实践方法,帮助开发者提升系统的可维护性与排障效率,做到防患于未然。
|
前端开发 JavaScript 关系型数据库
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
1086 5
2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
844 11
|
人工智能 小程序 NoSQL
【一步步开发AI运动小程序】二十一、如何将AI运动项目配置持久化到后端?
本文介绍基于云智「Ai运动识别引擎」的运动配置持久化方案,旨在优化小程序或Uni APP中AI运动识别能力。通过将运动检测参数(如`Key`、`Name`、`TickMode`、`rules`或`samples`)持久化到后端,可避免因频繁调整运动参数而重新发布应用,提升用户体验。持久化数据结构支持规则和姿态样本存储,适用于关系数据库、文件或文档数据库(如MongoDB)。此外,云智还提供运动自动适配工具及「AI乐运动」产品,助力快速实现AI体育、全民健身等场景。

热门文章

最新文章