- 博客(447)
- 资源 (16)
- 收藏
- 关注
原创 Android Studio类ChatGpt的免费AI编程助手
ChatGpt大火,带动了AI工具的发展,介绍两款免费的AI编程助手,一款用于输入关键字自动输出代码,一款则是自动补全提示.可支持大部分代码编辑器,这里主要介绍Android Studio上安装使用.。
2023-06-07 21:13:47
6879
3
原创 Android监听运行应用的任务变化包含Activity及Service
本文介绍了两种监听安卓应用运行状态变化的方案:使用IActivityManager和IActivityTaskManager。第一种方案通过注册IProcessObserver回调来监听进程活动变化,但获取包名较复杂。第二种方案从Android 10开始引入,使用registerTaskStackListener回调,能更清晰地获取任务栈变化信息。两种方案都需要引入framework.jar并申请相应权限(SET_ACTIVITY_WATCHER或MANAGE_ACTIVITY_TASKS)。文章通过序列图
2025-11-11 14:32:20
832
原创 Linux服务器编译android报no space left on device导致失败的定位解决
摘要:本文记录了在多个Android项目编译过程中遇到的"no space left on device"错误问题。通过排查内存、/tmp分区和磁盘使用情况,发现根分区已满。提供了临时清理方案和长期解决方案,包括迁移/tmp目录、调整swap分区位置等操作步骤,并给出防止再次满盘的建议。最终释放了8GB空间,解决了编译失败问题。
2025-10-23 11:52:24
786
原创 Android Framework SD卡格式化流程及代码实现
摘要 本文分析了Android系统中格式化SD卡的操作流程代码。主要涉及storage_dialog_unmountable弹窗提示,该字符串定义在Settings/res/values-zh-rCN/strings.xml中,用于提示用户"此存储设备已损坏,需要先进行设置"。代码流程包含存储设备状态检测、格式化确认界面以及格式化进度显示等环节。系统通过StorageManager服务完成,代码反射调用StorageWizardFormatConfirm.showPublic进行格式化。
2025-10-23 09:45:47
579
原创 Android监听第三方播放获取音乐信息及包名
摘要: Android通过NotificationListenerService可监听应用通知,包括媒体播放状态。本文介绍了利用该服务获取音乐播放信息的方法:1) 在清单文件中声明权限和服务;2) 实现NotificationListenerService,通过MediaController回调获取播放进度、曲目信息等数据。当检测到媒体通知时,会注册回调监听播放状态和元数据变化。该方案适用于大多数媒体应用,但某些后台播放场景可能需要改用MediaSessionManager轮询。代码演示了如何建立监听、处理
2025-10-13 15:57:18
1011
2
原创 Android Framework用Activity作为原生Launcher3桌面
文章摘要: 本文介绍了原生Launcher3桌面应用的实现原理。通过分析AndroidManifest.xml文件,指出默认首页是Launcher.java,并展示了其作为主Activity的配置属性。文章重点解析了Launcher.java的布局结构,包括DragLayer、Workspace、Hotseat等核心组件的XML定义和功能说明。其中Workspace包含5个屏幕单元格,Hotseat作为快捷栏,PageIndicator用于页面指示,ScrimView提供背景遮罩效果。这些组件共同构成了An
2025-10-10 09:34:05
540
原创 Android电池库仑计计算、容量校准、电池曲线详解
Android设备充电过程主要分为三个阶段:预充电(低电流激活)、恒流充电(大电流快速充)和恒压充电(电流递减至满)。充电器类型包括标准SDP、专用DCP和混合CDP,系统需根据类型调整充电策略。库仑计用于精确测量电量,配合OCV电压表计算电池容量。温控采用Jeita策略,根据温度调节充放电参数,确保安全。电池容量计算通过安时积分法和开路电压法实现,并具备自学习功能以校准老化误差。充电管理还包括预充电保护、电量显示校准等机制,通过硬件检测和软件算法共同保障充电安全与效率。
2025-10-10 09:08:55
1027
原创 Android哪些权限属于Privileged Permissions特许权限许可名单
摘要: Android特许权限是安全级别最高的系统权限,包括signature和signatureOrSystem两种级别。这些权限默认授予由平台密钥签名并安装在特定目录(如/system/priv-app)的应用。Android 10引入了强制白名单机制(privapp-permissions.xml),要求显式授权,取代了Android 8.1及之前版本的隐式授权方式。特许应用需满足签名、安装位置及白名单要求,不同Android版本在授权机制上存在差异。signatureOrSystem权限因安全隐患在
2025-09-29 14:30:46
965
原创 Android Framework默认给应用添加dangerous级别权限
摘要:本文分析了Android系统中系统应用获取权限的机制。系统应用安装在/system/app目录下时,需满足特定条件才能获得不同级别权限:signature权限需平台密钥签名;signatureOrSystem权限需同时满足特权目录和平台签名;normal权限自动授予。dangerous权限涉及用户隐私,需通过修改DefaultPermissionGrantPolicy.java源码手动授予。文章还指出Android 10引入的特许权限白名单机制,并提供了在源码中实现权限授予的具体方法,包括修改
2025-09-29 14:28:59
980
原创 macOS苹果电脑运行向日葵远程控制软件闪退
摘要:macOS系统下向日葵远程控制软件升级后出现闪退问题,表现为启动界面短暂显示后自动退出。经排查,主要原因为登录项设置中未允许向日葵后台运行。解决方法:进入系统设置→通用→登录项,开启SunloginClient的后台运行权限,完全退出后重启软件即可恢复正常。文章还提供了向日葵字体过小和Ctrl键映射问题的临时解决方案,但后者尚未完全修复。作者通过实践验证了登录项设置对软件稳定运行的重要性。
2025-09-10 09:21:03
1383
原创 Docker安装Ubuntu搭建Android SDK编译环境
本文介绍了在Docker中安装和使用Ubuntu 18.04镜像的详细步骤,包括镜像安装、容器运行、SSH服务配置、中文乱码解决、命令补全安装等。文章还提供了Android编译环境的配置方法,包括JDK版本选择、常见编译错误的解决方案(如setup-jack-server失败、权限问题等)。最后说明了如何配置docker命令免密执行。内容涵盖从基础镜像安装到复杂编译环境搭建的全过程,适合需要在Docker容器中进行Android开发的用户参考。
2025-09-06 12:26:25
1003
1
原创 Android Framework打电话禁止播放运营商视频彩铃
本文介绍了在展锐平台安卓13系统中屏蔽运营商视频彩铃的方法。通过分析Dialer应用的logcat日志和源代码,定位到视频彩铃控制的关键变量isSupportVideoRingTone。研究发现该变量由UniCarrierConfigManager管理,通过修改vendor/sprd/platform/packages/apps/SprdDialer中InCallPresenter.java的代码,将isSupportVideoRingTone数组值强制设为false,即可实现屏蔽视频彩铃广告的功能。该方法
2025-09-01 10:21:16
833
原创 Android大话省电管理之Doze
安卓Doze是Android 6.0引入的电池优化机制,通过限制后台活动节省电量。主要分为Light Doze和Deep Doze两种模式:Light模式在屏幕关闭后3分钟进入,限制网络和任务;Deep模式需设备静止30分钟,会暂停网络、闹钟、同步等。系统定期开放30秒维护窗口允许任务执行。不同版本特性不同,Android 6.0仅支持Deep模式,7.0后新增Light模式。开发者可通过ADB调试Doze状态,使用白名单机制让关键应用豁免限制。该机制会降低CPU频率和核心数,显著影响后台任务执行。
2025-09-01 10:19:01
909
原创 Android Framework代码拦截陌生人来电
Android 7.0引入的BlockedNumberProvider为系统提供了统一管理骚扰电话和短信的解决方案。文章介绍了该内容提供程序的核心功能,包括号码的增删查改操作,并通过adb命令演示了具体使用方法。针对屏蔽陌生号码需求,提出了两种实现方案:一是修改BlockedNumberProvider中的isBlocked函数,增加对通讯录的检查逻辑;二是通过修改DialpadFragment来阻止拨打非联系人号码。此外还介绍了BlockChecker类的功能,它是系统底层用于管理黑名单和拦截通话的重要组
2025-08-27 10:57:53
848
原创 Android Framework微信保活后台收消息设置
本文介绍了Android系统下防止微信被后台杀死的保活方案。主要通过修改系统配置实现:1)将微信加入省电模式白名单(allow-in-power-save-except-idle);2)配置系统黑名单防止被终止;3)设置第三方持久化进程和服务。修改涉及platform.xml和arrays_ex.xml文件,添加微信包名"com.tencent.mm"。成功保活后,关键的微信推送服务(com.tencent.mm:push)将保持运行,确保能接收离线消息。该方案需要系统级权限修改,会带来
2025-08-26 11:23:47
1055
原创 Android12 Framework读写prop属性selinux报错解决
Android系统应用读取属性值时需SELinux权限,否则会报denied错误。解决方案为:1)在system_app.te中添加allow规则(不同平台策略不同);2)修改property.te中的neverallow规则,添加system_app例外;3)处理treble_sysprop_neverallow冲突。需注意修改多个相关文件,包括system/sepolicy下的property.te及对应版本的prebuilts文件。编译报错需根据具体提示调整策略,逐步解决neverallow冲突问题。
2025-08-23 01:00:00
646
原创 Android 按钮获取焦点时高亮边框并动态放大
Android中为ImageButton添加焦点高亮效果的方法:通过创建自定义Drawable实现黄色边框高亮显示,使用stateListAnimator控制焦点状态下的缩放效果。关键步骤包括:1) 在res/drawable下创建XML文件定义焦点状态下的黄色边框样式;2) 在布局中引用该背景并确保ImageButton可获取焦点。特殊场景下可叠加触摸反馈效果,通过layer-list实现焦点边框和点击水波纹的共存。此外,还可为点击状态添加深黄色背景等视觉效果,增强交互反馈。
2025-08-22 00:15:00
612
原创 Android Framework定制长按电源键关机的窗口
Android系统长按关机流程解析:通过config.xml配置长按电源键行为(0-5对应不同操作),默认显示全局操作菜单。系统通过PhoneWindowManager处理按键事件,最终调用GlobalActions显示关机对话框。实现分为SystemUI和Legacy两种方式,其中SystemUI通过GlobalActionsDialog加载布局文件global_actions_grid_v2.xml,并根据config_globalActionsList数组动态添加功能按钮(如关机、飞行模式等)。开发者
2025-08-13 15:50:11
845
原创 Android12 Framework电话功能UI定制
Android 12展锐平台通话界面分析,重点介绍了InCallActivity及其核心Fragment(VideoCallFragment、InCallFragment、DialpadFragment)的功能与交互逻辑。通过代码定位,发现通话录音按钮在VideoCallFragment.java中实现,根据录音状态动态更新按钮文本("通话录音"/"录音中")。InCallActivity通过InCallPresenter管理不同Fragment的显示状态,根据通话场
2025-08-12 18:27:25
1019
原创 Android Framework不弹窗直接关机
Android长按电源键直接关机实现方案 本文分析了Android系统长按电源键的处理逻辑,通过修改PhoneWindowManager.java中的powerLongPress()方法实现直接关机功能。关键修改是将长按行为直接设置为LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM常量,绕过系统默认的弹窗确认流程。该方法会触发触觉反馈后直接执行关机操作,无需用户二次确认。文章详细解析了原始代码中各case分支的处理逻辑,包括全局操作菜单显示、语音助手启动等不同行为,并提供了具体的代码
2025-08-08 10:16:40
753
原创 Android12 Framework Sim卡pin与puk码解锁
本文分析了Android 12系统中SIM卡PIN码输入界面的实现机制。当插入启用PIN码的SIM卡时,系统会弹出包含顶部提示文本和底部输入框的锁定窗口。顶部提示文本(如"请输入SIM 1 PIN")由KeyguardSimPinViewController控制,通过getPinPasswordErrorMessage方法动态生成提示信息,内容来自系统资源文件strings_ex.xml中定义的字符串模板。该界面分为KeyguardMessageArea(顶部提示)和KeyguardSi
2025-08-08 09:46:28
869
原创 Android Framework代码屏蔽未接来电振动及声音通知
本文介绍了屏蔽安卓设备未接来电通知的两种方法。第一种是通过广播方式清除通知,但普通应用缺乏必要权限且adb指令在Android11上报错。第二种是直接修改Framework代码,通过分析logcat定位到通知来源(com.android.dialer包),找到MissedCallNotifier.java中创建通知的代码位置。建议修改该处代码,将未接来电通知改为不发出。该方法在展锐平台的Android11和12上验证有效。
2025-08-05 15:20:52
1004
原创 Android12 Framework定制音量等级与音量曲线
本文介绍了在Android 12系统中定位和修改音频策略引擎配置文件audio_policy_engine_stream_volumes.xml的方法。通过md5校验可确定正确的源文件,该XML文件定义了不同音频流类型的音量控制参数,包含多个音量组(如voice_call、system)及其对应的设备类别(耳机、扬声器等)的音量曲线。文章详细解析了音量曲线的配置格式(百分比和dB值),对比了通话和系统音量的差异,并提供了定制音量等级和曲线的方法,包括修改indexMax值和调整曲线点参数。最后还附上了And
2025-07-09 11:13:02
813
原创 Android OTA升级更新SettingsProvider值修改默认输入法
OTA升级后默认输入法不会自动更新,需通过修改系统配置实现。Android系统通过Settings.Secure存储默认输入法配置,其中default_input_method和enabled_input_methods两个值决定当前输入法。正确的OTA升级修改方法包括:1) 在defaults.xml中更新输入法配置;2) 修改SettingsProvider.java中的SETTINGS_VERSION版本号;3) 在onUpgradeLocked函数中插入新的输入法配置。注意直接修改数据库版本号或Da
2025-07-09 10:53:18
1110
原创 Android Framework设置时间为24小时制
修改Android系统默认时间格式为24小时制的操作指南:在系统配置文件中查找def_time_12_24字段(通常在frameworks/base/packages/SettingsProvider/res/values/defaults.xml),将其值从"12"改为"24"。若未找到该字段,需在芯片厂商指定的目录(如MTK平台为vendor/mediatek/...)添加相应配置,并在DatabaseHelper.java中加载设置。修改后系统将默认使用24小时
2025-06-27 16:44:12
1186
原创 Android Framework手势导航左右滑有效区域的判定
摘要:本文分析了Android系统中边缘返回手势的触摸区域判定逻辑,重点解读了EdgeBackGestureHandler.java文件中isWithinTouchRegion方法的实现。该方法通过检查触摸坐标位置,判断是否位于有效的边缘返回触发区域(包括左右边缘宽度、底部区域过滤、排除区域处理等条件)。文章还提供了不同Android版本中该文件的存放位置,并展示了如何修改代码限定只保留右滑功能。最后附带了相关技术文章的参考链接。该分析有助于理解Android手势导航的系统级实现机制。
2025-06-24 09:56:41
757
原创 Android编译curl并内置到设备固件
摘要:本文介绍了curl工具的基本功能及在Android平台上的编译与集成方法。curl作为支持多种协议的强大命令行工具,可用于数据传输、接口测试等场景。文章详细说明了在展锐平台单独编译curl的步骤(环境设置、编译、adb推送),以及将curl集成到固件中的方法(修改mk文件)。同时提供了常用curl命令参数示例,如显示响应头(-i)、POST请求(-d)、保存文件(-o)等。编译完成后生成的可执行文件curl可通过adb指令在设备上运行,为Android开发调试提供便利。
2025-06-11 11:46:03
1051
1
原创 git下载大工程老失败解决方法
本文聚焦 “git clone 大工程失败” 问题,指出克隆时进度达 100% 却报错,如出现 “internal server error”“Broken pipe” 等,原因是工程大、下载慢或网络不良导致下载中断。解决思路是利用 SSH 配置中的 keepAlive 机制维持长连接,介绍了 ServerAliveInterval(控制发送保持连接消息间隔)和 ServerAliveCountMax(允许未响应最大次数)的作用、工作原理,还说明了服务端和客户端的配置方法、适用场景、注意事项及常见问题排查,
2025-06-10 14:51:52
1379
原创 Android Framework预装traceroute执行文件到system/bin下
摘要:本文介绍了在Android 11系统中集成traceroute工具的方法。由于默认只提供traceroute6,作者通过下载可执行文件并将其添加到vendor目录的mk文件中,使用PRODUCT_COPY_FILES将traceroute拷贝到系统bin目录。编译验证后成功烧录到设备,并测试了traceroute的参数使用(-I ICMP模式和-T TCP模式),指出TCP模式需要root权限。该方法解决了Android设备缺少traceroute工具的问题,适用于网络诊断场景。
2025-06-09 19:12:19
899
原创 Android设备推送traceroute命令进行网络诊断
Traceroute是一种网络诊断工具,用于追踪数据包从源主机到目标主机所经过的路由路径。它通过发送TTL值递增的数据包,利用ICMP或TCP/UDP协议获取各路由节点的响应时间和IP地址。在Android设备上使用需要root权限,将可执行文件推送至/system/bin目录。命令示例包括使用ICMP或TCP协议追踪目标主机,输出显示各跳数、路由器IP及响应时间。文中还提供了详细的Android安装步骤和实际运行示例,帮助用户进行网络故障排查。
2025-06-06 18:18:06
1399
5
原创 电脑开不了机,主板显示67码解决过程
摘要:电脑运行中显示内存不足,重启后卡在BIOS阶段(代码67)。分析表明问题可能由内存条接触不良、兼容性或BIOS设置不当引起。解决方法包括清理主机灰尘、逐条测试内存(确认故障内存后替换),以及用橡皮擦清理金手指。操作时需断电防静电,避免液体清洁,并确保内存型号匹配。最终通过上述步骤成功修复启动问题。 (字数:150)
2025-06-06 10:31:52
4491
原创 Android Framework学习八:SystemServer及startService原理
Android 系统中 SystemServer 启动流程如下:首先由 untimeInit.applicationInit() 准备反射所需 Method,加载 libandroid_servers.so 动态库。接着创建系统上下文,实例化 SystemServiceManager 管理服务。服务启动分三步:startBootstrapServices(t) 启动引导服务,如 ATM 等,通过反射创建服务并执行 onStart();startCoreServices(t) 启动核心服务,像电池服务;
2025-05-21 14:28:18
1219
原创 Android Framework学习七:Handler、Looper、Message
文章摘要: 本文介绍了Android中的消息处理机制,核心组件包括Looper、MessageQueue、Handler和Message。Looper作为消息循环的核心,通过Looper.prepareMainLooper()和Looper.loop()启动,确保每个线程拥有独立的Looper对象。MessageQueue是消息队列,以链表形式存储Message。Handler负责发送和处理消息,Message则携带消息内容和目标Handler的引用。Looper.loop()通过循环调用loopOnce(
2025-05-20 19:57:13
1494
1
原创 Android Framework学习六:Binder原理
Binder是Android系统中的一种进程间通信(IPC)机制,涵盖机制、应用和驱动三个层面。在机制层面,Binder提供标准化的通信方式,支持不同进程间的数据交换和方法调用。在应用层面,开发者可通过继承Binder类实现自定义的跨进程通信逻辑。在驱动层面,Binder作为虚拟物理设备驱动,负责管理内存映射、线程管理等底层操作。Binder通信过程中,数据通过Binder驱动在内核态和用户态之间传递,客户端通过copy_from_user将数据拷贝到内核空间,服务端通过mmap直接访问内核空间。每个APP
2025-05-20 12:29:44
1385
原创 家里wifi不能上网或莫名跳转到赌博及色情网站就是域名被劫持、DNS被污染了
摘要:DNS 劫持指攻击者篡改域名解析过程,引导用户访问错误 IP 地址。上网时域名易在接入公共 WiFi(黑客搭建虚假热点)、路由器被攻击(存在漏洞或密码被破)、DNS 服务器遭攻击(如 DDoS 攻击)、网络传输(节点被控制)等阶段被劫持。案例有弹出广告、跳转网址等。排查可用 nslookup、ping、dig 等工具。解决方法包括清除系统 DNS 缓存(查看缓存、使用命令清除),登录路由器设置 DNS(更换为公共 DNS 地址,若无效考虑重置路由器),联系运营商处理外网劫持,页面被恶意跳转还可报警。
2025-05-14 14:51:43
8319
1
原创 Android Framework学习五:APP启动过程原理及速度优化
文章摘要:本文详细介绍了Android应用程序(APP)启动优化的方向与流程,并深入解析了APP启动的完整过程。优化方向包括减少启动时间、优化资源加载等。启动流程涉及多个关键组件,如Launcher、ActivityTaskManagerService(ATMS)和Binder等。文章通过代码示例展示了从用户点击应用图标到系统进程ATMS处理启动请求的详细步骤,包括Launcher调用startActivity、Instrumentation.execStartActivity的调用,以及ATMS的star
2025-05-14 11:51:53
1660
原创 Android Framework学习四:init进程实现
下面图片主要围绕 Android 系统中init进程的运行机制展开介绍。init进程是 Android 系统启动时第一个用户空间进程,它从执行main.cpp文件里的main函数开始运行。main函数以循环调用的方式来维持进程的持续运行,确保后续的系统初始化操作能够逐步完成。执行顺序1. FirstStageMain2. SetupSelinux3. SecondStageMain
2025-05-09 12:20:29
1106
原创 Android Framework学习三:zygote剖析
zygote 进程启动:Zygote 是 Android 系统中一个重要的进程,是所有 Java 应用程序进程的孵化器 ,它的启动是整个流程的开端。随后进入app_main.cpp中的main()函数,这是 Zygote 进程在 C++ 层面启动的入口函数。runtime.start () 启动 ZygoteInit:调用runtime.start()函数来启动ZygoteInit。这是 Zygote 进程启动过程中的关键步骤,它会进一步调用一系列函数来完成虚拟机和 JNI 相关的初始化
2025-05-04 17:42:10
1313
1
原创 Android Framework学习二:Activity创建及View绘制流程
当一个应用程序创建一个窗口(例如 Activity 的界面)时,它会向 WMS 发送请求。根据窗口的属性(如大小、位置、层级等)将其添加到窗口管理列表中。每个窗口都有一个或多个 Surface 与之关联。当应用程序需要绘制窗口的内容时,它会通过 Surface 来获取绘图的上下文,然后使用图形库(如 OpenGL)在 Surface 上进行绘制。Activity包含PhoneWindow、DecorView、ViewRootImpl等其创建流程如下
2025-05-02 19:30:58
1728
Android内存测试memtester可执行应用
2024-10-08
windows下curl+openssl+zlib 32位与64位dll与lib库及头文件
2024-06-13
硬件设备中麦及喇叭声学自测音频
2023-06-28
安卓手机功耗分析工具battery-historian离线资源
2021-05-25
vim用户手册(完全版)
2009-03-30
binutils-2.14.tar.gz完整版
2009-05-13
opencv的.cache文件
2018-02-02
gcc-3.3.2.tar.gz第一部分
2009-05-13
gcc-3.3.2.tar.gz第二部分
2009-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