- 博客(546)
- 资源 (15)
- 问答 (1)
- 收藏
- 关注

原创 【Android】声控注入点击事件实现系统级“吃鸡”辅助
这里我们从“吃鸡”说起。绝·地·求·生 游戏的画面效果超级强悍,像我这样只玩掼蛋小游戏的三不青年(不抽烟,不喝酒,不玩网游)都被吸引到了近年来掀起了一股“吃鸡”热潮,更衍生出了一种文化现象(相关cosplay)其手游版本也是相当火爆,直播平台上的观看人数都超级多,当然,不确定这里的数据是否有水分一些周边产品也被带得风生水起当然,也包括一些...
2019-08-19 22:21:24
965
17

原创 【Android】从SurfaceFlinger中获取各layer图片(1)
Surfaceflinger进程提供一个入口来实现对各进程的surface画面进行合并处理,也就是说,Surfaceflinger进程中保存有各进程的图像,(即layer),这里尝试获取各layer图像数据,来加深对surface的理解。图像保存方法,参考screencap里的截屏实现,int writePNG(char* fileName, char*base, int w,...
2019-06-25 20:33:17
4109

原创 黄金分割二分性能分析
F0 = 0F1 = 0F2 = F1 + t(2) + F0 + t(1)Fn = Fn-1 + t(n) + Fn-2 + t(n-1)t(n) 为斐波那契数列En = Fn / sum= Fn / t(n+1)= (Fn-1 + Fn-2 + t(n+1) ) / t(n+1)= 1 + Fn-1 / t(n+1) + Fn-2 / t(
2012-08-17 17:34:37
2242

原创 多分方法的再讨论
两年前,对多分方法进行了一次分析,http://blog.csdn.net/aaajj/article/details/56016878-31备注 (1 + a) * lgK / (2*lg(a) )和 (a2+a-2)*lg(K) / ( 2*a*lg(a) )在数量级上是一样的,区别仅在于 1+a 和 (a*a + a - 2) / a(a*a + a - 2)
2012-08-02 22:58:59
692
原创 【Android】cmd命令
Android中cmd命令可以用来向binder服务发送命令,来进行相关调试,<service>:指定要调用的 Android 系统服务。[options]:根据具体命令可能需要提供的参数或选项。其实现原理是调用binder服务的command接口。常用的settings命令,就是使用的cmd命令,1. 包管理器(Package Manager)<command>:对该服务执行的具体命令。4. 输入法(Input Method)2. 电源管理(Power)与设备电源状态相关的命令。管理输入法相关设置。
2025-05-11 21:00:46
1030
原创 【Android】app调用wallpaperManager.setBitmap的隐藏权限
其原理是从系统中获取到壁纸文件如/data/system/users/0/wallpaper的fd,然后往里面写数据,这是一个杞人忧天的问题,app中,可以通过wallpaperManager.setBitmap来设置壁纸,直接在adb shell里访问/data/system/users/0 是没有权限的,难道是有地方赋权了?app写这个fd为什么没有出现权限问题呢,应该是有赋权,但还是引起了我们的好奇,去找找看。等等,根据以往的经验,进程访问app的fd会出现selinux问题,
2025-04-26 22:14:54
1049
原创 【Android】Wallpaper学习
静态壁纸设置的原理是在WallpaperManagerService里监听/data/system/users/0/wallpaper_orig相关文件的变化来触发设置,通过相应的组件程序去进行绘制,Toast.makeText(MainActivity.this, "壁纸设置成功!Toast.makeText(MainActivity.this, "壁纸设置失败!在 res/xml 目录下创建一个 XML 文件(例如 wallpaper_info.xml),用于描述动态壁纸的元信息。
2025-04-20 21:32:56
928
原创 【Android】ContentResolver的使用
无论是访问内置的提供者(如联系人、媒体库等),还是与第三方应用共享的数据进行交互,掌握 ContentResolver 的使用都是至关重要的。在 Android 中,ContentResolver 是一个非常重要的类,它提供了与 ContentProvider 进行交互的方法。ContentProvider 是用于在不同应用程序之间共享数据的标准接口,而 ContentResolver 则是从客户端(如 Activity 或 Service)访问这些数据的途径。putInt的调用,是对。
2025-04-13 21:28:00
1176
原创 【Android】SharedMemory获取文件描述符
(Android Shared Memory Driver),一种 Linux 匿名共享内存的优化版本,支持内存区域的动态清理和权限控制。(共享内存)是一种允许不同进程共享同一块内存区域的机制,常用于高效传输大量数据(如图像、视频等)。(API 26+):封装了 Ashmem 的操作,提供创建、映射和管理共享内存的方法。(旧版 API 的替代):基于 Ashmem,适用于 API 较低的场景。// 通过 Intent/Bundle/AIDL 传递 pfd 给其他进程。
2025-03-26 19:03:03
1000
原创 【Android】setText调用导致的悬浮窗抖动问题
在Android13中,有这么一个bug,写一个可以拖到的悬浮窗,这个悬浮窗里有TextView,在拖到某个位置后,再调用TextView的setText方法,会发现出现了一个窗口动画,悬浮窗跳到了起始位置,从开始的位置又滑动到当前位置,看起来就是出现了一个跳动。在开发者选项里,关闭掉 窗口动画缩放,就没有这个跳动问题了,所以这应该是窗口动画的bug,在调用setText的过程中,view的测量,布局中触发了窗口动画,并且使用了最初的坐标,大致是这样的思路。
2025-03-09 19:10:22
343
3
原创 【Android】悬浮窗的使用例子
这里我们来看看悬浮窗的使用,主要是windowManager.addView方法来添加。在某游戏中,一般都是一队4个人,但是在有的主播直播里,显示栏看上去是5个人,比如。如果没有权限,则引导用户到设置页面手动开启。有2种方式,一个是在投屏的软件画面里拉一个小窗口进去,(PC端操作)另外一个是在手机上显示一个悬浮窗,达到以假乱真的效果,在 Android 6.0 及以上版本中,需要通过。在 Android 中实现悬浮窗功能,可以通过。是一个危险权限,需要动态申请。,定义悬浮窗的 UI。
2025-02-27 14:31:11
1052
原创 [Android]文件描述符的binder传送
通过 Binder 传递文件描述符,本质是借助内核将 FD 转换为对文件对象的引用,并在接收进程重新映射为新 FD。开发者需关注。
2025-02-19 21:10:19
1010
原创 【Android】问deepseek存储访问
这些天deepseek爆火,我们来问问android问题看看,如果问android中的应用怎么访问外部存储,回答的很清楚,但是如果问的深入一些,比如Android中是怎么控制让应用不能读取其他应用的外部存储文件的,回答的比较抽象,只是给出了大概的分析方向。同时,用户可能对具体的技术细节感兴趣,比如UID/GID如何分配,文件描述符的传递机制,以及Binder在跨进程通信中的作用。另外,用户可能想知道这些机制在不同Android版本中的差异,比如Android 10之后的作用域存储如何强化了这些限制。
2025-01-28 13:25:27
2857
2
原创 [Android]service命令的使用
在前面的讨论中,我们说到,如果在客户端懒得使用aidl文件生成的接口类进行binder,可以使用IBinder的transcat方法还有一个更方便的binder调用测试方式,使用service命令。
2025-01-12 20:50:48
1015
原创 【Android】直接使用binder的transact来代替aidl接口
首先,你需要定义一个接口,并提供相应的服务端实现。这个过程可以通过 AIDL 来完成,但为了演示如何直接使用。
2025-01-09 21:36:48
661
原创 [Android]init中添加新的command
在Android的init进程中,command是用于定义启动时要执行的具体命令行指令的关键部分。init进程是Android系统启动的第一个进程,它负责初始化系统的各个组件,并启动必要的服务。command可以在init.rc文件及其包含的其他.rc文件中找到,通常作为on操作块或service定义的一部分。
2024-12-28 20:04:38
846
原创 【阅读笔记】Android AMS forcestop停止应用
注意看这个解释信息,如果不需要取消应用的scheduled alarms和jobs,可以使用stop-app。通过am命令force-stop 也可以调用forcestop,查看help信息,很多年前,曾经遇到一个卸载应用导致的重启问题,就是因为卸载的时候,没有及时的执行。ac.removePackage(packageName)导致的。在AMS中,停止指定的应用是一个常用的功能,在代码里可以看到。里面调用到forceStopPackageLocked方法,根据这篇文章作的笔记。
2024-12-15 20:09:33
550
原创 【阅读笔记】Android广播的处理流程
会调用到BroadcastQueue.java 的processNextBroadcast,有些广播接收不到,就是在这里面进行了屏蔽。广播的原理很清晰,类似一种观察者模式,控制中心把广播发送给注册者(观察者),但是android中的实现细节较多。关于Android的解析,有很多优质内容,看了后记录一下阅读笔记,也是一种有意义的事情,这里通过一个am命令发送受保护的广播,查看抛出的异常,看相关堆栈。,如果静态注册的应用未启动,还需要等待应用启动后再进行处理。今天就看看“那个写代码的”这位大佬关于广播的梳理,
2024-12-01 13:17:53
844
原创 【Android】静态广播接收不到问题分析思路
在Android中,静态广播如果静态广播不能接收,我们可以从整个流程中去分析,是否注册成功了,或者是在发送过程中出现了问题,参考资料中的流程可以去看几遍。这一种也比较直观,查看BroadcastQueue.java可以找到对应的代码,如果没有直观的BroadcastQueue 的log,还是要看看广播发送流程,代码细节很多,还是要仔细查看,还是那句话,"只在此山中,云深不知处"在dump信息中,可以通过查看receiver的信息,如果出现类似下面的log。这里一般不会出现问题,
2024-11-25 07:39:02
725
原创 【车辆管理】刻不容缓,车辆的智能化管理
2. 车辆上安装智能控制系统,指定区域,强制降低速度。无人机的飞行区域可以做到监管,车辆为什么不行呢,因为现在的车辆在智能化上面还是很落后的,之前就说过,多数和拖拉机没有区别。3. 智能道路安全系统,在路口设置智能升级地桩,对超速,闯红灯的车辆可以做到有效击杀,起到震慑作用。以前,我们多次讨论了汽车的智能化监管,没有智能监管的汽车就是失控的野牛,有巨大的安全风险。行人专用信号灯:在人行横道处设置行人专用信号灯,确保行人过街时的安全。侧边护栏:在道路两侧设置护栏,防止车辆冲出道路,保护行人和自行车道。
2024-11-17 19:29:43
714
原创 [Android]查找java类中声明为native方法的具体实现方法
nativeWriteInt是Java层Parcel.java中声明的函数名称,而android_os_Parcel_writeInt是JNI层android_os_Parcel.cpp中对应的函数。android_os_Parcel_writeInt方法中又调用了C++层的Parcel类,进而通过JNI实现了Java层对C++层方法的调用。在android代码中,经常可以看到native方法,需要查看其对应的C++方法,这些方法是一一对应的,对应关系是在jni注册里关联起来的。
2024-11-10 21:20:17
724
原创 [Android]从FLAG_SECURE禁止截屏看surface
在应用中,设置activity的flag为FLAG_SECURE就可以禁止截屏,截屏出来是黑色的,试验一下,
2024-11-03 13:34:33
1185
原创 【Android】perfetto使用学习
在开发者选项中的系统跟踪里抓取的perfetto文件是保存在/data/local/traces 里的。如果写一个while线程,一直使用cpu,是怎样的呢,这里我们来试验一下,加深学习。可以看到,这个线程是绿色的,状态是running,一直在运行。主线程中的执行是受vsync信号控制的,即间隔调用的。可以看到,这个进程号,线程号和log中的是一致的。点击Thread后面的箭头,会跳转到线程那里。在一个按钮中开启一个线程。
2024-10-27 20:38:20
513
原创 【Android】GraphicBuffer和ANativeWindowBuffer
看上去dequeueBuffer调用把数据保存到了ANativeWindowBuffer中,再通过GraphicBuffer的getSelf处理进行了转换,GraphicBuffer 和 ANativeWindowBuffer是什么关系呢,稍微看一下定义,就可以发现,可以把他们理解为一个东西,GraphicBuffer是surface的内存数据载体,但是,在Surface::lock方法获取内存信息时,在其父类ANativeObjectBase中,可以看到。
2024-10-09 20:43:46
623
原创 【Android】多角度看handler--looper的阻塞
作为对比,我们再看看广播中的唤醒,我们知道,在注册的广播接收器收到消息时,即广播的receiver调用的时候,是执行在主线程的,这显然是handler调用唤起的,比如亮屏这样的系统广播,我们猜测是AMS通过广播的相关处理,通过唤醒应用中的binder线程,调用相关方法,里面再调用主线程关联的handler来唤醒主线程looper阻塞,可以看出,looper的阻塞唤醒可以由其他线程的handler消息(本质还是消息队列里的某个fd)和监听的fd上有消息(如input)文件:LoadedApk.java。
2024-09-28 16:51:42
1054
原创 【Android】sendevent和getevent
在之前我们讨论了通过input命令,外接输入设备(鼠标)等方式来实现对屏幕的事件注入,达到实现一些自动化的操作,相对于input命令需要获取inputManager来进行操作,sendevent的方式直接写文件来注入粗糙的事件,调用起来清楚一些,就是指令复杂一些,sendevent的代码就是写数据到输入设备。复杂的就在于写入的数据,我们可以通过getevent -l的显示来观察一个点击手指再滑动一下,看看打印什么,
2024-09-17 18:53:28
1473
原创 自制游戏手柄--Android画面的input输入控制
在使用传感器获取到运动数据后,怎样转换为input事件传给手机呢,这里以Android为例,我们可以考虑以下方式:1. 物理方式,使用舵机连接触碰笔去实现,2. 构造MotionEvent事件,注入input,类似adb shell input命令,可以参考input命令的代码3. Android手机可以连接鼠标使用,可以使用支持虚拟鼠标功能的Arduino连接手机,发送相应的touch事件4. Android手机通过scrcpy投屏到电脑,通过Arduino控制电脑上的鼠标。
2024-09-08 20:48:02
1731
原创 自制游戏手柄--电位器的使用
它通常由一个电阻体和一个可以滑动的接触点(称为触点或刮刀)组成,当这个触点在电阻体上移动时,它可以改变连接到电路中的电阻值。也可以使用图像识别来实现,这里我们再考虑下使用电位器来获取运动状态,一个电位器可以获取到一个平面上的旋转情况,使用2个电位器就可以获取x-y 2个平面上的运行情况了,数值还很精确,在设备底部固定2个电位器即可。随着技术的发展,一些新的形式和技术也被引入到了电位器的设计之中,比如非接触式的电位器,它们使用霍尔效应或其他原理来实现无磨损的操作。数字电位器:使用数字信号来控制电阻值的变化。
2024-09-08 11:36:14
655
原创 自制实战吃鸡手柄原理
2,物理方案,打开游戏的陀螺仪功能,把手机(平板)安装到电机设备上,收到旋转指令时,就对设备进行旋转,由于设备会发生旋转,可以使用投屏到电视或者采集卡显示到电脑的方式来看游戏画面。1, 软件方案,在Android上启动一个服务,接收手柄的指令,把指令转换为MotionEvent事件,这里可以参考input命令的代码。再发散一下,为了游戏时有健身效果,可以添加相应的传感器来获取蹲,跳等动作,来控制游戏中的相应行为,来达到健身和身临其境的效果。枪形手柄使用蓝牙来进行连接,发送操作指令。有2种方案来进行控制,
2024-09-01 10:00:35
548
原创 【Arduino】试验带识别模块的吃鸡助手
通过这个试验,可以了解arduino串口通信的使用,蓝牙模块和arduino交互就是通过串口交互的方式。这里我们使用一个yb k210来作为识别设备,将其tx,rx和arduino的tx,rx。arduino收到串口信号时,调用继电器来实现通电,达到点击屏幕的效果,如果声控模块换成图像识别模块,就是一个自动识别并shot的功能了,在前面的试验中,我们试验了声音触发点击,方面多指操作的辅助功能,在其人脸识别模块的代码里添加串口通信处理serial.send,这里使用的是人脸检测,在吃鸡实战中效果不好,
2024-08-25 12:33:59
346
原创 【Arduino】自制声控点击器(吼叫吃鸡助手)
当时的思路是开一个服务,监听麦克风音量,然后注入input命令,但是,在Android中,由于touch的处理方式比较复杂,区分各输入类型,adb input命令的注入会和手指的touch冲突,发生断触,需要从系统级来处理这个融合,在input系列文章中我们进行了讨论,这里不再细说。这里我们考虑物理点击的方式,市面上有一些自动点击设备,体验后发现,使用的时候需要按开始按钮,实时性不强,这个开始按键,如果改成我们需要的声控处理,就恰到好处了。在接地的导线上,加一个开关控制,就可以实现触摸和停止触摸的效果,
2024-08-18 19:57:34
783
原创 【Android】物理接触式touch的type
在Android设备中,我们可以使用手指来进行屏幕触控操作,也有触控笔等设备,也有自动点击器这样的设备,这里我们来看看他们在MotionEvent中的type是什么,如果type一致,不同的设备touch事件可以共存。有时候可以注意到,通电的充电线也可以在屏幕上出现touch效果,这个touch和手指touch不会发生冲突,其type应该也是TOOL_TYPE_FINGER。可以看到,除了down,up事件,还有很多的move事件。4. 点击器设备,这种设备可以搜到很多。
2024-08-10 19:57:03
379
原创 【Android】系统级应用升级后的安装位置
系统级应用的安装位置一般在codePath=/system 下面,如果手动的去进行adb install覆盖安装,通过dumpsys package可以发现是安装在/data/app/里,如果是通过标准的系统升级方式呢?这里我们来通过升级查看一下,升级前升级后说明和手动安装的情况不一样。是会覆盖安装到/system/priv-app里的在Android中,系统级应用通常是预装在设备上的,并且通常位于目录中。
2024-08-05 09:41:24
1452
原创 【交通安全信息化】关于塌方事故的一些思考
通过信息化建设,可以实时监测道路状况,包括交通流量、天气影响、路面质量以及潜在的自然灾害如道路塌方等,从而及时响应和处理。2,车辆状态信息联网,如果车辆发生异常状况,如翻转,跌落等异常情况,向周围的车辆和服务端发送告警,避免更多的车辆出现意外。1,道路检测,可以通过摄像头动态识别,或者在道路中安装相关传感器,识别出道路的状况,出问题时及时告警。这样的塌方事故,尤其在夜间发生的时候,车辆驾驶员会很难及时发现,这个时候如果有道路信息化系统,就可以很好的提供帮助,讲讲道路信息化建设,及时的发现道路塌方等问题。
2024-07-21 22:17:53
497
原创 Gstreamer学习3.1------使用appsrc灌颜色信号数据
在前面的学习中,我们知道了可以向appsrc来灌数据来进行显示。这里,我们也可以使用appsrc来实现这个信号图,1. 从图片中读取到数据,比如读取的bmp图片,2,每一次显示时,在appsrc里灌入颜色数据。这个视频内容讲解的离散余弦变换,讲的很好,其中讲到,把颜色变化转换为曲线的处理,需要设计一下曲线移动时的显示,
2024-07-14 21:30:00
523
原创 GStreamer学习5----probe数据探测
当数据流经管道中的元素时,probe允许开发者在特定的pad(输入或输出端口)上设置监听器,从而可以捕获或处理正在通过的数据。事件可以是各种各样的信号,如标记(mark)、缓冲区开始(buffer start)或结束(buffer end)等。结构,这包含了触发probe的数据(如缓冲区或事件)。通过使用probe,开发者可以在不打断数据流的情况下进行调试、性能分析或实时数据处理,这在开发复杂的流媒体应用程序时非常有用。函数,传入你想要监控的pad以及一个回调函数,当probe被触发时将执行此回调。
2024-07-07 17:21:47
1297
原创 GStreamer学习4----写一个插件
就比如最近欧洲杯里讨论的比较火的广告内容区域化转换处理,就可以在gst_my_filter_chain里进行。注意,这样生成的自定义的element的名字使用起来应该是my_filter,比如数据格式是RGB,获取到长宽后,可以进行颜色转换,画面镜像处理等等,例子的的方法来获取buffer中的内存数据,来进行操作,使用里面的工具自动生成一个插件程序,比如MyFilter。在gst_my_filter_chain方法中,画一下图,就比较容易理解生成的代码结构。element的定义,init。
2024-06-23 16:36:06
835
原创 Gstreamer学习3----灌数据给管线之appsrc
这个g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);是个同步阻塞方法,因为ret作为入参,记录执行的情况。里面,讲了一个例子,push音频数据给管线,视频的例子更加直观一些,回调方法中,设置数据,再push进处理流程中。可以看到颜色变化的画面。
2024-06-16 21:04:38
875
原创 [FFmpeg学习]windows环境sdl播放音频试验
函数是由SDL音频系统在需要更多音频数据以填充音频缓冲区时自动调用的。当SDL音频系统开始播放音频时,它会周期性地调用音频回调函数以获取新的音频数据。函数是由SDL音频系统在需要更多音频数据以填充音频缓冲区时自动触发的。您无需手动调用此函数,SDL音频系统会负责调用它。函数中,我们需要根据音频缓冲区的需求提供音频数据。开始播放音频时,SDL音频系统会根据音频参数(如采样率、通道数和缓冲区大小)定期调用。函数中,我们初始化SDL音频系统并设置了音频回调函数。函数时,SDL音频系统会注册音频回调函数。
2024-06-16 09:48:34
651
原创 [FFmpeg学习]初级的SDL播放mp4测试
在获取到AVFrame时,还可以调用SDL方法来进行展现,实现播放效果。在之前的学习中,通过AVFrame来保存为图片来认识了AVFrame,这里只显示了视频,没有处理声音,
2024-06-10 21:56:18
584
MFC找获取可编辑的CListCtrl的字符串
2013-01-06
简单的MFC透明弹幕工具界面
2015-03-26
英语词汇量统计工具
2013-05-23
你好,请问怎样让应用在root后的手机里获得较大的权限?
2016-05-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人