- 博客(399)
- 资源 (4)
- 收藏
- 关注
原创 X-Requested-With,一个少见且难以修复的问题
从Android 12开始部分移除,Android13开始完全移除,本文记录如何在低版本移除修改的部分参考代码。在Android 12以下,使用WebView请求数据会添加请求头。
2025-03-30 10:33:51
219
原创 Android中使用Robolectric测试点击事件(不需要手机)
Robolectric 是一个由 Google 维护的开源 Android 测试框架,它允许你以 Android 运行时环境运行单元测试。Robolectric 提供了一个模拟 Android 运行时环境,允许你测试你的代码是否正确地使用 Android API。所以在不依赖于手机的情况下可以对android项目进行测试。当然也可以在有手机的时候对Android项目进行测试。
2025-02-28 20:21:17
641
原创 Android RecycleView触摸事件记录
在开发中有时候需要对RecycleView的触摸事件进行拦截和处理,RecyclView本身事件比较复杂,直接使用View的事件体系不能完成特定业务。比如区分滑动和点击事件。
2024-05-31 19:57:05
1251
原创 Compose中的重组、state、remember
在Compose中UI采用State状态来控制UI变化,根据状态的不同来显示不同的内容,每次UI的重新变化成为重组。通过remember可以将state的数据保存起来(或者实例对象,毕竟条件不改变的话默认只会执行一次remember中的函数,哪怕重组无数次),避免在重组期间进行重置。下面记录下三者的关联。
2024-02-01 15:30:55
1043
原创 Android源码中示例代码的查看方式
由此可知其余示例也是找到相关的官方仓库,然后去查看示例代码。在实际开发中查看官方api定义的时候会看到如下内容。
2024-02-01 12:18:50
310
原创 Android Room数据库异常(线上两个版本之间结构无变动): Room cannot verify the data integrity.
在Room数据库结构变动的情况下,如果没有进行Room数据库升级迁移,则会报错。在实际开发过程中,数据库结构会经常变化,直到发版。一般来说卸载即可重新安装,但是有时候即使卸载了再安装依然会出现这个错误。这时候通常重启设备再重新安装即可,然而再后面即使数据库没有更改多次安装还是有概率出现,一旦出现,只能重启。查阅多种资料,最终发现通过禁用备份功能可以解决该问题。猜测是备份功能会自动把之前旧的数据库版本更新下来然后与当前新版本数据库产生了冲突。
2024-01-30 16:27:25
1159
原创 在Compose中控制组件中数据的流速
在Compose中设计思想是分为状态和组件的,组件由状态控制。这个操作和传统的AndroidView不太一样。在Compose中对话框Dialog也是一个组件,其显示和隐藏由外部状态控制。这里有一个场景,假设显示和关闭的时间间隔过短的话,需要将时间延长至两秒后再隐藏。针对这种问题有两种写法,一种是外部控制显示隐藏时机,一种是内部控制。外部控制较为简单,这里不再记录。本文记录下内部控制方式。
2024-01-29 20:04:42
572
原创 gradle构建项目速度优化及排查方式
gradle构建优化分为两部分,分别为Android上面的优化和gradle项目通用优化,使项目编译速度提升,节省开发时间。在此前提保持良好的编码习惯并减少代码和资源,也有利于提高编译速度。
2023-11-26 16:31:50
3396
原创 Could not resolve all files for configuration ‘:app:androidJdkImage‘.
解决办法为,修改java版本为17。本地重新下载Java17的jdk,这样本地就会有21、17两个版本,然后在项目中指定依赖的java版本17并配置路径(也可以配置环境变量)可以看出使用的sdk版本为34,java版本为21.
2023-11-26 13:00:28
3382
原创 使用ListenableFuture进行异步任务执行并进行线程切换
在程序中会经常需要做一些异步任务,但是由于部分操作其实很简单,仅仅是短暂的进行异步操作,然后在结果成功或失败的时候切换回主线程进行下一步处理,这期间不能阻塞主线程。这里记录一下使用google的guava库里面的并发类进行处理,也可以,只是在Android上最低支持API23版本,但是项目最低支持21。使用来进行Java高版本兼容的话,改动比较多,一直有R8/D8兼容性错误。估计要升级jdk、gradle等等版本,在协作开发中不太合适。项目中本身就有guava。所以使用这个进行开发。
2023-11-23 11:15:57
1188
原创 开发中各个工具的版本变化速查链接
该文档虽然是官方文档,但是不会把实验功能写出来,比较好的地方就是看起来整齐简洁,下一条文档也是官方的,很全面,但是文档写的复杂。可以从这个文档有个简单了解,具体每个版本细分特性可以查阅https://docs.oracle.com/en/java/javase/21/index.html 这个链接,然后将版本号修改下即可。可以选择不同的版本查看,比较不好的是,没有列出每个版本的新增变化。groovy的版本变化相较于其余更加难读主要位于官网的最下面。
2023-10-29 20:14:59
437
原创 使用Google的地点自动补全功能
在进行海外开发时候需要使用google地图,这里对其中的地点自动补全功能开发进行记录。这里着重于代码开发,对于key的申请和配置不予记录。
2023-10-25 20:28:43
801
原创 AnimatedVectorDrawable矢量图动画的使用和修改
文章目录一、前言二、一个矢量图文件三、参考链接一、前言矢量可绘制对象可以提供比较复杂的动画效果,只是绘制比较复杂,这里可以让UI使用Adobe After Effects软件制作出相关的矢量图xml文件交由开发使用。只是如果需要重复播放的动画效果时候,导出的矢量图里面没有改内容,所以需要开发自己添加,这里记录下添加的方式。二、一个矢量图文件以下是一个矢量图的内容。主要由两部分效果(位移和缩放)组成,这里需要设置为无限循环播放模式,需要在里面的属性动画里面添加以下代码 <!--翻转-->
2023-08-01 15:19:13
1719
原创 使用Path时候遇到的有些问题
然后和朋友一起研究后发现,onDraw()绘制了两次,在绘制第二次的时候携带了之前的Path信息导致的结果不同,只需要每次绘制之前或之后把Path的信息清空就可以了。后来通过查找ApiDemos发现正确写法是每次调用Path之前调用下Path.reset()就可以了。问题描述:在学习http://www.jianshu.com/p/2c19abde958c这个博客的时候,运行其中一个代码片段,发现结果和帖子上描述的不同(注意我把Path定义成全局变量,因为系统提示的)。
2023-07-10 11:01:33
458
原创 Mac环境下使用Clion编译测试运行Ffmpeg
编译安装ffmpeg。这里面不要自己创建额外的文件,比如c文件或者makefile文件,因为整个项目会一起编译,如果环境不对会出现错误。然后中间会把编译的库文件安装到 /usr/local/下面,需要进行授权,出现权限拒绝时候,执行类似于以下的命令进行授权。首先从官网或者github下载源码。
2023-06-09 15:07:28
1892
原创 FFmpeg中configure的参数配置解释
这些选项允许你根据项目要求进行定制,减少生成的库和二进制文件的大小或限制特定功能的使用。你可以使用这些参数来启用或禁用特定的编码器、解码器、复用器、解复用器、解析器、比特流过滤器、协议、输入设备、输出设备和滤镜等。通过设置这些选项,你可以根据需求定制FFmpeg的构建和功能,只包括你所需的组件和功能。例如,你可以选择是否启用GPL代码、构建静态库还是共享库、构建特定的程序,以及是否构建文档等。通过使用这些参数,可以使FFmpeg链接到相应的外部库,从而启用与这些库相关的组件和功能。
2023-06-05 19:20:07
4893
原创 MAC环境编译Android环境下的FFmpeg6.0版本
该方式会生成相关文件,否则项目不可运行,执行根目录的configure文件,一. 下载FFmpeg源码。
2023-06-05 16:39:06
2697
11
原创 Cmake学习记录(九)--使用Cmake交叉编译Android .so库
目前Android编译.so的话使用Android Studio比较简单,但是有时候时候Android Studio的话还需要创建一个Android的项目,这里记录下脱离Android Studio单纯使用Cmake和C++开发工具Clion(或者其他的开发工具也行,这些开发工具和Android Studio不一样,哪一种工具都行)。实际上编译.so还有比较简单的方式。比如直接在linux环境下面使用cmake编译c++项目即可,这时候出现的就是.so库。
2023-05-30 20:32:22
3744
1
原创 Class not found when unmarshalling:
问题描述:这个问题主要出在某些版本的手机上面使用了Intent直接传递Parcelable数据,且Parcelable类型是使用默认方式生成的。修改方式有多种,这里使用比较方便的一种,另外一种方式是在使用Intent传递数据时候添加加载器除此之外还可以转换成字节数组传递,该方式出现在中。
2023-04-03 14:45:27
1829
原创 Coil的原理浅析与自定义加载类型
Coil是一种纯粹是一kotlin编写的,利用了协程特性的图片加载库,其代码量较少,算是比较轻量的图片加载库。对于常规类型的图片都有加载方式,不过也有无法预料的情况,比如加载apk文件中的图片,此文章基于此问题进行编写。Coil自身支持的类型有StringHttpUrlUriFileIntDrawableBitmap但是如果想新增类型的话需要拓展MapperFetcher。其中Mapper是对用于区分不同的类型,比如将String类型转换为File或者Uri。
2023-03-31 11:11:20
883
原创 PendingIntent.getActivity创建两个Activity实例的问题
PendingIntent.getActivity使用时候遇到的问题
2022-08-16 16:18:35
1752
百分比适配库的jar
2015-10-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人