自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android菜鸟的专栏

我是一个Android菜鸟,好希望有人能写一些菜鸟能轻松看得懂的教程给我学习学习!我渴望学习!

  • 博客(359)
  • 收藏
  • 关注

原创 程序员装机必备软件

这里记录我安装好系统之后必须要安装的一些软件官方地址。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 1350

原创 广州图书馆

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

2021-02-03 15:47:16 1225 4

原创 想学习的内容零散笔记

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

2020-09-10 17:00:12 815

原创 一看就懂的i++和++i详解

我相信很多朋友可能之前已经百度过i++和++i的相关文章了,也做过不少的练习,觉得自己已经深刻掌握了它们之间的原理了,真的是这样的吗?来试试计算一下我下面提供的几道练习,你就会发现你又不会了!

2020-05-09 22:10:35 55069 156

原创 kotlin中好用的集合扩展函数

kotlin常用集合扩展函数使用示例。

2026-01-27 15:20:43 350

原创 kotlin魔法runCatching

摘要:Kotlin的runCatching提供了一种简洁的方式来处理可能抛出异常的代码块,它返回一个Result对象。相比传统的try/catch,runCatching可以通过链式调用更优雅地处理异常情况,如使用getOrNull()在异常时返回null,或getOrDefault()返回默认值。Result类类似于Java的Optional,提供了onSuccess和onFailure等方法进行更灵活的操作。这种方法简化了异常处理代码,使开发者可以专注于业务逻辑。

2026-01-27 10:26:16 13

原创 Gson的实用技巧

开发中常用的Gson使用技巧合集。

2026-01-15 16:58:26 561

原创 kotlin by lazy 原理

Kotlin中的by lazy语法糖实现了属性的懒加载功能,其原理是通过封装初始化逻辑到Lazy类中。开发者可以手动实现类似功能(如示例中的SimpleLazy类),在首次访问属性时才执行初始化。标准库的lazy委托进一步简化了代码,只需一行声明即可实现懒加载,底层原理与手动实现类似,都是通过存储中间变量和延迟初始化来完成的。理解这一机制有助于更好地使用Kotlin的懒加载特性。

2025-12-22 11:05:15 246

转载 音视频播放在线资源示例地址(方便前端开发测试)包含MP4、FLV、HLS、m3u8、DASH h265 h266 RTC等格式

前端开发过程中,时常需要测试各种格式的视频播放,比如 MP4、FLV、HLS、DASH 甚至 音频,但找合适的测试资源往往很麻烦,为了方便开发,这里整理了一些稳定可用的视频播放示例地址,直接复制就能用!🎬 音视频播放在线资源示例地址(方便前端开发测试)包含MP4、FLV、HLS、m3u8、DASH h265 h266 RTC等格式。HLS 直播 (m3u8)HLS 直播 (h265)HLS 直播 (h266)📌 常见视频格式测试地址。

2025-12-01 14:52:27 1962

原创 编译最新版本FFmpeg为so

这篇文章主要介绍了在Android平台上编译支持文字水印功能的FFmpeg的过程。内容包括: 需求分析:需要在Android设备上采集摄像头YUV数据,通过FFmpeg添加水印并编码为H264格式 依赖关系:FFmpeg的drawtext功能需要FreeType和HarfBuzz支持,分别负责字体渲染和文字排版 软件下载: 下载Linux版NDK r27d 下载FreeType 2.14.1 下载FFmpeg 8.0 环境配置:设置编译路径、安装路径、交叉编译工具链等 文章提供了详细的下载链接和配置方法,为

2025-11-20 08:38:52 1024

原创 OkHttp连接复用

当使用`OkHttp`时,它会先建立TCP连接,然后再发送请求,当请求结束后,TCP连接并不是立马关闭的,而是缓存起来,直接空闲了一段时间后才会关闭,所以当你连续多次请求时,如果请求的服务器和协议(HTTP 1.1/2.0)相同,则它会复用之前的建立的连接,以加快请求速度。

