<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[thirdbro的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/thirdbro</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; thirdbro]]></copyright><item><title><![CDATA[Android Studio报错中文乱码]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/142213822</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/142213822</guid><author>thirdbro</author><pubDate>Fri, 13 Sep 2024 16:21:30 +0800</pubDate><description><![CDATA[没有studio64.exe.vmoptions的话会弹窗，创建一个即可；原本存在的话，在最下面添加。按两下Shift，查找Edit Custom VM Options并确认；3. Sync Gradle 重新同步一下；]]></description><category></category></item><item><title><![CDATA[【Android Framewrok】Handler源码解析]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140591346</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140591346</guid><author>thirdbro</author><pubDate>Sun, 21 Jul 2024 17:59:08 +0800</pubDate><description><![CDATA[Handler用简单的话概括：Looper开启了一个轮询消息队列，不断相对应的Handler进行分发消息的功能，而不同的Handler会对其进行发送消息，将消息塞到Looper的消息队列中。答：可以 / 一种使得异步消息可以被更快处理的机制答： 当MessageQueue为空或者目前没有需要执行的Message时会回调的接口对象。]]></description><category></category></item><item><title><![CDATA[【Android性能优化】Android CPU占用率检测原理和优化方向]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140557159</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140557159</guid><author>thirdbro</author><pubDate>Fri, 19 Jul 2024 18:31:17 +0800</pubDate><description><![CDATA[(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发生一次。]]></description><category></category></item><item><title><![CDATA[【Android性能优化】Android性能优化概览]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140557140</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140557140</guid><author>thirdbro</author><pubDate>Fri, 19 Jul 2024 18:29:13 +0800</pubDate><description><![CDATA[其实笔者做性能优化的经验不算很多，但是每个软件产品或者软件项目在开发时，都会经历性能优化的工作。按照作者的理解，我认为几个字以概括， 快、稳、省。]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 Android SystemServer 进程启动流程源码解析]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140491983</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140491983</guid><author>thirdbro</author><pubDate>Wed, 17 Jul 2024 16:07:56 +0800</pubDate><description><![CDATA[中看到， 传递给zygote的参数中， 含有systemserver的包名"com.android.server.SystemServer"，通过搜索此包名得知systemserver位置。主要也是负责启动各种服务和应用，通过过滤其中trace，可以看出大概启动了多个service或者manager，部分是根据配置是否启动的。方法进行类似埋点的操作，systemservice会将启动阶段通知到各个服务，各个服务能够根据不同阶段完成自己的一些车初始化工作。从代码中可以看到，启动到不同阶段的时候，会调用。]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 Android Zygote 进程启动流程源码解析]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140478938</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140478938</guid><author>thirdbro</author><pubDate>Wed, 17 Jul 2024 13:57:03 +0800</pubDate><description><![CDATA[在 userdebug 版本中，如果 persist.debug.dalvik.vm.jdwp.enabled 为 1，则所有应用均可使用 JDWP 和 ptrace 进行调试。题外话， 之前找zygote源码的时候，本来想直接通过进程名找这个模块的源码，结果发现根本没有zygote这个名字的命令。通过命令查找到对应的进程目录发现，原来的进程的名字当时编译为。通过上面传下来的参数，“com.android.internal.os.ZygoteInit”，可以得知Java层的包名，以此找到Java代码。]]></description><category></category></item><item><title><![CDATA[【Android开发技巧】Android系统编译out目录结构]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140476061</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140476061</guid><author>thirdbro</author><pubDate>Tue, 16 Jul 2024 20:29:58 +0800</pubDate><description><![CDATA[文章为Android系统编译后out目录树结构，系统版本为Android13，以供参考。]]></description><category></category></item><item><title><![CDATA[【Android开发技巧】如何通过进程找到所在目录？]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140476029</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140476029</guid><author>thirdbro</author><pubDate>Tue, 16 Jul 2024 20:28:55 +0800</pubDate><description><![CDATA[在开发和排查系统问题的时候，进场会遇到需要找进程所在目录的时候，在此记录一篇笔记。]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 Android Init 进程启动流程源码解析]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/140278026</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/140278026</guid><author>thirdbro</author><pubDate>Mon, 08 Jul 2024 20:31:33 +0800</pubDate><description><![CDATA[第一个阶段，第一个阶段主要做了一些挂载基本文件系统、设置环境变量等的操作，第二阶段则挂在了额外的文件系统，使用epoll实现了一个事件驱动型的功能，加载和执行.rc文件中的命令；在init.rc文件中， on zygote-start的地方， 写了start zygote， start是android内置的命令，在解析rc文件之前就已经将这些方法放到代码中了，命令会执行start方法，将zygote拉起来；PS：代码中epoll的使用和原理还不大懂，后续需要填坑…（哈哈，其实别的也很多不懂）]]></description><category></category></item><item><title><![CDATA[【Android经验技巧】 Android全部系统属性含义（长期更新中...）]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/139607132</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/139607132</guid><author>thirdbro</author><pubDate>Tue, 11 Jun 2024 19:35:30 +0800</pubDate><description><![CDATA[Android14所有系统属性含义， 持续更新中...]]></description><category></category></item><item><title><![CDATA[Android Studio配置离线gradle笔记]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/138488695</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/138488695</guid><author>thirdbro</author><pubDate>Mon, 06 May 2024 11:29:23 +0800</pubDate><description><![CDATA[我这里放置的在C:/Users/xxx/.gradle/wrapper/dists/gradle-8.7-all.zip。因为最近办公的电脑很卡，但是老是忘记离线配置gradle的操作步骤。因此编写一篇自己的笔记记录。将下载的gradle .zip放到本地目录；]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 Android Init 语言官网教程及中文翻译]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/138019266</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/138019266</guid><author>thirdbro</author><pubDate>Sun, 21 Apr 2024 04:03:40 +0800</pubDate><description><![CDATA[文章根据system/core/init/README.md对Android Init语言进行翻译；下面给出Init语言中文翻译和原文，翻译为机翻和个人翻译综合完成，如有错误欢迎提出纠正。]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 Kernel启动流程]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/138014912</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/138014912</guid><author>thirdbro</author><pubDate>Sat, 20 Apr 2024 23:14:18 +0800</pubDate><description><![CDATA[可以看到kernel启动的时候，进行了许多环境相关的初始化，如引导CPU、设置缓存、安全信息、内存管理、proc等虚拟文件系统初始化等等；这里主要功能包括等待kthreadd线程设置完成、执行内核初始化的可释放部分、完成异步初始化代码、释放初始化内存、最终化内核映射、设置系统状态为运行中等；然后尝试**执行一系列的init命令（二进制可执行文件），直到找到一个可行的初始化命令为止，**如果都失败，则会触发内核panic。在执行之前，打印出了一些要执行的命令和环境变量信息，以便进行调试和跟踪。]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 BootLoader - Little Kernel启动流程源码解析]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/137847501</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/137847501</guid><author>thirdbro</author><pubDate>Wed, 17 Apr 2024 01:44:45 +0800</pubDate><description><![CDATA[后文中的lk指 Little KernelAndroid启动会经过BootLoader阶段， BootLoader中， 挑选little kernel作为bootloader程序进行源码研究。当然也许多公司使用的是uboot，像作者公司许多项目也是使用uboot。lk官方源码中，没有集成高通、MTK平台的代码， 但是在github开源代码中，能够找到适配高通平台和MTK平台的lk，本文先是基于官方开源代码lk进行总体的分析， 然后对高通平台lk、MTK平台lk的不同部分进行分析；]]></description><category></category></item><item><title><![CDATA[Android常用签名方法和签名转换技巧]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/137801050</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/137801050</guid><author>thirdbro</author><pubDate>Tue, 16 Apr 2024 01:02:25 +0800</pubDate><description><![CDATA[利用网上开源项目：https://github.com/getfatday/keytool-importkeypair， 使用 keytool-importantkeypair工具， 将platform.pk8和platform.x509.pem 转成platform.keystore；使用命令在linux环境生成platform.keystore即可；生成platform.pem文件 --> 生成platform.p12文件 --> 生成platform.jks文件。]]></description><category></category></item><item><title><![CDATA[【Android系统启动】 Android14启动流程概览]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/137760423</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/137760423</guid><author>thirdbro</author><pubDate>Mon, 15 Apr 2024 02:08:00 +0800</pubDate><description><![CDATA[作为一个Android开发工程师，了解Android系统从上电到全功能启动的流程，是十分有必要的。这个对排查系统疑难问题、定制系统开发都十分有帮助。因此记录以下系列文章笔记。文章编写与2024年，基于AOSP官网主干代码ARM64b部分学习，按年份计算代码处于Android14~Android15中间。笔者水平有限，如存在谬误，欢迎指出纠正。]]></description><category></category></item><item><title><![CDATA[Android9超过2G升级包无法升级问题排查与解决方案]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/137760235</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/137760235</guid><author>thirdbro</author><pubDate>Mon, 15 Apr 2024 01:53:49 +0800</pubDate><description><![CDATA[metadata数据中的偏移量与升级包实际的偏移量对不上，这个偏移量其实指的是压缩包内文件数据(payload.bin)在文件（升级包）中的偏移量。系统打包的时候会将这个偏移量解析出来写在metadata中，而update_engine会根据metadata文件中定义的这个偏移量提取payload.bin，并判断payload.bin的前4个字节是不是’CrAU’，如果提取出来的payload.bin的前4个字节与’CrAU’不匹配，则证明偏移量错误，导致提取的payload.bin文件不正确；]]></description><category></category></item><item><title><![CDATA[进程CPU占用率过高排查流程笔记]]></title><link>https://blog.youkuaiyun.com/thirdbro/article/details/137759806</link><guid>https://blog.youkuaiyun.com/thirdbro/article/details/137759806</guid><author>thirdbro</author><pubDate>Mon, 15 Apr 2024 01:19:07 +0800</pubDate><description><![CDATA[可以看到其中占用较高的是线程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，多次调用中基本没有停顿。]]></description><category></category></item></channel></rss>