经验知识分享
文章平均质量分 71
android_cai_niao
学习永无止境!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android发广播的坑
摘要:在Android 11设备上测试广播接收时发现异常现象:直接通过Android Studio重新运行应用会导致广播接收失效,而手动杀死进程后重启则正常。问题可能与广播未正确解除注册有关,在onDestroy()中添加unregisterReceiver()可部分解决。不同品牌手机表现不一致,某些强制停止操作会破坏广播接收功能。建议开发时遇到广播接收异常时手动杀死应用进程再测试,这比卸载重装更高效。原创 2026-04-12 14:22:27 · 234 阅读 · 0 评论 -
编程中的Model、Domain、Entity等的含义
文章摘要: ViewModel中的"Model"并非单纯指数据模型,而是代表一种抽象表示。在软件架构中,Model层包含业务数据、规则和逻辑,而ViewModel特指为View准备的UI状态模型。它不同于业务Model,专门处理UI相关数据如加载状态、错误信息等。Android采用ViewModel而非Controller/Presenter,是因为它不直接操作UI,仅提供观察数据,且能自动处理配置变化。ViewModel本质上是View的数据容器和状态管理器,其命名准确反映了"原创 2026-03-07 16:26:18 · 492 阅读 · 0 评论 -
Github数据分析
GitStar Ranking 是一个对 GitHub 用户、组织和仓库按 Star 数量进行排序的网站,提供各类排行榜单,方便开发者发现热门项目和优质开发者。原创 2026-02-28 09:50:58 · 148 阅读 · 0 评论 -
编译最新版本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 · 1249 阅读 · 0 评论 -
发布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 · 1052 阅读 · 0 评论 -
依赖仓库搭建
本文介绍了在Ubuntu系统中安装Nexus Repository OSS的详细步骤。主要内容包括:1)安装VMWare虚拟机和Ubuntu系统;2)下载Nexus Repository OSS免费版本,提供Windows和Unix版本下载链接;3)详细安装过程,包括解压文件、配置环境变量、安装JDK11(提示JDK17可能不兼容);4)启动Nexus服务时遇到的常见问题及解决方法。文章还提供了相关软件的百度云备份链接,方便读者下载使用。原创 2025-10-12 19:45:30 · 897 阅读 · 0 评论 -
监听app安装更新与卸载以及打印广播的extras
本文介绍了如何通过广播监听Android应用的安装、更新和卸载事件。核心内容包括:1) 使用扩展函数Intent.getKeysValues()打印广播额外信息;2) 创建InstallResultReceiver广播接收器处理不同操作类型;3) 动态注册广播时设置RECEIVER_NOT_EXPORTED标志的安全做法。文章特别指出应用更新时会先后触发REMOVED、ADDED和REPLACED三个广播,并提供了实际运行日志示例展示广播携带的额外参数信息。原创 2025-09-28 16:13:02 · 423 阅读 · 0 评论 -
Android获取本机IP地址
文章摘要:探讨了两种获取设备IP地址的方法。第一种通过Socket连接获取,优点是直接但存在网络异常时响应慢的问题,可通过设置超时或使用固定IP优化。第二种通过遍历网络接口,快速获取所有可用IP地址,但需进一步过滤有效IP(如eth0接口)。测试显示第二种方法仅需37ms,效率更高,但需注意线程安全。建议根据实际场景选择合适方法,关注网络状态和接口过滤逻辑。原创 2025-09-11 17:18:42 · 1812 阅读 · 0 评论 -
执行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 · 2700 阅读 · 0 评论 -
把GPS轨迹显示到百度地图
本文介绍了一个将Android设备采集的WGS84坐标转换为百度地图坐标系并可视化展示的解决方案。通过HTML页面实现文件上传、坐标转换和地图显示功能,主要包含以下内容: 前端页面设计:包含文件上传控件、状态显示区和百度地图容器 核心坐标转换算法:实现WGS84→GCJ02→BD09的三步坐标转换 动态显示逻辑:逐点处理GPS.txt文件,每500ms显示一个转换后的坐标点形成轨迹效果 代码提供了完整的解决方案,只需替换百度地图AK即可使用,适用于轨迹可视化、定位数据展示等场景。转换算法基于公开的坐标偏移参原创 2025-06-10 09:59:15 · 1339 阅读 · 0 评论 -
使用Apifox动态生成请求参数
假如“自定义脚本” 在上面,如果我们在自定义脚本中想读取替换后的变量,则会读取不到,因为自定义脚本运行时,变量替换的脚本还没有运行。比如,我要调试一个登录请求,使用Apifox来进行调试,登录请求需要一个密码,这个密码需要进行AES加密后才能发送出去,我希望在Apifox中我填入明文密码,然后Apifox帮我进行AES加密后再发送出去。如上图,可以看到响应体中的密码就是加密后的密码了,后面再调试时,我们密码随便换,只需要填入明文密码,工具会自动帮我们加密。参数移除,然后添加经过加密后的参数。原创 2025-02-27 18:30:20 · 2303 阅读 · 0 评论 -
Manning技术出版公司
有些国外翻译图书中提供的源码下载连接可能会失效,这时就可以尝试在这个网站中搜索这本书,如果有的话就会提供有源码下载,非常方便。想学某些技术也可以在这里搜索,虽然这些书都是英文的,但是你可以知道有这样一本书。Manning 是一家美国的技术出版公司,专门出版与计算机科学、信息技术和编程相关的图书和教育资料。该公司成立于 1990 年代初期,是技术图书领域的知名品牌之一。Manning 公司的中文翻译名字可以是 “曼宁”。原创 2024-03-14 09:06:48 · 1894 阅读 · 0 评论 -
用logcat命令来查看日志
其它的等有时间再来完善,现在好忙!原创 2023-12-21 17:58:16 · 967 阅读 · 0 评论 -
获取Android签名文件的MD5和SHA1指纹
如上图,我们有两个变体,一个是debug版本,一个是release版本,两个变体都用了相同的签名文件,正常情况下debug版本要用debug的签名,release版本要用release的签名,应该分开的,但是因为我的应用需要使用系统签名,所以就算是debug版本也需要系统签名,不能使用Android Studio自带的那个默认的debug签名,否则应用中需要系统签名的Api就调用不了,一调用就会崩掉,所以可以配置成都用同一个签名配置即可。原创 2023-10-24 16:49:44 · 807 阅读 · 0 评论 -
优秀github项目
记录一些知名的github项目,方便学习。原创 2023-10-12 10:04:19 · 318 阅读 · 0 评论 -
IntelliJ中文乱码问题
运行时控制台输出的中文为乱码,解决方法:帮助 > 编辑自定义虚拟机选项…原创 2023-08-11 15:01:47 · 485 阅读 · 0 评论 -
版本设计说明
比如,一个app的版本名称应该怎么起,一个库的版本名称应该怎么起等等,可以参考这篇文章。原创 2023-07-12 17:03:06 · 218 阅读 · 0 评论 -
没有BuildConfig
刚刚发现,新创建的一个Android项目,成功运行到手机上了,然后在代码中想使用一下这个类,发现没有,按以前的经验,项目刚创建时是不存在的,但是一但成功运行到手机上后就肯定是已经自动生成了的,但是这次是真没有这个类,如果在代码中不理会报错直接使用,运行将会失败,会提示找不到这个类。几经周折,发现是在(简称AGP 8.0)版本的时候发生了改变,运行AGP 8.0需要JDK 17,这里我们顺便把AGP 8.0的其他功能也一起记录一下,这里只记录了其中一部分主要功能,完整的还请查看官网。原创 2023-07-04 10:09:26 · 2635 阅读 · 0 评论 -
android复制与粘贴
这时可以看到两个位置都显示出复制的内容了,且都是明文显示。在我的小米11 pro (Android 13)上运行时,无论输入法有无显示,点 “copy” 按钮时均无复制提示,相同的是,如果输入法显示时在输入法上也会显示出复制的内容,且无论是否设置为密文都是明文显示的。按钮会复制第一个输入框中的文本,点击。界面中有两个输入框,点击。原创 2023-06-29 09:00:11 · 1857 阅读 · 0 评论 -
Android模拟器无法启动
在Android 13版本上,关于“复制”有了新的变化,但是我在我的小米手机(也是Android 13版本的)上测试没有看到对应的变化,所以想运行一个Android 13的模拟器来测试看看,结果死活运行不起来,一直卡在开机画面: “Pixel is starting…我安装发现安装不上,卸载也说卸载失败,我以为是bios里面的那个虚拟的什么开关没打开,但是检查bios已经是打开了的。如上图,那个进度条也是不动的了,就一直卡住,等多久都没用,如果此时我调整模拟器窗口大小的话,则模拟器会变黑屏。原创 2023-06-28 17:21:04 · 2278 阅读 · 0 评论 -
Sending non-protected broadcast
这样就看不见那该死的红色异常了。目录下,而且我也无法修改系统源码。看似就没法解决这个报红色异常的问题了。但是也没有解决我的问题,我这个应用为了升级方便,没有把app往到。其实简单点,不要那么完美了,眼不见为净,在日志过滤器中过滤即可(可以看到,把不需要的过滤掉,系统应用(清单文件添加了。原创 2023-05-30 17:08:21 · 2116 阅读 · 0 评论 -
NIO之ByteBuffer
前言ByteBuffer,顾名思义,它表示字节缓冲区。一般我们在代码中使用字节的时候一般用字节数组,即byte[],但是使byte[]的方式效率不高,而使用ByteBuffer的方式来操作数组效率是比较高的,具体描述可以查看jdk文档声明,可以查看ByteBuffer类,以及它的父类Buffer的文档声明,可以详细的了解它们的功能,它们是nio包下面的,nio就是native io,所以效率是比较高的。ByteBuffer除了效率高之外,也提供了一些比较好用的方法,比如writeInt、getInt、pu原创 2023-04-28 11:38:34 · 1471 阅读 · 0 评论 -
大意失荊州啊-java基础之多态 & 代理
当时我没太在意这个异常,就是很奇怪为什么我增加一个方法就不行,不都是同一个类中的方法吗?当时我就觉得是不是见鬼了,明明一个类上的两个方法,为什么打印的对象一个是猫一个是狗?如上图,有些函数是继承自父类的,有些则覆盖父类的,可以看到调用的。实际上是一个代理类,它没有实际的功能,实际的功能都在。如上结果,出了异常,理想的结果是输出一个。很简单,就是输出一个字符串,于是我往。类上,所以解决这个问题就很简单了,在。所以总结起来就很简单了,如上图,可以看到调用的。原创 2023-03-14 17:20:22 · 301 阅读 · 0 评论 -
UDP端口转发
这种端口转发的机制比较简单,如果有别的端口或不同的协议则又要进行对应的设置,还有一个更简单的办法,买一个 “360随身wifi” ,它可以把电脑的网络通过一个wifi热点分享出去,这样手机连接这个热点来上网,然后电脑上使用Wireshark对 “360随身wifi” 分享的那个网络接口进行抓包即可,这样的话手机上所有的网络请求,不管是什么端口、什么协议统统都可以抓。的代理,在一款Android7.1的手机Wifi设置上设置代理,在设置界面中有这句话:“浏览器会使用HTTP代理,但其他应用可能不会使用。原创 2023-02-21 16:34:41 · 5935 阅读 · 0 评论 -
Windows官方镜像下载地址
Windows11可以直接选择下载镜像,而Windows10需要先下载下载工具,再用下载工具下载镜像。原创 2023-02-14 11:00:30 · 677 阅读 · 0 评论 -
Android Studio 中文插件
是由修改而来的,所以的中文插件也适用于,如果装上中文插件有问题,则可卸载中文插件,据我个人经验,用了这么多个版本的中文插件了,还没出过问题。的版本更新时,中文插件就会失效,需要到官网下载对应版本的中文插件。比如,我们查看的版本如下:可以看到版本为,这个版本与的版本是对应的,一般来说的最新版本会是的旧版本,因为是先出的,然后公司或者公司才为开发相应的版本,这个开发可是要花好多时间的,所以的最新版本无法与的最新版本保持一致。插件官网:https://plugins.jetbrains.com/,打开插件官网,原创 2022-12-05 17:10:40 · 9918 阅读 · 3 评论 -
查询运行在顶部的app包名及类名
所以我们在过虑信息时不能以自己程序的进程进行过滤,使用。,只能显示公司的app和一些必要的系统自带app,自定义。中打印出当前正在显示的app的包名以及类名,注,这是由。说明了当前正在显示的应用,当前显示的应用包名为。注:这里的类名必须要使用完整路径的类名。比如公司要我做一个自定义。,这是一个相对路径的类名,完整路径为。,这个界面启动的时间为:253ms。还会显示其它信息,还可以使用。有了这些信息,我们就可以使用。原创 2022-12-02 10:02:18 · 2796 阅读 · 0 评论 -
Android Studio代码检查Bug
IDE中识别Kotlin语言写的父类子类时,无法识别,有Bug。原创 2022-10-18 17:04:44 · 1136 阅读 · 0 评论 -
一个静态变量的空指针异常
一个静态变量的空指针异常问题。原创 2022-10-17 18:01:22 · 922 阅读 · 0 评论 -
使用mklink来节省C盘空间
比如在C盘用户目录下的`.gradle`目录,所有的`gradle`都会下载到这个目录中,当下载的版本多了以后就会非常的占空间,像我的有9个多G。解决方案是我们可以把`.gradle`目录映射到别的盘去,比如我在D盘创建一个`001_mklink`目录,这个目录名专门存放映射的目录,名称可以随意起的。然后我们关闭掉所有使用gradle的程序,甚至可以注销电脑或者重启电脑,以确保没有程序占用`.gradle`目录,然后我们就可以把`.gradle`目录剪切到`D:\001_mklink`目录,打开CMD,然后原创 2022-09-30 17:36:26 · 2576 阅读 · 0 评论 -
CLion输出中文乱码解决方案
【代码】CLion输出中文乱码解决方案。原创 2022-09-29 14:20:34 · 1194 阅读 · 0 评论 -
MediaCodec同步异步使用
为了简单,这里使用无预览的Camera视频采集,然后通过MediaCodec代码也很简单,就两个主要函数,,,需要注意的是,在打开摄像头之前,需要先申请权限。${++}${.codecInfo.name}${::class.java.simpleName}${::class.java.simpleName}${DateFormat.format(,System.())}生成的h264文件是裸流,可以使用VLC播放器进行播放。...原创 2022-08-17 11:43:56 · 1476 阅读 · 5 评论 -
ExceptionInInitializerError
Exception in thread "main" java.lang.ExceptionInInitializerError at com.company.Main.main(Main.java:11)Caused by: java.lang.NullPointerException at com.company.Foo.(Main.java:27) at com.company.Foo.(Main.java:19) ... 1 more原创 2022-08-08 12:01:41 · 825 阅读 · 0 评论 -
setPreviewCallbackWithBuffer的出帧效率会变低
基于这个测试结果,在我们公司的项目开发上我就没有使用缓冲区了,因为我们开发的项目是运行在一个特别的Android设备上,这个Android设备一启动就只运行我们的一个应用,没有其它应用,所以多消耗点内存也没事,反正内存是够用的。可以看到,使用了缓冲之后,帧率下降了,效率并没有提高,只能说更省内存了。平均帧速为30帧/秒。可以看到,使用了缓冲后帧速明显下降。......原创 2022-07-28 08:52:18 · 895 阅读 · 0 评论 -
使用缓冲的方式采集视频
这样就避免了每一帧都创建新的data对象,但是需要注意,我们在处理data数据的时候一定要快,假设需要25帧/秒,则每一帧的处理时间为40毫秒,我们必须在40毫秒内处理完data,然后再把data设置到。之后,才使用我们给的buffer对象装一帧的图像给我们,所以,在我们需要数据的时候就需要调用。这是一个无预览摄像头视频采集,只是一个非常简单的代码,中,如果处理的时间慢,就会导致丢帧。,只是因为系统只会在我们调用了。,如果一直需要,就需要一直调用。运行代码,会发现只打印了一次。运行代码,打印的都是。....原创 2022-07-27 10:19:03 · 504 阅读 · 0 评论 -
Android无预览采集视频
Android无预览采集视频,无预览采集图片,无预览采集图像。原创 2022-07-27 09:10:46 · 1007 阅读 · 0 评论 -
Dom4J的Bug
Dom4J Bug!原创 2022-07-26 16:10:47 · 789 阅读 · 0 评论 -
android-jain-sip-ri
android-jain-sip-ri的使用。国标28181。GB28181。原创 2022-07-20 17:19:27 · 1371 阅读 · 1 评论 -
java代码实现二元一次方程
前言最近和朋友打羽毛球,6个人参加了羽毛球活动,打完了要计算平均每个人的费用,如果每次都用纸和笔来算就会比较麻烦,所以我就写了一个Android的程序来实现自动计算的功能。用纸和笔计算二元一次方程举行一次羽毛球活动,有4个男生和2个女生参加。费用由场地费和球费组成,场地费是150元,球费是30元,总共费用是180元,费用AA,出于对女生的关爱,女生优惠5元,也就是女生的平均费用比男生少5元,求男生平均费用是多少,女生平均费用是多少。这道题,通过二元一次方程可轻松解决,这是初中的数学知识,假设男生的平原创 2022-03-28 17:25:51 · 3149 阅读 · 0 评论 -
FileProvider的使用研究
前言Android7.0的文件系统权限更新:https://developer.android.google.cn/about/versions/nougat/android-7.0-changes?hl=en#permfilesys在Android7.0的时候,系统禁止使用file://形式的URI,需要改为使用content://形式的URI,所以需要适配的就是把项目中的Uri.fromFile(file)替换为FileProvider.getUriForFile(context, authorit原创 2022-03-10 10:02:51 · 7113 阅读 · 0 评论
分享