2025-10-24 11:26:01 825

原创 App Startup

摘要:App Startup库用于解决Android库自动初始化问题。传统方式需要用户继承库的Application类进行初始化,但存在多库继承冲突问题。App Startup通过Initializer接口实现初始化逻辑,在清单文件中声明即可自动执行。支持初始化顺序控制、依赖管理,并允许禁用默认初始化或自定义初始化逻辑。相比Application方式更灵活,解决了多库初始化冲突问题,是Android官方推荐的库初始化方案。 (150字)

2025-10-21 11:39:19 671

原创 CMake环境配置

本文介绍了如何在Windows系统下独立使用CMake配合MinGW-w64进行项目构建。首先从CMake官网下载压缩版本并配置环境变量,验证安装后通过Pre-built Toolchains获取MinGW-w64工具链。重点讲解了工具链的选择标准,包括平台兼容性、运行库类型、位宽等关键参数,推荐了WinLibs.com等即用型版本。最后详细说明了如何配置CMake默认使用MinGW-w64编译器,并通过创建CMakeLists.txt文件验证配置成功。整个过程无需依赖VS等大型IDE,适合希望轻量化构建环

2025-10-20 10:58:13 1044

原创 发布aar到Maven Central

本文介绍了将Android库发布到Maven Central的完整流程。作者首先对比了发布到公司私服和云服务器的局限性,指出Maven Central的免费和全球可用优势。文章详细说明了Gradle配置步骤,包括使用maven-publish插件、设置发布参数和仓库认证信息。重点介绍了注册Maven Central账号和验证域名所有权的关键步骤,分享了使用阿里云DNS配置TXT记录的经验,并提供了验证DNS解析是否生效的具体方法。最后推荐了vanniktech/gradle-maven-publish-pl

2025-10-16 11:15:38 941

原创 超好用的Android日志

这是一个使用 [tony19/logback-android](https://github.com/tony19/logback-android) 为 [JakeWharton/timber](https://github.com/JakeWharton/timber) 实现的Tree,结合了`Timber`可以自动使用当前类作为`tag`以及`logback`记录日志到文件的强大功能的各自优点,用于在`Android`中可以方便的将日志写到控制台以及文件中。

2025-10-15 17:34:26 887

原创 Gradle编译器选项配置

Kotlin编译器选项可通过Gradle DSL在三个层级配置:扩展层级(全局默认)、目标层级(特定目标默认)和编译单元层级(任务级)。较高级别设置作为低级别默认值,低级别可覆盖高级别配置。Kotlin 2.2.0后推荐使用新的compilerOptions替代已废弃的kotlinOptions,Android项目也需改用新方式配置如jvmTarget等选项。

2025-10-14 14:42:02 252

原创 依赖仓库搭建

本文介绍了在Ubuntu系统中安装Nexus Repository OSS的详细步骤。主要内容包括:1)安装VMWare虚拟机和Ubuntu系统;2)下载Nexus Repository OSS免费版本,提供Windows和Unix版本下载链接;3)详细安装过程,包括解压文件、配置环境变量、安装JDK11(提示JDK17可能不兼容);4)启动Nexus服务时遇到的常见问题及解决方法。文章还提供了相关软件的百度云备份链接,方便读者下载使用。

2025-10-12 19:45:30 761

原创 监听app安装更新与卸载以及打印广播的extras

本文介绍了如何通过广播监听Android应用的安装、更新和卸载事件。核心内容包括:1) 使用扩展函数Intent.getKeysValues()打印广播额外信息;2) 创建InstallResultReceiver广播接收器处理不同操作类型;3) 动态注册广播时设置RECEIVER_NOT_EXPORTED标志的安全做法。文章特别指出应用更新时会先后触发REMOVED、ADDED和REPLACED三个广播,并提供了实际运行日志示例展示广播携带的额外参数信息。

2025-09-28 16:13:02 359

原创 Android获取本机IP地址

