<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[github_35581409的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/github_35581409</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; github_35581409]]></copyright><item><title><![CDATA[让codex每天打开workbuddy帮你领积分]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/163336855</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/163336855</guid><author>github_35581409</author><pubDate>Thu, 30 Jul 2026 15:01:26 +0800</pubDate><description><![CDATA[然后等时间到了之后，他会调用workbuddy客户端，但是这一步需要授权，第一次的时候，记得授权，然后codex就可以掌管你的桌面，和鼠标。workbuddy每天都有100的积分可以领，但是经常忘记，但是codex每天都开着，于是给codex一个任务，让他每天给我领积分。并且自动点击领取积分。]]></description><category></category></item><item><title><![CDATA[团队 AI 辅助开发规范与工作流]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/159960716</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/159960716</guid><author>github_35581409</author><pubDate>Wed, 08 Apr 2026 16:29:52 +0800</pubDate><description><![CDATA[为了解决团队在使用 AI 辅助编程时频繁遇到“生成代码不符合现有架构、样式乱套”的痛点，我们正式在项目中引入了 Prompt Engineering as Code（提示词工程代码化） 架构]]></description><category></category></item><item><title><![CDATA[关于compose的remember]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/156909455</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/156909455</guid><author>github_35581409</author><pubDate>Tue, 13 Jan 2026 17:21:30 +0800</pubDate><description><![CDATA[摘要：Compose中使用remember缓存数据时，若依赖外部状态变化需要手动触发更新。示例中daysOfWeek使用remember缓存过去7天日期，但当手机时间更改时不会自动更新。解决方法是为remember添加key参数（如checkInList），当key变化时重新计算。这样既保持了性能优化（避免不必要的重算），又能确保数据及时更新。Jetpack Compose的重组机制会因状态变化触发函数重新执行，而remember通过key实现了智能更新控制。]]></description><category></category></item><item><title><![CDATA[GlanceAppWidget 点击事件]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/156297221</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/156297221</guid><author>github_35581409</author><pubDate>Fri, 26 Dec 2025 10:32:43 +0800</pubDate><description><![CDATA[在Glance Widget中，直接使用onClick lambda无法在首次点击时触发，因为Composable的lambda不会被序列化。正确做法是使用GlanceActionCallback，它会在updateAppWidget()时将Action转为PendingIntent。这样点击时直接触发PendingIntent，不依赖应用状态或Composable执行。关键点：1) ActionCallback会被序列化；2) 系统直接处理PendingIntent；3) 确保首次点击必触发。实现方式是通]]></description><category></category></item><item><title><![CDATA[Glance创建widget]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/155631690</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/155631690</guid><author>github_35581409</author><pubDate>Sat, 06 Dec 2025 16:21:19 +0800</pubDate><description><![CDATA[摘要：本文介绍了使用Jetpack Glance库开发Android小部件的方法。通过声明式API简化开发流程，详细说明了从添加依赖、配置清单文件到创建Widget布局和接收器的完整步骤。重点展示了如何利用Compose风格编写Widget UI组件，包括数据处理、图像加载和状态更新机制，并提供了通过JSON字符串更新Widget状态的实现方法。]]></description><category></category></item><item><title><![CDATA[compose 写日历组件]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/155630690</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/155630690</guid><author>github_35581409</author><pubDate>Sat, 06 Dec 2025 09:12:26 +0800</pubDate><description><![CDATA[本文介绍了使用Jetpack Compose实现一个双月视图日历组件的方法。该组件默认显示当前月和下一个月的日历，支持滑动切换月份，并处理了嵌套滚动逻辑。关键实现包括： 使用NestedScrollConnection处理滚动边界检测和月份切换逻辑 通过YearMonth API计算当前月和下个月的日期数据 实现月份标题、星期标题和日期单元格的UI布局 支持点击选择日期、高亮显示当前日期和选中日期 添加&quot;Today&quot;按钮快速返回当前月份 组件采用Compose声明式UI编写，包含Mont]]></description><category></category></item><item><title><![CDATA[如何定义android compose屏保程序]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/154725794</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/154725794</guid><author>github_35581409</author><pubDate>Wed, 12 Nov 2025 09:34:23 +0800</pubDate><description><![CDATA[摘要：本文介绍了如何使用Jetpack Compose创建Android屏保程序。核心是继承DreamService类，通过ComposeView实现屏保UI。主要步骤包括：1)在AndroidManifest中声明DreamService；2)实现LifecycleOwner等接口管理生命周期；3)在onAttachedToWindow()中设置ComposeView；4)使用Composable函数ScreenSaverContent()显示漂浮时钟效果。该时钟会每秒更新时间，并在屏幕上随机移动位置，动]]></description><category></category></item><item><title><![CDATA[mmkv版本兼容 ]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/151953733</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/151953733</guid><author>github_35581409</author><pubDate>Mon, 22 Sep 2025 09:00:11 +0800</pubDate><description><![CDATA[【摘要】MMKV升级到2.0时，64位设备需满足Google Play的16KB页大小要求，但会导致32位设备崩溃。解决方案是通过ABI分包实现多版本兼容：在build.gradle中配置armeabi-v7a使用MMKV1.3.x（32位），arm64-v8a使用MMKV2.x（64位）。通过productFlavors为不同架构分别打包，生成两个APK/AAB文件，既满足政策要求又兼容旧设备。具体实现包括：开启ABI拆分、设置flavorDimensions、差异化依赖版本，最终通过assemble命令]]></description><category></category></item><item><title><![CDATA[拖拽移动并监听点击事件]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/151792208</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/151792208</guid><author>github_35581409</author><pubDate>Wed, 17 Sep 2025 13:17:43 +0800</pubDate><description><![CDATA[【代码】拖拽移动并监听点击事件。]]></description><category></category></item><item><title><![CDATA[在android应用中执行su命令]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/151618659</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/151618659</guid><author>github_35581409</author><pubDate>Fri, 12 Sep 2025 15:04:02 +0800</pubDate><description><![CDATA[本文介绍了两种在已root设备上执行su命令的方法：1)通过executeProcess函数直接执行命令数组，如listOf(&quot;su&quot;,&quot;0&quot;,&quot;id&quot;)；2)通过execSu548Command函数实现交互式命令执行，先获取su权限再写入命令并读取输出。两种方法都包含异常处理和进程清理，后者还支持命令链式执行。代码示例展示了如何实现命令执行、输出捕获和日志记录功能。]]></description><category></category></item><item><title><![CDATA[如何监听 mutableStateListOf 的变化]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/151362643</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/151362643</guid><author>github_35581409</author><pubDate>Tue, 09 Sep 2025 15:33:59 +0800</pubDate><description><![CDATA[然后呢，在UI compose部分，希望通过launcher 来监听tabState的内容，触发界面变化之类的。然后比如在网络请求等数据更新后，对这个 tabState进行内容更新，例如。看到别人写的一个compose的代码，作为初学很容易犯的一个错；} //需要监听 tabstate list。在viewmodel中定义个列表变量。由于列表实例不变，所以不会重新执行。​（添加/删除/修改元素）时，​。用来存储tablist，所以在compose部分。不检查列表内容的实际变化。]]></description><category></category></item><item><title><![CDATA[低端设备加载webp ANR]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/150490520</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/150490520</guid><author>github_35581409</author><pubDate>Mon, 18 Aug 2025 13:56:18 +0800</pubDate><description><![CDATA[这篇ANR日志分析显示，应用在欢迎页加载一张分辨率过高的WebP图片（5760x3240，57.47KB）导致了ANR问题。通过Google官方WebP工具对图片进行优化，使用参数&quot;-q75 -resize 2880x1620&quot;将尺寸缩小50%后，图片质量保持良好（PSNR 56.26dB）且文件体积显著减小（19.8KB）。优化后的图片在显示效果无差异的情况下，有效解决了因解码超大分辨率图片导致的ANR问题。建议对应用中的大尺寸图片资源进行类似优化处理。]]></description><category></category></item><item><title><![CDATA[Arouter框架暴露api接口给其他模块]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/149607031</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/149607031</guid><author>github_35581409</author><pubDate>Thu, 24 Jul 2025 15:57:45 +0800</pubDate><description><![CDATA[文章摘要： 本文介绍了基于ARouter的模块化通信实现方案。1.在公共模块定义接口SunnyDeviceApi和数据类SportData；2.在设备模块实现接口并注册路由；3.通过懒加载方式在公共模块封装路由获取逻辑；4.其他模块只需依赖公共模块即可调用设备功能。该方案实现了模块间解耦，通过接口标准化通信，利用ARouter实现跨模块服务调用，避免了直接依赖。典型应用包括初始化、注册/注销监听器等设备操作。]]></description><category></category></item><item><title><![CDATA[compose LazyListState]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/149092057</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/149092057</guid><author>github_35581409</author><pubDate>Thu, 03 Jul 2025 13:23:49 +0800</pubDate><description><![CDATA[摘要：rememberLazyListState是Jetpack Compose中管理LazyColumn/LazyRow滚动状态的关键工具。它提供两种主要功能：1)精确控制滚动位置，如通过scrollToItem()方法将列表定位到指定项；2)实时监听滚动位置变化，当用户滚动到列表末尾附近时自动触发加载更多数据（如检测到倒数第3项时调用loadMoreStatistic）。该状态对象还支持反向布局(reverseLayout)等配置，是构建高效、响应式列表组件的核心API。]]></description><category></category></item><item><title><![CDATA[自定义上下两个方向的柱形图]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/148978109</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/148978109</guid><author>github_35581409</author><pubDate>Sat, 28 Jun 2025 16:34:20 +0800</pubDate><description><![CDATA[用compose绘制一个自定义的柱形图标，上面表示一个列表值，下方表示另外一个列表值。]]></description><category></category></item><item><title><![CDATA[关于Arouter的初始化]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/148733012</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/148733012</guid><author>github_35581409</author><pubDate>Wed, 18 Jun 2025 10:04:50 +0800</pubDate><description><![CDATA[摘要：
ARouter初始化在主线程执行时，开启debug模式（ARouter.openDebug()）会触发Dex文件加载，导致低端设备上耗时近10秒。若未使用自动注册工具（如arouter-register或JailedBird.ARouterPlugin），可通过配置arouter_config{disableTransformWhenDebugBuild=true}避免debug阶段插桩，提升编译速度，但路由变更需清除应用数据生效。该方案牺牲首次启动性能（依赖原生Dex遍历）换取编译效率，适合大型项]]></description><category></category></item><item><title><![CDATA[依赖冲突了移除]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/148732562</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/148732562</guid><author>github_35581409</author><pubDate>Wed, 18 Jun 2025 09:44:07 +0800</pubDate><description><![CDATA[导入依赖库的时候，依赖库里面有依赖不同的版本，造成冲突，可以通过。之类的把合并冲突的移除。]]></description><category></category></item><item><title><![CDATA[firebase异常捕获]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/148611496</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/148611496</guid><author>github_35581409</author><pubDate>Thu, 12 Jun 2025 15:33:57 +0800</pubDate><description><![CDATA[data/user/0/com.xxxxx/files/.crashlytics. 下有文件。在代码中主动 throw RuntimeException()，但是控制台始终无法看到日志，配置 google-service.json。如何开启调试和查看日志呢？依赖，plugin等。]]></description><category></category></item><item><title><![CDATA[compose 保持屏幕常亮的工具类]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/148491774</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/148491774</guid><author>github_35581409</author><pubDate>Sat, 07 Jun 2025 10:19:21 +0800</pubDate><description><![CDATA[利用view的 keepScreenOn属性，通过监听compose的resume和pause来给视图添加常亮。在需要常亮的地方通过。就可以添加界面常亮了。]]></description><category></category></item><item><title><![CDATA[apk图片资源优化，减小APK大小]]></title><link>https://blog.youkuaiyun.com/github_35581409/article/details/148445473</link><guid>https://blog.youkuaiyun.com/github_35581409/article/details/148445473</guid><author>github_35581409</author><pubDate>Thu, 05 Jun 2025 10:41:49 +0800</pubDate><description><![CDATA[png, svg转矢量图，webp到底用什么格式的图片呢？在Android开发中选择图片资源格式（PNG、SVG、WebP）需综合考虑​​。]]></description><category></category></item></channel></rss>