Android
文章平均质量分 87
brahmsjiang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android HAL 服务排查实录:my-hal-service 启动后进程“消失“
HAL service "没起来"通常不是没起来,而是"起不来"。先查 init.svc.<name>区分故障模型,再看 crashbuffer 精确定位阶段(linker / SELinux / native crash);linker 阶段必上 readelf -d看 DT_RUNPATH。本次根因有二层:表面是库被放在 /vendor/lib64/my_hal/子目录、init.rc 未配 LD_LIBRARY_PATH;深层是 binary 的 DT_RUNPATH=/data/local/tmp/原创 2026-07-14 12:27:55 · 383 阅读 · 0 评论 -
从点击图标到 HomeActivity.onCreate() 完整链路
摘要:本文分析了Android应用启动流程,从触摸事件到Activity加载完成的完整生命周期。核心步骤包括:Launcher通过AMS启动进程,Zygote fork子进程执行ActivityThread.main(),AMS下发ClientTransaction触发Activity创建,最终完成ViewTree构建。关键对象(Activity、PhoneWindow、DecorView等)的创建时机与生命周期被详细标注。特别指出HomeActivity代码在步骤⑫被调用,此时View已通过setCont原创 2026-06-29 14:06:40 · 165 阅读 · 0 评论 -
Java类加载机制:Android开发者必须掌握的核心原理
Android类加载机制是开发者必须掌握的核心原理,涉及插件化、热修复、性能优化等关键技术。文章系统介绍了Java类加载的五个阶段(加载、验证、准备、解析、初始化)和内存布局,重点分析了Android特有的类加载体系(BootClassLoader、PathClassLoader、DexClassLoader)。通过实际案例演示了插件化开发、热修复实现和Multidex原理,并提供了性能优化方案和常见问题调试技巧。理解类加载机制能帮助开发者优化应用性能,实现动态加载功能,诊断类冲突问题,是进阶高级开发的必备原创 2026-04-14 09:15:54 · 333 阅读 · 0 评论 -
理解Android AOT编译与内存映射:从Zygote启动到页表权限隔离
Android系统通过AOT预编译机制实现启动加速,核心在于Zygote进程启动时使用mmap()将预编译的boot.art文件映射到内存。该文件包含Android框架核心类和ART运行时基础代码,以本地机器码形式存储。Zygote通过写时复制技术让所有应用进程共享同一份物理内存页,大幅提升启动速度和内存效率。现代操作系统采用共享内核空间页表设计,结合CPU特权级实现权限隔离,确保内核态不会直接执行用户空间代码。这种内存映射机制是Android性能优化的关键技术之一。原创 2026-04-10 16:44:15 · 451 阅读 · 0 评论 -
Java类加载机制解析:从JVM启动到双亲委派,再到Android的特殊实现
摘要:本文深入剖析了Java与C++在类加载机制上的本质区别。Java采用运行时动态加载,通过JVM的类加载器体系实现灵活部署;而C++则在编译时静态链接所有类定义。重点解析了Java类加载的五个阶段、双亲委派模型的安全机制,以及Android系统独特的类加载优化(如BootImage)。这种动态加载特性是Java语言灵活性的核心,同时也体现了与C++在"运行时灵活性vs编译时性能"上的设计哲学差异。文章还详细对比了标准JVM与Android运行时在类加载实现上的关键区别。原创 2026-04-10 16:15:25 · 495 阅读 · 0 评论 -
Application启动流程
谈到Android Application的启动流程,很多文章都是各种源码类和方法的一堆调用关系,这样的文章就算看一百遍,也只是云里雾里。源码得看,但是最好不要一下子深陷到源码的细节之中,不可自拔。这里站在前人的基础之上做一个总结。在说应用的启动流程之前,得先了解一下Android系统的启动流程,因为Application的启动是离不开系统的处理的。Android系统的启动流程BootLoader启动内核和init进程;init进程分裂出过个守护进程,如Android Debug Damon转载 2020-06-19 13:50:24 · 816 阅读 · 0 评论 -
NDK编译native程序(二)构建原生组件
接上一篇NDK编译native程序(一),ANT使用的build.xml指定了使用ndk-build来构建native so。<exec executable="/opt/android-ndk-r15c/ndk-build" dir="${basedir}/main/jni" > <arg value="V=1" /> <arg value="APP_BU...原创 2020-04-06 00:13:34 · 491 阅读 · 0 评论 -
NDK编译native程序(一)构建Java应用程序
Android原生开发包(NDK)是Android软件开发包(SDK)的相关工具集,用于Android平台上C++平台上的开发。使得开发人员能够使用机器代码生成的编程语言(C、C++、汇编)实现一些对代码性能要求较高的的模块并将其嵌入到Android的应用程序中。用原生组件(命令行)构建Android项目需要三步,第一步和第三步由ANT工具完成:构建Java应用程序 构建原生组件 将Ja...原创 2020-04-05 23:41:37 · 574 阅读 · 0 评论 -
JNI应用笔记(陆续更新)
实例引用,与一个数组和java.lang.Object类或它的子类的实例对应:jobject类引用,与java.lang.Class实例对应,它代表着类的类型:jclass通过对象实例获取类(以实例引用获得类引用):jobject callbackListenerjclass clazz = env->GetObjectClass(callbackListene...原创 2020-03-19 16:11:00 · 216 阅读 · 0 评论 -
使用adb devices命令,老是报error:device offline的错误
刚开始报error:devices not found重新安装adb 驱动。解决方法:adb kill-serveradb start-serveradb remount再使用adb devices和adb shell就可以使用android adb功能了。 ...转载 2019-11-20 09:16:36 · 1067 阅读 · 0 评论 -
Ubuntu搭建breakpad环境及查看dmp文件
1.随便建一个文件夹作为所有的目录,现在是dmp文件夹2.把obj/local/armeabi-v7a下的so和dmp文件复制到下面例如现在是libbreakpad_client.so和7f0a5ae5-4ea2-150e-55e9b70e-05c9ae40.dmp3.生成sym文件dump_syms libbreakpad_clien...转载 2018-09-30 14:18:57 · 791 阅读 · 0 评论
分享