- 博客(342)
- 收藏
- 关注

原创 程序员装机必备软件
这里记录我安装好系统之后必须要安装的一些软件官方地址。JavaSE JDK8:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.htmlAndroid Studio:https://developer.android.google.cn/studioIntelliJ IDEA:https://www.jetbrains.com/idea/Everything:https://www.voidtools.
2021-04-22 11:07:13
942

原创 广州图书馆
写篇博客记录一下广州图书馆吧!今年的某一天第一次去广州图书馆,里面是真的宽广、干净又安静,图书很多,我想要的书几乎都有,可以说,你平时在广州购书中心想要买的书,在图书馆绝大多数都有,所以,为什么要花钱去买呢!而且图书馆里的书很多都是很新的,我以前天真的以为图书馆的书都是很旧的,我错了!广州图书馆里面环境真的很好,坐位超级多的,生怕你没地方做似的,可能是疫情期间,进馆需要预约,所以我看到坐位那么多,还没几个人做,不知道没疫情时没人数限制那时是不是坐位暴满的场面,就恨自己以前为什么不早点去图书馆逛逛,这样就
2021-02-03 15:47:16
1058
4

原创 想学习的内容零散笔记
突然间发现,可以学的东西好多,自己好多东西不会,好落后了,Android已经出了好多好用又新的东西自己都没花时间去学,不是学不会,只是没去学。谷歌还是很做实事的,Android更新非常快,包括android系统和相应的api,文档也是越来越丰富(相比早期的简单文档),可以看出谷歌是一家做实事的公司,是一家好公司,做Android,不会错的,关键看自己的学习能力了。在这个互联网时代,手机、电脑很容易分人的心,经常不记得自己要干什么了,所以这里记录一下自己想学的东西,迷茫的时候就来翻翻这个日志,找点喜欢的东
2020-09-10 17:00:12
651

