- 博客(18)
- 收藏
- 关注
原创 Android Studio报错中文乱码
没有studio64.exe.vmoptions的话会弹窗,创建一个即可;原本存在的话,在最下面添加。按两下Shift,查找Edit Custom VM Options并确认;3. Sync Gradle 重新同步一下;
2024-09-13 16:21:30 294
原创 【Android Framewrok】Handler源码解析
Handler用简单的话概括:Looper开启了一个轮询消息队列,不断相对应的Handler进行分发消息的功能,而不同的Handler会对其进行发送消息,将消息塞到Looper的消息队列中。答:可以 / 一种使得异步消息可以被更快处理的机制答: 当MessageQueue为空或者目前没有需要执行的Message时会回调的接口对象。
2024-07-21 17:59:08 1515
原创 【Android性能优化】Android CPU占用率检测原理和优化方向
(1 - 空闲态运行时间/总运行时间) * 100%Hz:Linux核心每隔固定周期会发出timer interrupt (0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。通过命令,可以查看当前系统的Hz。以某某项目为例,Hz为100。Tick:Tick = 1/Hz,即多久发出一次timer interrupt。以上述情况为例,则为10ms发生一次。
2024-07-19 18:31:17 1368
原创 【Android性能优化】Android性能优化概览
其实笔者做性能优化的经验不算很多,但是每个软件产品或者软件项目在开发时,都会经历性能优化的工作。按照作者的理解,我认为几个字以概括, 快、稳、省。
2024-07-19 18:29:13 380
原创 【Android系统启动】 Android SystemServer 进程启动流程源码解析
中看到, 传递给zygote的参数中, 含有systemserver的包名"com.android.server.SystemServer",通过搜索此包名得知systemserver位置。主要也是负责启动各种服务和应用,通过过滤其中trace,可以看出大概启动了多个service或者manager,部分是根据配置是否启动的。方法进行类似埋点的操作,systemservice会将启动阶段通知到各个服务,各个服务能够根据不同阶段完成自己的一些车初始化工作。从代码中可以看到,启动到不同阶段的时候,会调用。
2024-07-17 16:07:56 1423
原创 【Android系统启动】 Android Zygote 进程启动流程源码解析
在 userdebug 版本中,如果 persist.debug.dalvik.vm.jdwp.enabled 为 1,则所有应用均可使用 JDWP 和 ptrace 进行调试。题外话, 之前找zygote源码的时候,本来想直接通过进程名找这个模块的源码,结果发现根本没有zygote这个名字的命令。通过命令查找到对应的进程目录发现,原来的进程的名字当时编译为。通过上面传下来的参数,“com.android.internal.os.ZygoteInit”,可以得知Java层的包名,以此找到Java代码。
2024-07-17 13:57:03 806
原创 【Android开发技巧】Android系统编译out目录结构
文章为Android系统编译后out目录树结构,系统版本为Android13,以供参考。
2024-07-16 20:29:58 959
原创 【Android系统启动】 Android Init 进程启动流程源码解析
第一个阶段,第一个阶段主要做了一些挂载基本文件系统、设置环境变量等的操作,第二阶段则挂在了额外的文件系统,使用epoll实现了一个事件驱动型的功能,加载和执行.rc文件中的命令;在init.rc文件中, on zygote-start的地方, 写了start zygote, start是android内置的命令,在解析rc文件之前就已经将这些方法放到代码中了,命令会执行start方法,将zygote拉起来;PS:代码中epoll的使用和原理还不大懂,后续需要填坑…(哈哈,其实别的也很多不懂)
2024-07-08 20:31:33 825 1
原创 Android Studio配置离线gradle笔记
我这里放置的在C:/Users/xxx/.gradle/wrapper/dists/gradle-8.7-all.zip。因为最近办公的电脑很卡,但是老是忘记离线配置gradle的操作步骤。因此编写一篇自己的笔记记录。将下载的gradle .zip放到本地目录;
2024-05-06 11:29:23 851
原创 【Android系统启动】 Android Init 语言官网教程及中文翻译
文章根据system/core/init/README.md对Android Init语言进行翻译;下面给出Init语言中文翻译和原文,翻译为机翻和个人翻译综合完成,如有错误欢迎提出纠正。
2024-04-21 04:03:40 1209 1
原创 【Android系统启动】 Kernel启动流程
可以看到kernel启动的时候,进行了许多环境相关的初始化,如引导CPU、设置缓存、安全信息、内存管理、proc等虚拟文件系统初始化等等;这里主要功能包括等待kthreadd线程设置完成、执行内核初始化的可释放部分、完成异步初始化代码、释放初始化内存、最终化内核映射、设置系统状态为运行中等;然后尝试**执行一系列的init命令(二进制可执行文件),直到找到一个可行的初始化命令为止,**如果都失败,则会触发内核panic。在执行之前,打印出了一些要执行的命令和环境变量信息,以便进行调试和跟踪。
2024-04-20 23:14:18 1501
原创 【Android系统启动】 BootLoader - Little Kernel启动流程源码解析
后文中的lk指 Little KernelAndroid启动会经过BootLoader阶段, BootLoader中, 挑选little kernel作为bootloader程序进行源码研究。当然也许多公司使用的是uboot,像作者公司许多项目也是使用uboot。lk官方源码中,没有集成高通、MTK平台的代码, 但是在github开源代码中,能够找到适配高通平台和MTK平台的lk,本文先是基于官方开源代码lk进行总体的分析, 然后对高通平台lk、MTK平台lk的不同部分进行分析;
2024-04-17 01:44:45 1015
原创 Android常用签名方法和签名转换技巧
利用网上开源项目:https://github.com/getfatday/keytool-importkeypair, 使用 keytool-importantkeypair工具, 将platform.pk8和platform.x509.pem 转成platform.keystore;使用命令在linux环境生成platform.keystore即可;生成platform.pem文件 --> 生成platform.p12文件 --> 生成platform.jks文件。
2024-04-16 01:02:25 1162
原创 【Android系统启动】 Android14启动流程概览
作为一个Android开发工程师,了解Android系统从上电到全功能启动的流程,是十分有必要的。这个对排查系统疑难问题、定制系统开发都十分有帮助。因此记录以下系列文章笔记。文章编写与2024年,基于AOSP官网主干代码ARM64b部分学习,按年份计算代码处于Android14~Android15中间。笔者水平有限,如存在谬误,欢迎指出纠正。
2024-04-15 02:08:00 1906
原创 Android9超过2G升级包无法升级问题排查与解决方案
metadata数据中的偏移量与升级包实际的偏移量对不上,这个偏移量其实指的是压缩包内文件数据(payload.bin)在文件(升级包)中的偏移量。系统打包的时候会将这个偏移量解析出来写在metadata中,而update_engine会根据metadata文件中定义的这个偏移量提取payload.bin,并判断payload.bin的前4个字节是不是’CrAU’,如果提取出来的payload.bin的前4个字节与’CrAU’不匹配,则证明偏移量错误,导致提取的payload.bin文件不正确;
2024-04-15 01:53:49 1455 1
原创 进程CPU占用率过高排查流程笔记
可以看到其中占用较高的是线程19303、19307、20072、20058, 该4个线程线程名均有HwBinder,是HwBinder相关的线程。binder和vndbinder使用的是AIDL接口, hwbinder使用的是HIDL接口。在对外提供的接口上,加上binder pid和uid的打印。从top命令查看得知,CPU是8核的处理器, vehicle进程占用约50%, 按百分比计算约占用6%左右。修改、替换后打印logcat日志,得知调用的PID为19915, UID为0,多次调用中基本没有停顿。
2024-04-15 01:19:07 834
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人