文章摘要:探讨了两种获取设备IP地址的方法。第一种通过Socket连接获取,优点是直接但存在网络异常时响应慢的问题,可通过设置超时或使用固定IP优化。第二种通过遍历网络接口,快速获取所有可用IP地址,但需进一步过滤有效IP(如eth0接口)。测试显示第二种方法仅需37ms,效率更高,但需注意线程安全。建议根据实际场景选择合适方法,关注网络状态和接口过滤逻辑。

2025-09-11 17:18:42 1559 1

原创 Java观察者模式

本文介绍了观察者模式的实现方式。首先通过大人照看小孩的类比说明观察者(Observer)和被观察者(Observable)的关系,然后详细讲解了Java提供的Observer接口和Observable类的使用方法,包括update方法的实现和消息通知机制。文中提供了Kotlin代码示例展示消息列表更新时通知UI界面的实现过程,并演示了如何传递操作类型参数。最后指出Java 9开始标记这些类为过时,推荐使用PropertyChangeSupport等替代方案,并给出了相应的实现示例代码。

2025-09-05 16:42:32 338

原创 Java线程池使用入门

Java线程池核心实现类ThreadPoolExecutor摘要 ThreadPoolExecutor是Java线程池的核心实现类,继承自AbstractExecutorService,实现了ExecutorService接口。其构造函数包含7个关键参数: corePoolSize - 核心线程数 maximumPoolSize - 最大线程数 keepAliveTime - 非核心线程空闲超时时间 TimeUnit - 时间单位 BlockingQueue - 任务队列 ThreadFactory - 线

2025-08-31 18:54:25 1080

原创 Android中flavor的使用

本文介绍如何用 ​Android Product Flavors​ 快速适配不同设备(如4款执法仪),每款设备可能有不同的:•​签名​(系统签名/普通签名)•​包名​(自动添加后缀区分)•​版本号​(独立设置)•​CPU架构​(32位/64位)•​系统权限​(动态配置 sharedUserId)​核心优势:​​✅ ​一次配置,自动生成4个APK,无需手动修改✅ ​调试/发布​ 版本均使用正确签名✅ ​Gradle命令缩写​ 快速打包(如 gradle aHiR打

2025-08-18 22:06:32 1248

原创 Android Studio中创建Git分支

本文介绍了在Android开发中使用Git分支进行实验性修改的方法。首先说明了创建分支的必要性:避免影响主分支代码。详细步骤包括:1)确保代码已提交;2)从master分支创建新分支;3)为新分支命名并检出;4)将本地分支推送到远程服务器;5)分支切换操作注意事项。通过图文结合的方式展示了Android Studio中分支管理的具体操作界面,包括分支创建、推送和切换的完整流程,强调了当前工作分支的识别方法。这些操作能帮助开发者在独立分支上安全地进行代码实验。

2025-08-17 17:24:11 678

原创 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 1081

原创 Android广播的坑

摘要:某Android11手机存在广播接收异常问题:当应用已运行时,通过Android Studio再次部署运行后,新注册的广播接收器会失效。表现为点击发送按钮后无法收到广播,必须完全退出应用后重新启动才能正常工作。该问题仅出现在特定型号的Android11设备上,其他相同系统版本的设备正常。临时解决方案是确保每次测试前完全关闭应用再重新启动。(98字)

2025-07-30 09:01:19 221

原创 Java中写文件的显示大小实时性

摘要:在Windows使用Kotlin开发视频下载程序时,发现下载过程中资源管理器显示文件大小为0,直到下载完成才显示实际大小。这是由于Windows资源管理器的缓存机制(需手动刷新)和程序保持文件句柄未释放所致。虽然使用了缓冲流,但缓冲大小不会影响文件显示的延迟现象。系统会在文件关闭后正确更新大小,属于正常行为。若需实时查看进度,可通过命令行或编程方式主动获取文件大小。(149字)

2025-07-29 22:21:40 1850

原创 QT中启用VIM后粘贴复制快捷键失效