原创 一看就懂的i++和++i详解
我相信很多朋友可能之前已经百度过i++和++i的相关文章了,也做过不少的练习,觉得自己已经深刻掌握了它们之间的原理了,真的是这样的吗?来试试计算一下我下面提供的几道练习,你就会发现你又不会了!
2020-05-09 22:10:35
53983
155
原创 Android中flavor的使用
本文介绍如何用 Android Product Flavors 快速适配不同设备(如4款执法仪),每款设备可能有不同的:•签名(系统签名/普通签名)•包名(自动添加后缀区分)•版本号(独立设置)•CPU架构(32位/64位)•系统权限(动态配置 sharedUserId)核心优势:✅ 一次配置,自动生成4个APK,无需手动修改✅ 调试/发布 版本均使用正确签名✅ Gradle命令缩写 快速打包(如 gradle aHiR打
2025-08-18 22:06:32
439
原创 Android Studio中创建Git分支
本文介绍了在Android开发中使用Git分支进行实验性修改的方法。首先说明了创建分支的必要性:避免影响主分支代码。详细步骤包括:1)确保代码已提交;2)从master分支创建新分支;3)为新分支命名并检出;4)将本地分支推送到远程服务器;5)分支切换操作注意事项。通过图文结合的方式展示了Android Studio中分支管理的具体操作界面,包括分支创建、推送和切换的完整流程,强调了当前工作分支的识别方法。这些操作能帮助开发者在独立分支上安全地进行代码实验。
2025-08-17 17:24:11
249
原创 tmux常用命令
本文总结了tmux的常用命令,包括会话和窗口管理。会话操作:创建会话(tmux)、重命名(ctrl b $)、进入会话(tmux a)、切换会话(ctrl b s)和退出会话(ctrl b d)。窗口操作:创建(ctrl b c)、重命名(ctrl b ,)、关闭(ctrl b &)、切换窗口(ctrl b num/p/n/l)、排列窗口(ctrl b %或")以及调整大小(ctrl b ctrl+方向键)。还介绍了ctrl d的特殊关闭逻辑和查看窗口列表(ctrl b w)的方法。
2025-08-16 16:09:38
745
原创 Android广播的坑
摘要:某Android11手机存在广播接收异常问题:当应用已运行时,通过Android Studio再次部署运行后,新注册的广播接收器会失效。表现为点击发送按钮后无法收到广播,必须完全退出应用后重新启动才能正常工作。该问题仅出现在特定型号的Android11设备上,其他相同系统版本的设备正常。临时解决方案是确保每次测试前完全关闭应用再重新启动。(98字)
2025-07-30 09:01:19
142
原创 Java中写文件的显示大小实时性
摘要:在Windows使用Kotlin开发视频下载程序时,发现下载过程中资源管理器显示文件大小为0,直到下载完成才显示实际大小。这是由于Windows资源管理器的缓存机制(需手动刷新)和程序保持文件句柄未释放所致。虽然使用了缓冲流,但缓冲大小不会影响文件显示的延迟现象。系统会在文件关闭后正确更新大小,属于正常行为。若需实时查看进度,可通过命令行或编程方式主动获取文件大小。(149字)
2025-07-29 22:21:40
188
原创 QT中启用VIM后粘贴复制快捷键失效
摘要:QT启用FakeVim后,Ctrl+C/V会变成Vim快捷键。若需保持原复制粘贴功能,只需进入编辑>首选项,勾选"Pass control keys"选项即可恢复系统默认快捷键。图示为设置界面截图。
2025-07-26 17:07:33
333
原创 各种版本Android Studio下载地址
当前(2025-07-05)官方提供的版本最旧的只能到2017年的版本了,有时候想安装旧的版本,比如我在学Gradle时,有教程在讲解时使用的Android Studio是较旧的版本,所以我想保持开发环境一样,这时就需要下载到旧的版本,但是官网上已经找不到下载链接了,所以我从网络上搜索到了一些官网下载地址,所以安全性没问题,可以使用迅雷下载,有些可能直接在浏览器上下载不了,但是迅雷上可能有资源就能下载。
2025-07-05 12:01:55
783
原创 Kotlin中优雅的一行行读取文本文件
一行一行的读取文本文件的需求是很常见的,使用Java的方式比较麻烦,而使用Kotlin有非常简单且优雅的方式。
2025-07-04 17:59:19
1007
原创 Typora使用教程(包括图片自动上传)
本教程来源于Typora教程官网,所以这里的Markdown语法在Typora中肯定都是支持的,但是在别的Markdown软件或者博客日志里面就不一定有用了,比如这里的大多数语法也同样适用于CSDN文章,但是有少数语法CSDN文章是不支持的。
2025-06-26 14:48:06
905
原创 android脱糖
`Android 5`、`Adnroid 6`系统原生只支持到`Java 7`,`Android 7`原生仅支持部分`Java 8`特性(比如Lambda表达式),到了`Android 8`则完整支持`Java 8`了。我们写Android项目时,对于兼容性,一般来说指定`minSdk`就可以了,比如`minSdk`设置为21,对应为`Android 5`,也就是说这个项目需要兼容的最低版本是`Android 5`,假设我们把`targetCompatibility`和`jvmTarget`设置为11,那生
2025-06-24 20:59:28
887
1
原创 Android Studio中的各种Java版本区别
Android Studio里面有各种各样的Java版本设置,看的人头花眼乱,分不清各是什么作用的,所以本文就来分别来研究一下这些个Java版本是做什么用的。
2025-06-24 20:25:37
989
原创 Sublime text启用vim
摘要:本文介绍Sublime Text中启用Vintage模式(Vim插件)的配置方法。1)修改首选项设置,移除Vintage插件忽略项;2)通过vintage_start_in_command_mode参数设为默认vim命令模式;3)添加快捷键配置,实现按jk组合键快速退出插入模式。配置包含JSON代码示例和操作截图,确保Vim编辑体验更加高效。全文约150字,涵盖主要配置步骤和参数说明。
2025-06-21 13:40:56
350
原创 so16k对齐
Android 15+要求SO文件16K对齐才能上架Google Play。官方文档显示:使用NDK 28+编译时默认已16K对齐,无需特别配置。文档还提供了验证对齐方法、编译配置以及现有SO文件的修改工具。开发者可通过Android官方指南(链接)获取完整解决方案,无需依赖AI问答工具。
2025-06-19 10:01:52
352
原创 修改Typora快捷键
摘要:本文介绍了如何修改Typora的代码块快捷键。由于默认快捷键Ctrl+Shift+`操作不便,作者将其改为Ctrl+Shift+J以方便记忆和使用。具体步骤是通过高级设置文件conf.user.json添加键位绑定配置,修改后重启Typora即可生效。文章提供了详细的修改位置示意图和最终效果截图。
2025-06-14 17:29:00
253
原创 typora图片左对齐
在Typora中将图片默认居中对齐改为左对齐的方法:打开文件偏好设置中的主题选项,编辑Github主题的CSS文件,添加自定义样式代码p .md-image:only-child{width:auto;text-align:left},保存后重启软件即可实现图片左对齐效果。操作简单,仅需修改CSS文件无需复杂设置。
2025-06-14 16:26:05
340
原创 Android中的DX、D8、R8
Android编译工具演进对比:DX已被D8替代,R8成为终极方案。DX需多步骤处理,效率低;D8整合脱糖,速度提升30%;R8实现五合一功能(脱糖+优化+混淆+压缩+dex生成),dex体积比D8减小10-20%,构建速度比"D8+ProGuard"快2倍。当前项目只需在gradle中启用minifyEnabled即可使用R8全部功能。R8已成为现代Android开发的官方推荐编译方案。
2025-06-13 22:41:59
772
原创 执行gradle的Java版本配置
Gradle运行依赖JDK环境,默认使用JAVA_HOME指定的JDK版本。通过gradlew -v可查看Gradle版本及其内置工具版本。Gradle包含两种JVM进程:Launcher JVM(短暂运行,负责启动)和Daemon JVM(长期运行,执行构建任务)。Android Studio中Gradle使用的JDK版本由IDE设置决定,而非gradle.properties配置。建议在gradle.properties中显式配置org.gradle.java.home以确保构建环境稳定。
2025-06-12 09:39:09
1271
原创 把GPS轨迹显示到百度地图
本文介绍了一个将Android设备采集的WGS84坐标转换为百度地图坐标系并可视化展示的解决方案。通过HTML页面实现文件上传、坐标转换和地图显示功能,主要包含以下内容: 前端页面设计:包含文件上传控件、状态显示区和百度地图容器 核心坐标转换算法:实现WGS84→GCJ02→BD09的三步坐标转换 动态显示逻辑:逐点处理GPS.txt文件,每500ms显示一个转换后的坐标点形成轨迹效果 代码提供了完整的解决方案,只需替换百度地图AK即可使用,适用于轨迹可视化、定位数据展示等场景。转换算法基于公开的坐标偏移参
2025-06-10 09:59:15
1101
原创 Android端口转发
Android设备同时连接Wi-Fi和有线网络时,需要使用端口转发来访问不同网段的网络摄像头。本文介绍了如何使用开源应用FwdPortForwardingApp实现端口转发:在Wi-Fi接口(如wlan0)监听5545端口,将请求转发到摄像头IP(192.168.2.100:554),使电脑可通过192.168.1.100:5545访问摄像头流。注意监听端口需在1024-65535范围内。该方案解决了跨网段设备访问的问题。
2025-06-06 16:31:43
667
原创 android无root抓包(PCAPdroid)
PCAPdroid 是一款注重隐私的开源应用程序,可让您跟踪、分析和阻止设备中其他应用程序建立的连接。它还允许您导出流量的 PCAP 转储、检查 HTTP、解密 TLS 流量等等!PCAPdroid 模拟 VPN 以便在没有 root 的情况下捕获网络流量。它不使用远程 VPN 服务器,而是在设备上本地处理数据。使用Fiddler代理可以给Android抓包,但是它抓的是TCP连接的,PCAPdroid 则没有限制,比如我的App使用UDP连接也可以捕获。
2025-05-29 16:14:41
1385
原创 Apifox环境变量
本文介绍了在API测试工具中临时变量和全局变量的区别与用法。临时变量仅在单个请求内有效,无法跨请求共享,而全局变量可在整个项目范围内使用。文章通过具体示例展示了如何在请求间共享变量:前置操作设置变量、全局变量管理、JSON响应数据解析提取变量值等。还介绍了全局参数自动添加机制,以及如何通过代码动态修改全局变量值。关键区别在于:临时变量是内存临时存储,全局变量会持久化保存;临时变量覆盖范围有限,全局变量可跨请求共享;未预先定义的全局变量可通过代码自动创建。
2025-05-27 17:28:19
1353
原创 Kotlin带接收者的Lambda介绍和应用(封装DialogFragment)
方法的调用封装到了方法里面,这样重复的代码就只写一次,不用每次都写了。这里,对于 “确定” 和 “取消” 按钮也是很常用的,而且不管你是点了确定还是取消,点击之后对话框都会自动取消,所以上面代码中的。从对比上来看,长得差不多,带接收者就是把括号中的参数移到括号前面,并加了一个 “.” ,带。参数大多数情况下都是用不到的,但是每次都要写也很麻烦,而且函数名。这样做是可以的,但是真的很麻烦,能不能像。又是可以省略不写的,基于这个特点,我们不能给带接收者的。这里面有一些代码是每次都一模一样的,所以还可以优化,
2025-05-05 23:31:04
1110
原创 使用TortoiseGit进行文件比较
当你同步时,Git会检查 “我的文件” 与 “基础文件” 的差异,提交时就是把差异提交上去,同时也会检查 "远端文件"中是否有更新的提交,如果有,则会让你先拉取远端文件,拉取后,你的电脑就会有 “基础文件”、“我的文件”、“远端文件”,三种文件同时存在了,Git 会把 “我的文件” 和 “远端文件” 也进行差异比较且会合并差异合成一个文件,如果有冲突还会要你解决冲突,解决了之后才能提交推送到远端。所以,如果我们要比较两个没有版本控制的文本文件,一般选基础文件和我的文件进行比较即可。
2025-04-28 09:29:16
352
原创 Android协程
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) lifecycleScope.launch { launch(Dispatchers.Def
2025-04-14 15:32:57
243
原创 Kotlin协程入门
前言现在还在学习阶段,无法写的详细,先写一些自己需要记的东西。InteliiJ开发环境这里,我们使用免费的IntelliJ IDEA 2021.3.3 Community版本。创建一个项目,设置如下:创建后,项目结果如下:可以看到,自动生成了一个Kotlin文件,可以直接点击main函数左侧的绿色三角形以运行main函数。join()函数fun main() = runBlocking { val job = GlobalScope.launch { delay(
2025-04-14 15:32:08
1175
1
原创 kotlin的takeIf使用
用于判断指定对象是否满足条件,满足就返回该对象自身,不满足返回null。因为可以返回对象自身,所以可以用作链式调用,以简化代码,又因。然后有个需求是判断一个女性是否达到法定结婚年龄,如果达到了的话就打印一个消息到控制台。可能返回空,所以常常和。
2025-04-11 16:08:56
383
原创 Gradle软件下载的镜像
腾讯云镜像:https://mirrors.cloud.tencent.com/gradle/gradle-8.11.1-bin.zip。华为云镜像:https://repo.huaweicloud.com/gradle/gradle-8.11.1-bin.zip。阿里云镜像:https://mirrors.aliyun.com/gradle/gradle-8.11.1-bin.zip。今天(2025/3/28)试了阿里云镜像无法访问,另外两个正常。使用国内镜像源(推荐)。
2025-03-28 23:44:35
2476
原创 阿里云云效 Maven
官方插件(如 org.jetbrains.kotlin.android)社区插件(如 com.github.spotbugs、io.spring.dependency-management)gradle的官方插件通常不会托管到或google()。包含几乎所有 非 google() 系的 Java 库(当然也包含kotlin)。仅包含 Google 官方发布的库。
2025-03-28 03:13:02
973
原创 使用Apifox动态生成请求参数
假如“自定义脚本” 在上面,如果我们在自定义脚本中想读取替换后的变量,则会读取不到,因为自定义脚本运行时,变量替换的脚本还没有运行。比如,我要调试一个登录请求,使用Apifox来进行调试,登录请求需要一个密码,这个密码需要进行AES加密后才能发送出去,我希望在Apifox中我填入明文密码,然后Apifox帮我进行AES加密后再发送出去。如上图,可以看到响应体中的密码就是加密后的密码了,后面再调试时,我们密码随便换,只需要填入明文密码,工具会自动帮我们加密。参数移除,然后添加经过加密后的参数。
2025-02-27 18:30:20
1583
原创 查询网络类型以及请求特定网络和绑定到特定网络以及监听网络变化
绑定指定的网络,确实是可以的,比如我想绑定我的App就用移动网络,即使连了wifi也走移动的网络,不走wifi,经实验确实是OK的,wifi明明连接了,但是还是可以走移动的网络进行通信。这里我们只监听wifi网络的变化,如果蜂窝网络发生变化我们就不知道,如果我只想知道当前默认网络的变化,默认网络即当前正在使用的网络,比如你当前有蜂窝网络,同时也连着WIFI,如果你的应用正在使用WIFI网络来进行网络传输,则WIFI网络为默认网络,不论当前默认是什么网络,想要监听它的变化可以使用。中只包含了wifi网络。
2024-12-26 11:12:36
1337
原创 设置首选网络类型以及调用Android框架层的隐藏API
而有的手机甚至连关闭5G的功能开关都没有,也没有首选网络类型的设置界面,这很不方便,比如有时候测试,我就希望使用4G网络,但是手机上没有设置可以去进行修改,怎么办?这个首选网络类型的设置,一般都会有一个类型最全的,即包含移动/联通/电信,且包含5G/4G/3G/2G的选项,且这个选项一般排在最前面,这样的选项用英文描述为“Global”,有全面的/全球的意思,意思就是你用这个选项,你插什么卡都能用,比如联通/电信/移动,而且不管你是4G、3G还是2G都能用。在新一点的版本手机中,还会有5G的选项。
2024-12-25 08:58:44
1946
原创 Android串口开发中的计算校验码
串口开发中,数据是7个字节的,计算校验码就是把中间的5个字节相加(不要头和尾),得到的校验码用作7个字节中的最后一个字节,所以5个字节相加的和最多只能是1个字节的大小,但是相加的结果很可能大于1个字节,所以如果使用int类型来保存相加结果的话,就需要转换为int,但是不能直接转,直接强制转换类型可能结果会不对,首先需要把结果。,这样就只保留了int中的最后一个字节了,且不存在负数问题了,这样再转换为。更好的做法是在保存结果的时候直接使用。来保存,这样就不需要。
2024-12-18 17:59:23
245
原创 Android获取sim卡频段信息
公司一些Android设备,在交给客户使用时,需要使用sim卡网络,但是有时候网络不好,要给客户证据说明是网络问题,一个办法是网络测速,还有就是获取一下频段信息,根据这个信息可以和中国移动沟通问题来源,比如在某些地方,移动只部署了一两个频段,而有的频段速度快,有的频段速度慢,所以可以通过频段信息判断网络问题。
2024-12-18 10:00:56
1005
sokit-1.3-win32-chs(中文版)
2023-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人