
Android
文章平均质量分 66
林多
座舱架构师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【性能优化】启用zram
摘要:ZRAM是一种内存压缩技术,可在系统内存不足时启用。启用方法包括:1)检查内核版本(需3.14+);2)初始化/dev/zram0并设置为swap分区;3)调整swappiness参数(100表示优先使用swap)。启用后可能增加CPU负载,需根据内存总量、内核支持等情况权衡使用。最后可通过/proc/swaps查看swap配置状态。原创 2025-06-15 17:28:49 · 359 阅读 · 0 评论 -
【Android】 BindService源码流程
Android的bindService流程解析:首先通过ContextWrapper.bindService()触发,转发至ContextImpl.bindServiceCommon()进行参数校验和ServiceDispatcher创建。接着调用ActivityManagerService.bindIsolatedService()进行权限校验,最终由ActiveService处理绑定逻辑。若服务已运行,直接回调connected();否则通过requestServiceBindingLocked()发起原创 2025-06-15 17:15:45 · 365 阅读 · 0 评论 -
【Android】输入路由
Android系统通过配置input-port-associations.xml文件,将输入设备与显示屏幕进行关联。该文件中的<port>标签指定输入设备接口和对应的显示端口。系统通过InputManagerService解析该配置文件,将关联信息传递到Native层,最终由InputReader获取配置并通知InputDevice。用户可通过adb shell dumpsys input命令查看当前配置关系。整个流程涉及XML解析、JNI回调等机制,实现了输入设备与显示设备的动态绑定。原创 2025-06-15 16:49:32 · 556 阅读 · 0 评论 -
【Android】System分区应用自带库与原生库同名问题分析
摘要系统应用崩溃问题分析:因/system分区应用自带库与原生库同名导致符号未找到错误。问题根源在于Android 7.0+强制系统分区应用使用AOSP原生库,忽略应用自带同名库。解决方案包括:1) 将应用移至/vendor分区;2) 重命名应用自带库;3) 使用系统统一版本库;4) 改用静态库。其中利用Android命名空间机制隔离是最佳实践方案。原创 2025-05-25 17:56:55 · 708 阅读 · 0 评论 -
【Android】非System用户下Persist应用不自动拉起
摘要:Android 11/12系统中,非System用户下Persist应用不自动拉起的问题源于UserController.java的限制,系统默认仅对User 0启动Persist应用。验证发现目标应用已正确安装且手动启动后能保持存活。解决方案包括监听开机广播实现自启动或修改AOSP代码。原创 2025-05-25 17:14:22 · 628 阅读 · 0 评论 -
【Android】VehiclePropertyAccess引起CarService崩溃
对于车辆属性的操作,在Android11版本,调用CarService注册监听属性,如果违反了其权限规定,会导致CarService崩溃。编译时,会被转成VehiclPropConfig,记录到每个车辆属性中。某应用调用 CarPropertyManager的registerCallback接口,注册监听属性ID。VehiclePropertyAccess属性,用于定义车辆属性的访问权限。违反VehiclePropertyAccess权限,导致的CarService崩溃。android12已修复该问题。原创 2025-03-23 14:43:36 · 461 阅读 · 0 评论 -
LOCAL_PREBUILT_JNI_LIBS使用说明
使用my_prebuilt_jni_libs,对my_embedded_perbuilt_jni_libs赋值(找出@对应的lib),并将my_embedded_perbuilt_jni_libs赋值给embedded_prebuilt_jni_libs(见上图)使用embedded_prebuilt_jni_libs对PRIVATE_EMBEDED_JNI_LIBS赋值。使用LOCAL_PREBUILT_JNI_LIBS,可用于控制APK集成时,其相关so的集成方式。比如,用于将APK中的so,原创 2025-02-05 15:40:50 · 727 阅读 · 0 评论 -
【Android】tombstone.pb文件解析
Android系统新增使用 proto buf格式保存的墓碑文件,本篇介绍如何解析tombstone.pb格式的文件。原创 2024-10-26 15:35:26 · 673 阅读 · 0 评论 -
【Android】JNI报错 non-zero capacity for nullptr pointer分析
Android程序报错。Abort message: 'JNI DETECTED ERROR IN APPLICATION: non-zero capacity for nullptr pointer: 1原创 2024-10-20 15:33:43 · 505 阅读 · 0 评论 -
【Android】CarWatchDog I/O监控服务
Car WatchDog中的IO Monitor,会监监控所有应用或服务的磁盘I/O用量。后续通过复现,抓取IO相应日志,发现出现问题时该应用,在一天内的写入量超过3GB,这个值已经超过系统的阈值配置。通过日志分析,发现应用被系统的 Car WatchDog(喂狗服务)Disable掉了。Car WatchDog中的IO Monitor,会统计一天内的I/O使用情况。关于Android源码部分的实现,可以感兴趣的可以阅读如下源文件。该日志说明,这款应用因为I/O使用超过阈值,被系统Kill。原创 2024-10-05 14:40:54 · 1103 阅读 · 0 评论 -
【Android】Android应用性能优化总结
最近大半年的时间里,大部分投在了某国内新能源汽车的某款AndroidApp开发上。由于该App是该款车上,常用+重点应用。所以车厂对应用性能的要求比较高。应用冷启动达到***ms。应用热(温)启动达到***ms应用内画面切换响应达到**ms应用内动效/动画/车模等交互时,画面不能有延迟感等等。应用不能有内存泄露,内存稳定在**MB诸如上面的内容,还有一些,就不详细列出来了。因为之前没有直接做过AndroidApp开发,之前大部分时间在做Framework/System开发。原创 2024-05-05 20:48:55 · 1240 阅读 · 1 评论 -
【Android12】Bugreport实现原理
Android Bugreport是一个用于记录和收集 Android设备上系统信息、日志和调试信息的工具。系统发生某些问题时,可以通过bugreport把系统当前时刻点(运行BugRepot的时刻)的系统相关的状态和信息都抓到一个zip中。通过bugreport可以帮忙开发人员分析和解决问题。Bugreport其实就是一系列的信息的汇总,包括日志、内存状态、进程信息、崩溃信息、服务状态等等。用一个大而近乎全的现场,来帮忙更好的分析问题。原创 2024-04-22 22:18:00 · 3418 阅读 · 2 评论 -
【Android】App通信基础架构相关类源码解析
应用通信基础架构相关类源码解析这里主要对Android App开发时,常用到的一些通信基础类进行一下源码的简单分析,包括:Handler、looper、runnable、Messagequeue、Thread。原创 2024-04-05 18:02:58 · 854 阅读 · 0 评论 -
【Android12】Android性能调优工具SystemServerTiming日志
SystemServerTiming是Android原生系统中一个日志标签,也就是tag为SystemServerTiming的日志,这类日志信息会输出到Logd和Trace系统中。可以通过Android logcat 或者 抓取Systrace的方式取得。原创 2024-03-03 19:03:00 · 1318 阅读 · 0 评论 -
【Java】Java类动态替换Class
基于上面的几个方法,可以实现动态替换Class对象。可以在代码中,利用上面的方式,将FunctionA动态替换为FunctionB。Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取ClassLoader。通过这个方法,可以获取类中所有声明的构造函数。要创建类对象的话,需要知道Class的构造函数,以及构造函数的各个参数。Method类提供的newInstance,可以用于创建并返回指定类的实例。通过Java的Class对象,可以实现动态替换Class。原创 2024-01-27 19:13:38 · 898 阅读 · 0 评论 -
【Android】VirtualDisplay创建流程及原理
【代码】【Android】VirtualDisplay创建流程及原理。原创 2023-10-15 14:34:40 · 10682 阅读 · 0 评论 -
【Hilog】鸿蒙系统日志源码分析
Hilog采用C/S结构,Hilogd作为服务端提供日志功能。Client端通过API调用(最终通过socket通讯)与HiLogd打交道。原创 2023-08-11 11:18:42 · 3425 阅读 · 0 评论 -
Android NTP时间同步源码分析
Android系统设置自动时间后,如果连接了可用的网络。会同步网络时间。这个处理是 NetworkTimeUpdateService完成的原创 2023-07-09 19:35:44 · 1519 阅读 · 0 评论 -
Android12启动崩溃 no namespace called
Android使用了基于命名空间的动态连接器,用来解决生态碎片及安全问题(关于这部分的可以自行搜索,下图为android官网给出的命名空间隔离图示)。Android12系统开机启动后,系统卡在开机界面,无法进去home。adb终端查看后,发现zyogte64启动崩溃。这个问题就是zyogte64这个进程在加载apex时,找不到com_android_art这个命名空间。代码定位(art/libnativeloader/native_loader.cpp)原创 2022-09-25 17:49:12 · 1774 阅读 · 0 评论 -
Android Init Language(RC文件)介绍
Android Init Language介绍基本概念什么是rc文件?Android Init进程用rc做了什么?相关内容Android RC文件应用Android rc文件语法解析Line-oriented语法组成ActionServicesOption和CommandTriggerimport基本概念什么是rc文件?rc文件,是用Android Init Language编写的特殊文件。用这种语法编写的文件,统一用".rc"后缀。所有rc文件,不会被编译/链接。它是配置文件,不是程序,是一种用于原创 2020-12-21 14:19:37 · 3587 阅读 · 0 评论 -
【Android】Android源码及系统目录结构分析
Android源码及系统目录结构分析Android源码(Android10)目录说明/artAnroid RunTime(Android运行环境)/bionicbionic C库(嵌入式专用的c库)/bootable启动引导相关代码/build系统编译规则(基础开发包的配置)/compatibilityAndroid兼容定义文档(cdd)/ctsCompatibility Test Suite(Google兼容测试标准)/dalvik原创 2020-12-07 19:39:07 · 2363 阅读 · 0 评论 -
【Android 】Prebuilt预编译
Android Prebuilt编译方式Android提供了Perbuilt编译方式,处理已经编译好的库或配置文件# perbuilt.mkBUILD_PERBUILT# multi_perbuilt.mkBUILD_MULTI_PERBUILTPerbuilt针对独立文件的操作。Multi_Perbuilt针对多个文件,对多个文件进行判断,调用Prebuilt依...原创 2020-04-19 21:46:52 · 5590 阅读 · 2 评论 -
模拟器System分区写保护取消
模拟器System分区写保护取消命令mount -o rw,remount /system参数含义# 用可读写模式,重新挂载-o rw,remount# 指定重挂载的分区/system同理:system分区以只读模式重新挂载mount -o rw,remount /system...原创 2019-02-24 17:47:56 · 1814 阅读 · 0 评论 -
undefined reference to `ANativeWindow_fromSurface'
问题:undefined reference to `ANativeWindow_fromSurface'也就是在链接时找不到函数ANativeWindow_fromSurface的定义解决:# 编译时,没有link对应so# libandroid.so# 编译时,在依赖的动态库列表中添加即可-landroid...原创 2018-09-24 15:14:46 · 3215 阅读 · 5 评论 -
Android.mk简单语法及小例
Android.mk简单语法及小例Android.mk同Makefile,用来指定项目编译时需要的源文件、头文件路径、依赖的lib(动态或静态),以及指定编译的版本(User\Eng\Test\Optional)、编译器的可选参数等等。其实,Android.mk可以简单理解为关键字和语法规范拼凑起来,用于编译的脚本语言。常用关键字LOCAL_PATH:=$(call my-dir)...原创 2018-09-23 17:03:08 · 2158 阅读 · 0 评论 -
adbd cannot run as root in production builds解决方法
问题:使用Android studio自带的AVD Manager开启模拟器后,运行 adb root,会出现如下提示: adbd cannot run as root in production builds解决方法:其实很简单。如果要以root权限,进入emulator的话。不要使用如下类型的Image创建emulator,否则会导致上述问题的发生。Google Play Int...原创 2018-03-22 14:08:09 · 5765 阅读 · 0 评论