摘要:QT启用FakeVim后,Ctrl+C/V会变成Vim快捷键。若需保持原复制粘贴功能,只需进入编辑>首选项,勾选"Pass control keys"选项即可恢复系统默认快捷键。图示为设置界面截图。

2025-07-26 17:07:33 2347

原创 各种版本Android Studio下载地址

当前(2025-07-05)官方提供的版本最旧的只能到2017年的版本了,有时候想安装旧的版本,比如我在学Gradle时,有教程在讲解时使用的Android Studio是较旧的版本,所以我想保持开发环境一样,这时就需要下载到旧的版本,但是官网上已经找不到下载链接了,所以我从网络上搜索到了一些官网下载地址,所以安全性没问题,可以使用迅雷下载,有些可能直接在浏览器上下载不了,但是迅雷上可能有资源就能下载。

2025-07-05 12:01:55 1745

原创 Kotlin中优雅的一行行读取文本文件

一行一行的读取文本文件的需求是很常见的,使用Java的方式比较麻烦,而使用Kotlin有非常简单且优雅的方式。

2025-07-04 17:59:19 1198

原创 Typora使用教程(包括图片自动上传)

本教程来源于Typora教程官网,所以这里的Markdown语法在Typora中肯定都是支持的,但是在别的Markdown软件或者博客日志里面就不一定有用了,比如这里的大多数语法也同样适用于CSDN文章,但是有少数语法CSDN文章是不支持的。

2025-06-26 14:48:06 1310

原创 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 1658 1

原创 Android Studio中的各种Java版本区别

Android Studio里面有各种各样的Java版本设置,看的人头花眼乱,分不清各是什么作用的,所以本文就来分别来研究一下这些个Java版本是做什么用的。

2025-06-24 20:25:37 1771

原创 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 535

原创 so16k对齐

Android 15+要求SO文件16K对齐才能上架Google Play。官方文档显示:使用NDK 28+编译时默认已16K对齐,无需特别配置。文档还提供了验证对齐方法、编译配置以及现有SO文件的修改工具。开发者可通过Android官方指南(链接)获取完整解决方案,无需依赖AI问答工具。

2025-06-19 10:01:52 2042

原创 修改Typora快捷键

摘要:本文介绍了如何修改Typora的代码块快捷键。由于默认快捷键Ctrl+Shift+`操作不便,作者将其改为Ctrl+Shift+J以方便记忆和使用。具体步骤是通过高级设置文件conf.user.json添加键位绑定配置,修改后重启Typora即可生效。文章提供了详细的修改位置示意图和最终效果截图。

2025-06-14 17:29:00 424

原创 typora图片左对齐

在Typora中将图片默认居中对齐改为左对齐的方法:打开文件偏好设置中的主题选项,编辑Github主题的CSS文件,添加自定义样式代码p .md-image:only-child{width:auto;text-align:left},保存后重启软件即可实现图片左对齐效果。操作简单,仅需修改CSS文件无需复杂设置。

2025-06-14 16:26:05 528

原创 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 1084

原创 执行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 2260

原创 把GPS轨迹显示到百度地图

本文介绍了一个将Android设备采集的WGS84坐标转换为百度地图坐标系并可视化展示的解决方案。通过HTML页面实现文件上传、坐标转换和地图显示功能,主要包含以下内容: 前端页面设计:包含文件上传控件、状态显示区和百度地图容器 核心坐标转换算法:实现WGS84→GCJ02→BD09的三步坐标转换 动态显示逻辑:逐点处理GPS.txt文件,每500ms显示一个转换后的坐标点形成轨迹效果 代码提供了完整的解决方案,只需替换百度地图AK即可使用,适用于轨迹可视化、定位数据展示等场景。转换算法基于公开的坐标偏移参

2025-06-10 09:59:15 1254

原创 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 1183

sokit-1.3-win32-chs(中文版)

sokit是一个开源项目,是一个TCP / UDP 测试工具,用来接收,发送,转发TCP或UDP数据包。 项目地址: http://code.google.com/p/sokit/、https://github.com/sinpolib/sokit。

2023-02-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除