- 博客(14)
- 收藏
- 关注
原创 LangChain安装与第一个Hello Word输出
System.Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "你的key哦", [System.EnvironmentVariableTarget]::User)这里deepseek的收费还是很便宜的,我试了2次,收了我0.001元不到,当然也可能和我这个操作的token使用不大有关,是一个很简单的api调用,所以收费很便宜。充钱之后,打印不会报错了,然后也能看到相关的打印,他准确的将我手动输入的英语翻译成了中文。
2025-11-12 11:02:57
1111
原创 C语言#号的作用
本文总结了C语言中#符号的三种特殊用法:1)单个#可将宏变量转为字符串,但仅适用于常量;2)双##用于宏变量拼接;3)#@可将宏变量转为字符。这些技巧在日常编码中较为少见,属于C语言的冷门知识点。
2025-11-11 14:22:15
223
原创 Android 双击菜单键仅发送广播
本文针对机顶盒菜单键需求,提出了一种单击发送键值、双击仅发送广播的实现方案。设计通过拦截原始按键事件并统一销毁,利用定时器区分单双击:首次按键启动350ms延时,若超时则模拟发送单击事件,若检测到第二次按键则发送双击广播。关键实现包括:1)在PhoneWindowManager中拦截按键并设置标志位;2)使用Handler延时消息判断双击;3)通过injectInputEvent注入模拟按键并添加特殊标记避免重复处理。该方案有效解决了Android系统原生无法直接区分单双击的问题,并通过事件转换确保应用兼容
2025-11-11 10:55:38
728
原创 快速按待机按键出现设备死锁问题
摘要:机顶盒设备在快速按待机唤醒键时出现系统挂死,分析日志发现死锁问题。死锁涉及WMS进程和AMS系统服务,形成Binder_4、Binder_2和InputReader间的环形等待。问题根源在于PMS模块1099行的代码设计缺陷,该处不必要地持锁执行发送广播操作。解决方案为优化加锁逻辑,仅在wakeUpNoUpdateLocked函数需要时持锁,避免无关操作占用锁资源,从而解决死锁问题。
2025-11-10 17:59:39
866
原创 修改Android烧录包和升级包内的某个文件权限
摘要:针对机顶盒需求要求修改system/etc/dhclient*文件权限从751改为755的问题,可通过修改Android系统配置文件system/core/libcutils/fs_config.cpp实现。该文件维护了系统文件权限列表,只需在列表中修改dhclient对应的权限值为755,或参照格式新增条目。修改后重新编译SDK即可使目标文件获得所需权限。此方法适用于系统预置文件权限的批量修改,相比手动修改更加规范高效。
2025-11-10 17:41:21
329
原创 Jni的使用方法
Jni我的理解他其实就是一个跨环境的调用工具,Java和C通过他来完成信息的交互一般来说,使用Jni他有静态注册和动态注册两种方法,所以其实看他的描述来看动态注册会是主流.但我们就学习来说都学了比较好。
2025-11-01 22:34:27
1131
原创 JNI native调用java层梳理
本文介绍了JNI中native层调用Java方法的实现过程。主要内容包括:1)获取和修改Java静态成员变量;2)修改Java类成员变量;3)调用Java静态方法;4)调用Java成员方法。核心流程包括通过JNIEnv获取类引用、查找方法/字段ID、执行方法调用或字段操作等步骤,并强调内存管理和异常处理的重要性。文中提供了完整的代码示例,展示了如何在native代码中操作Java对象,包括参数传递、字符串转换等常见场景。最后总结了动态注册JNI方法的模板,为native与Java交互提供了实践指导。
2025-11-01 22:17:38
342
原创 Android 问题排查指南
本文总结了Android机顶盒开发中的问题定位方法:1) 通过修改Toast相关代码暴露发布者信息;2) 分析Window层级确定弹窗来源;3) 在SettingsProvider中添加调用者PID记录;4) 利用uboot保存重启原因;5) 通过init监控属性修改记录。这些方法有效解决了Toast、弹窗、设置变更、异常重启和属性修改等问题的溯源难题,大幅提升了调试效率。其中特别对Toast和Settings的修改实现了完整的调用链追踪,而通过uboot保存重启信息的方法避免了重复复现问题。
2025-10-23 15:34:29
672
1
原创 C盘大文件查找方法
电脑磁盘空间不足时,可以使用工具快速查找大文件。SpaceSniffer能直观显示各文件大小占比,但搜索速度较慢;相比之下,WizTree搜索更快,还能自动分类并提供可视化结果,更推荐使用。这两个工具都能帮助用户快速定位占用空间的文件,解决磁盘空间不足的问题。
2025-09-10 17:00:12
1138
原创 Android调用关系打印
Android开发中可通过堆栈打印和PID获取来追踪函数调用关系。Java中调用new Throwable()即可打印调用栈,C/C++需导入CallStack库并调用相关方法。获取调用者PID在Java中使用Binder.getCallingPid(),在C中通过IPCThreadState实现。这些方法可帮助开发者清晰了解函数调用流程及调用者信息,便于调试和问题排查。
2025-09-10 16:38:51
286
原创 在驱动内增加一个可操作GPIO的节点
本文介绍了在Linux驱动中创建可读写类属性节点的方法。通过CLASS_ATTR_RW宏定义属性,使用class_create和class_create_file函数创建类和属性文件。同时需要实现show和store函数,分别处理用户空间的读取和写入操作。show函数返回"hello world"字符串,store函数则接收用户输入。这种方法可以在用户空间通过文件操作(如cat/echo)与内核驱动交互,适用于需要通过驱动节点控制硬件(如GPIO)的项目需求。
2025-09-10 15:36:00
179
原创 通过dumpsys获取广播相关信息的方法
文章摘要:本文分享了Android广播调试的实用方法,包括判断应用是否收到广播(通过查看DELIVERED日志)、查询历史广播记录(使用dumpsys命令分析Historicalbroadcasts)、查看进程监听的广播(搜索Non-DataActions)、判断定向广播(检查Package参数)以及区分有序/无序广播(添加打印日志)。重点介绍了如何利用系统日志和dumpsys命令快速定位广播分发状态、耗时和接收情况,特别适用于处理广播超时、阻塞等调试场景。
2025-09-10 14:58:34
644
原创 解决在运行Android studio的模拟器时出现的无法启动的问题
首先找到自己的模拟器相关的.android文件在哪里打开之后他会跳转到这个模拟器相关的文件夹位置,但我们要的不是他,而是他的上一级目录.android跳转到这个.android目录的上一级将他放到你想要放的位置完成后需要进行环境变量的新增,如果没有进行环境变量的新增的话是找不到这个位置的直接在这里新增这一栏,完成之后保存环境变量的配置.然后进行重启Android studio操作,再次尝试之后就可以看到模拟器正常运行了起来。
2024-10-13 16:23:40
4068
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