
Android平台
文章平均质量分 88
帅得不敢出门
省略1万字
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android 按钮获取焦点时高亮边框并动态放大
Android中为ImageButton添加焦点高亮效果的方法:通过创建自定义Drawable实现黄色边框高亮显示,使用stateListAnimator控制焦点状态下的缩放效果。关键步骤包括:1) 在res/drawable下创建XML文件定义焦点状态下的黄色边框样式;2) 在布局中引用该背景并确保ImageButton可获取焦点。特殊场景下可叠加触摸反馈效果,通过layer-list实现焦点边框和点击水波纹的共存。此外,还可为点击状态添加深黄色背景等视觉效果,增强交互反馈。原创 2025-08-22 00:15:00 · 335 阅读 · 0 评论 -
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 · 691 阅读 · 0 评论 -
Android12 Framework电话功能UI定制
Android 12展锐平台通话界面分析,重点介绍了InCallActivity及其核心Fragment(VideoCallFragment、InCallFragment、DialpadFragment)的功能与交互逻辑。通过代码定位,发现通话录音按钮在VideoCallFragment.java中实现,根据录音状态动态更新按钮文本("通话录音"/"录音中")。InCallActivity通过InCallPresenter管理不同Fragment的显示状态,根据通话场原创 2025-08-12 18:27:25 · 859 阅读 · 0 评论 -
Android Framework不弹窗直接关机
Android长按电源键直接关机实现方案 本文分析了Android系统长按电源键的处理逻辑,通过修改PhoneWindowManager.java中的powerLongPress()方法实现直接关机功能。关键修改是将长按行为直接设置为LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM常量,绕过系统默认的弹窗确认流程。该方法会触发触觉反馈后直接执行关机操作,无需用户二次确认。文章详细解析了原始代码中各case分支的处理逻辑,包括全局操作菜单显示、语音助手启动等不同行为,并提供了具体的代码原创 2025-08-08 10:16:40 · 560 阅读 · 0 评论 -
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 · 716 阅读 · 0 评论 -
Android Framework代码屏蔽未接来电振动及声音通知
本文介绍了屏蔽安卓设备未接来电通知的两种方法。第一种是通过广播方式清除通知,但普通应用缺乏必要权限且adb指令在Android11上报错。第二种是直接修改Framework代码,通过分析logcat定位到通知来源(com.android.dialer包),找到MissedCallNotifier.java中创建通知的代码位置。建议修改该处代码,将未接来电通知改为不发出。该方法在展锐平台的Android11和12上验证有效。原创 2025-08-05 15:20:52 · 897 阅读 · 0 评论 -
Android12 Framework定制音量等级与音量曲线
本文介绍了在Android 12系统中定位和修改音频策略引擎配置文件audio_policy_engine_stream_volumes.xml的方法。通过md5校验可确定正确的源文件,该XML文件定义了不同音频流类型的音量控制参数,包含多个音量组(如voice_call、system)及其对应的设备类别(耳机、扬声器等)的音量曲线。文章详细解析了音量曲线的配置格式(百分比和dB值),对比了通话和系统音量的差异,并提供了定制音量等级和曲线的方法,包括修改indexMax值和调整曲线点参数。最后还附上了And原创 2025-07-09 11:13:02 · 636 阅读 · 0 评论 -
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 · 979 阅读 · 0 评论 -
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 · 955 阅读 · 0 评论 -
Android Framework手势导航左右滑有效区域的判定
摘要:本文分析了Android系统中边缘返回手势的触摸区域判定逻辑,重点解读了EdgeBackGestureHandler.java文件中isWithinTouchRegion方法的实现。该方法通过检查触摸坐标位置,判断是否位于有效的边缘返回触发区域(包括左右边缘宽度、底部区域过滤、排除区域处理等条件)。文章还提供了不同Android版本中该文件的存放位置,并展示了如何修改代码限定只保留右滑功能。最后附带了相关技术文章的参考链接。该分析有助于理解Android手势导航的系统级实现机制。原创 2025-06-24 09:56:41 · 653 阅读 · 0 评论 -
Android编译curl并内置到设备固件
摘要:本文介绍了curl工具的基本功能及在Android平台上的编译与集成方法。curl作为支持多种协议的强大命令行工具,可用于数据传输、接口测试等场景。文章详细说明了在展锐平台单独编译curl的步骤(环境设置、编译、adb推送),以及将curl集成到固件中的方法(修改mk文件)。同时提供了常用curl命令参数示例,如显示响应头(-i)、POST请求(-d)、保存文件(-o)等。编译完成后生成的可执行文件curl可通过adb指令在设备上运行,为Android开发调试提供便利。原创 2025-06-11 11:46:03 · 974 阅读 · 0 评论 -
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 · 845 阅读 · 0 评论 -
Android设备推送traceroute命令进行网络诊断
Traceroute是一种网络诊断工具,用于追踪数据包从源主机到目标主机所经过的路由路径。它通过发送TTL值递增的数据包,利用ICMP或TCP/UDP协议获取各路由节点的响应时间和IP地址。在Android设备上使用需要root权限,将可执行文件推送至/system/bin目录。命令示例包括使用ICMP或TCP协议追踪目标主机,输出显示各跳数、路由器IP及响应时间。文中还提供了详细的Android安装步骤和实际运行示例,帮助用户进行网络故障排查。原创 2025-06-06 18:18:06 · 1054 阅读 · 4 评论 -
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 · 1072 阅读 · 0 评论 -
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 · 1404 阅读 · 0 评论 -
Android Framework学习六:Binder原理
Binder是Android系统中的一种进程间通信(IPC)机制,涵盖机制、应用和驱动三个层面。在机制层面,Binder提供标准化的通信方式,支持不同进程间的数据交换和方法调用。在应用层面,开发者可通过继承Binder类实现自定义的跨进程通信逻辑。在驱动层面,Binder作为虚拟物理设备驱动,负责管理内存映射、线程管理等底层操作。Binder通信过程中,数据通过Binder驱动在内核态和用户态之间传递,客户端通过copy_from_user将数据拷贝到内核空间,服务端通过mmap直接访问内核空间。每个APP原创 2025-05-20 12:29:44 · 1202 阅读 · 0 评论 -
Android Framework学习五:APP启动过程原理及速度优化
文章摘要:本文详细介绍了Android应用程序(APP)启动优化的方向与流程,并深入解析了APP启动的完整过程。优化方向包括减少启动时间、优化资源加载等。启动流程涉及多个关键组件,如Launcher、ActivityTaskManagerService(ATMS)和Binder等。文章通过代码示例展示了从用户点击应用图标到系统进程ATMS处理启动请求的详细步骤,包括Launcher调用startActivity、Instrumentation.execStartActivity的调用,以及ATMS的star原创 2025-05-14 11:51:53 · 1529 阅读 · 0 评论 -
Android Framework学习四:init进程实现
下面图片主要围绕 Android 系统中init进程的运行机制展开介绍。init进程是 Android 系统启动时第一个用户空间进程,它从执行main.cpp文件里的main函数开始运行。main函数以循环调用的方式来维持进程的持续运行,确保后续的系统初始化操作能够逐步完成。执行顺序1. FirstStageMain2. SetupSelinux3. SecondStageMain原创 2025-05-09 12:20:29 · 1036 阅读 · 0 评论 -
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 · 1196 阅读 · 1 评论 -
Android Framework学习二:Activity创建及View绘制流程
当一个应用程序创建一个窗口(例如 Activity 的界面)时,它会向 WMS 发送请求。根据窗口的属性(如大小、位置、层级等)将其添加到窗口管理列表中。每个窗口都有一个或多个 Surface 与之关联。当应用程序需要绘制窗口的内容时,它会通过 Surface 来获取绘图的上下文,然后使用图形库(如 OpenGL)在 Surface 上进行绘制。Activity包含PhoneWindow、DecorView、ViewRootImpl等其创建流程如下原创 2025-05-02 19:30:58 · 1632 阅读 · 0 评论 -
Android Framework学习一:系统框架、启动过程
Zygote 进程是 Android 系统中由 init 进程启动的第一个 Java 进程,它运行着一个 Java 虚拟机(JVM)实例,并且预加载了大量的系统资源和类,能够快速创建新的应用程序进程和部分系统服务进程。zygote是由init进程fork出来的,在Android中,DVM和ART、应用程序进程以及运行系统的关键服务的SyetemService进程都是由Zygote进程来创建的,所以称之为孵化器。init 进程主要通过解析配置文件来确定要执行的操作和启动的服务。init是用户空间的鼻祖。原创 2025-04-30 19:37:44 · 1404 阅读 · 0 评论 -
Android WebRTC回声消除
WebRTC 的回声消除系统主要包含声学回声消除(AEC)模块、语音活动检测(VAD)模块、舒适噪声生成(CNG)模块等。WebRTC是一个由谷歌主导开发的开源项目,其目标是通过简单的API,实现实时通信(RTC)。WebRTC项目包含了多个处理音视频通讯问题的模块,其中就包括了一个性能优异的回声消除(AEC)模块。它旨在为开发者提供一个高效、可靠的解决方案,以消除通话中的回声干扰,提升用户体验。主要回声消除函数就是上面介绍的这几个,如果要放到Android上调,就要把这几个包成jni的形式。原创 2025-04-28 18:23:15 · 1870 阅读 · 0 评论 -
android录音生成wav
站在巨人的肩膀上已经有人实现了,代码位置github使用实现源码主要是这几个文件在 record/src/main/java/com/dreamfish/record/下的AudioRecorder.javaFileUtil.javaPcmToWav.javaRecordStreamListener.javaWaveHeader.java调用如下private AudioRecorder audioRecorder;audioRecorder = AudioRecorder.getI原创 2025-04-28 17:59:14 · 862 阅读 · 0 评论 -
Android studio Unknown Kotlin JVM target: 21
在Java开发中,理解项目的构建过程至关重要。JVM target是构建过程中的一个重要概念,它指定了编译后的字节码应该兼容的JVM版本。选择合适的JVM target可以确保编译后的代码能够在目标JVM上正确运行。Unknown Kotlin JVM target: 21错误原因是JVM版本过高了,Android Studio不支持。原创 2025-03-03 11:07:48 · 3651 阅读 · 0 评论 -
Android7到13代码安装APP应用
需求是安卓中调用代码安装apk,非root普通权限。原创 2025-02-24 16:21:38 · 1072 阅读 · 0 评论 -
Python与Java实现hmacSha256+base64
本文用java与python实现hmacSha256 base64加密算法,HMAC是什么?HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种使用密码散列函数,同时结合一个加密密钥,通过特定计算方式生成的消息认证码(MAC)。它可以用来保证数据的完整性,同时可以用作某个消息的身份验证。HMAC算法要求通信双方共享密钥、约定算法,并对报文进行哈希运算,形成固定长度的认证码,从而通过认证码的校验来确定报文的合法性。SHA-256是什么?原创 2025-02-11 11:41:47 · 1026 阅读 · 0 评论 -
MacOS安装Docker battery-historian
在 MacOS 上安装 battery-historian,可以使用 Docker 进行安装runcare/battery-historian:latest。5. 访问 Battery Historian:在浏览器中输入http://localhost:9999,即可打开 Battery Historian 界面。来运行容器,将容器的 9999 端口映射到主机的 9999 端口,其中-d表示在后台运行容器,–name=battery为容器指定一个名称叫battery。下载适合 MacOS 的版本进行安装。原创 2025-01-23 11:49:02 · 1332 阅读 · 0 评论 -
使用iperf进行wifi拉距吞吐测试
iperf 是一个用于网络性能测量和调优的工具,它是一个跨平台的开源软件,使用 C 语言编写,可在 Linux、Unix 和 Windows 、android等多个平台上运行。本文讲解如何在各种平台或设备上运行iperf。原创 2025-01-16 10:45:45 · 1909 阅读 · 0 评论 -
Android 11代码实现自动接听电话
本文主要讲解Android11手机自动接电话的代码实现。原创 2025-01-16 10:43:10 · 1924 阅读 · 0 评论 -
vscode、android studio、vim 国产AI编程插件Fitten Code
Fitten Code是由非十大模型驱动的AI编程助手,它可以自动生成代码,提升开发效率,帮您调试Bug,节省您的时间。还可以对话聊天,解决您编程碰到的问题。免费且支持80多种语言:Python、C++、Javascript、Typescript、Java等。vscode, jetbrains, visual studio, vim都能使用。优势:免费,不用梯子去翻 墙。官网功能简介插件在哪能用。原创 2024-11-29 15:29:55 · 2450 阅读 · 0 评论 -
Android Studio安装TalkX AI编程助手
TalkX是一款将OpenAI的GPT 3.5/4模型集成到IDE的AI编程插件。它免费提供特定场景的AI编程指导,帮助开发人员提高工作效率约38%,甚至在解决编程问题的效率上提升超过2倍。作为国内领先的AI开发助手,TalkX还为其他领域的用户提供知识和支持。原创 2024-11-28 10:02:51 · 1130 阅读 · 0 评论 -
Android Framework禁止弹出当前VOLTE不可用的提示窗口
VoLTE(Voice over LTE)是一种基于4G LTE网络的语音通话技术。它允许用户在4G网络上进行高质量的语音通话和视频通话,而不需要回落到2G或3G网络。当无法使用VoLTE功能时,比如网络不好时,会弹以下窗口,如果点击了确定,可能会导致原来能打视频电话的变成不能打了,需要屏蔽这个窗口。原创 2024-11-27 09:46:26 · 926 阅读 · 0 评论 -
Android Studio加载旧的安卓工程项目报错处理
新版本的Android Studio加载旧的安卓工程项目,会报各种问题1. Invalid Gradle JDK configuration found2. NDK not configured. Download it with SDK manager. Preferred NDK version is 3. CMake '3.10.2' was not found in PATH or by cmake.dir property4. com.intellij.openapi.externalSy原创 2024-11-07 14:50:52 · 2898 阅读 · 0 评论 -
Gradle命令编译Android Studio工程项目并签名
gradlew 是一个脚本文件,它允许你在没有全局安装 Gradle 的情况下运行 Gradle 构建。这个脚本在多平台上可用,对于 Windows 系统来说是 gradlew.bat 文件,而对于 Unix、Linux 和 macOS 系统来说则是 gradlew 脚本文件。1. ./gradlew build 这个命令会执行项目的构建过程,包括编译代码、运行测试等2. ./gradlew tasks 显示项目中所有可用的 Gradle 任务。3. ./gradlew clean 清除之前的构建输出原创 2024-11-07 14:50:02 · 1339 阅读 · 0 评论 -
安卓设备adb执行AT指令控制电话卡
AT 指令通常以 “AT” 作为开头,后面跟着具体的指令参数,以回车换行符(\r\n)结尾。例如,发送 “AT” 指令后,如果设备正常响应,会返回 “OK”。在 Wi-Fi 模块、蓝牙模块等其他通信模块中,也有相应的 AT 指令集来控制其功能,如 ESP32 模块的 AT 指令集可用于配置 Wi-Fi 连接、蓝牙连接等。获取到控制sim卡的/dev/xxx设备后,就可以用adb向它发送AT指令控制SIM 电话卡,发送AT指令。原创 2024-11-02 10:50:29 · 2975 阅读 · 0 评论 -
Android待机问题与内存泄露日志定位及bugreport获取分析
安卓 bugreport 是 Android 系统生成的错误报告文件,它可以帮助开发者和技术支持人员诊断和解决系统或应用程序出现的问题。1. 分析bugreport,定位唤醒源,判断是否有ANR。2. 分析安卓log,定位待机唤醒功耗问题,判断是否有内存泄露。原创 2024-11-02 10:45:56 · 1682 阅读 · 0 评论 -
Android Framework SIM卡PIN码解锁代码流程
SIM卡打开PIN码锁定后,插入SIM卡,或插入后重启手机,会弹出一个锁定窗口,要求输入PIN码解锁手机屏幕。本文讲述是安卓Framework中的代码是如何实现这个锁定与解锁的。。SIM PIN解锁主要是通过verifyPasswordAndUnlock()函数实现的,它会对输入的PIN码进行校验,如果不对会提示错误,如果正确解锁窗口会自动消失进入系统。原创 2024-10-26 15:35:30 · 1678 阅读 · 0 评论 -
Android Framework定制sim卡插入解锁pin码的界面
本文介绍如何在安卓framework原生代码中个性sim卡pin码的窗口样式。以下介绍怎么在手机上开启锁定SIM卡并设置pin码。如图打开SIM卡锁定并后,再插入SIM会弹出窗口,要求输入pin码。重启开机锁屏画面也是显示这个:可以根据提示文本来定位代码在哪。find frameworks/bas原创 2024-10-23 15:02:49 · 1635 阅读 · 0 评论 -
Android Framework关闭触摸振动
修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml。安卓手机由底部往上滑时,会有震动,然后进入Recents多任务,其触发震动调用的代码。def_haptic_feedback值从true改成false关闭触摸时振动功能。performHapticFeedback函数中调用是vibrate。原创 2024-10-21 12:20:47 · 547 阅读 · 0 评论 -
Android Framework定制navigationBar显示
下面这个修改是隐藏navigationBar的三键与手势横线,前面我们修改的是设置为手势模式,这里虽然隐藏了手势横线的显示,但是手势模式中的左右滑退出的功能是还存在的。在安卓系统中,“config_navBarInteractionMode” 是一个特定的配置参数,用于设定安卓设备导航栏的交互模式。0 3按键导航 底部有3个按键。1 2按键导航 底部有2个按键。2 手势导航 底部有一条横线。下面的修改是设置默认为手势导航模式。控制手势横线的显示可以通过这条语句。原创 2024-10-18 10:45:01 · 1125 阅读 · 0 评论