android6.0源码目录简单分析

本文详细分析了Android 6.0源码中重要的几个目录:abi涉及应用程序二进制接口,包括ABI与API的区别;art探讨了Android运行时,包括Dalvik和ART的性能优化;bionic介绍了针对Android定制的系统底层库;bootable则关注启动引导相关组件。文章通过关键点解析,帮助读者理解Android系统的核心运作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录abi ==>应用程序二进制接口
    定义:应用程序和操作系统之间、 一个应用和它的库之间、 应用的组成部分之间的低接口
    
    ABI与API的区别:
        API定义了源代码和库之间的接口
        1、同样的代码可以在支持API的任何系统中编译
        2、ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行

    abi/cpp下目录:
        include:cxxabi.h、new、typeinfo
        src:
        Android.mk
        use_rtti.mk

    作用:
        abi规定了二进制文件的格式、内容,装载/卸载程序的要求,函数调用时的参数传递规则,寄存器、堆栈的使用

    实质:
        abi定义了运行时的兼容性问题
        api定义了静态状态下的兼容性问题



目录art==>Android Runtime
    Dalvik虚拟机通过以下方式提高性能
        1、Dex代码安装时或第一次动态加载时,odex化处理
        2、Android2.2版本提供了JIT机制提升性能
        3、提高硬件配置,如更多核CPU、更高频率CPU、更多的RAM

    1、Dalvik运行环境使用JIT来进行转译,应用每次运行的时候字节码都需要JIT转化为机器码——>拖慢应用的运行效率
    2、ART则使用AOT(Ahead Of Time)进行处理,会在应用程序安装完毕时,进行预先的基础性编译作业——>减去JIT运行时的机器码转化时间,应用的启动和执行都会变得更加快速

    ART
        优点:
            1、系统性能的显著提升
            2、应用启动更快、运行更快、体验更流畅、触感反馈更及时
            3、更长的电池续航能力
            4、支持更低的硬件
        缺点:
            1、更大的存储空间占用可能会增加10%~20%
            2、更长的应用安装时间
        总结:ART的功效就是“空间换时间”

    art目录下:
        compiler:主要负责Dalvik字节码到本地码的转换,编译为libart_compiler.so
        dex2oat:完成dex文件到oat文件的转换,编译为dex2oat
        runtime:Android ART运行时源代码,编译为libart.so
        oatdump:对oat文件进行分析并格式化显示出文件的组成结构
        jdwpspy:是java的调试支持部分,即JPWP服务端的实现

    ART——>基于Android4.4以后的版本,意味着最低的版本要求为Android4.4

    参考Blog:ART运行时无缝替换Dalvik虚拟机的过程分析
    
        关键点:
            1、ART虚拟机的启动过程
            2、Dex字节码翻译成本地机器码的过程

        分析关键1: ART虚拟机的启动过程
            Android系统在启动的时候创建Zygote进程充当应用程序孵化器,Zygote进程在启动的过程中又会创建一个Dalvik虚拟机
            Zygote进程是通过复制自己(也就是 fork )来创建新的应用程序进程,这意味着Zygote进程会将自己的Dalvik虚拟机也复制给应用程序进程
            ==>Android系统通过将ART运行时抽象成一个Java虚拟机,以及通过系统属性persist.sys.dalvik.vm.lib和一个适配层JniInvocation就可以无缝地将Dalvik虚拟机替换为ART运行

        分析关键2:Dex字节码翻译成本地机器码的过程
            1、dex字节码优化——>dey文件——>存放odex文件
            2、dex2oat——>dex字节码翻译成本地机器码——>oat文件——>存放odex文件

            oat:自定义的elf文件,里面包含的都是本地机器指令
                字段oatdata:存储原来打包在APK里面的dex文件
                字段oatexec:翻译dex文件里面的类方法得到的本地机器指令
            
            最终,APK运行时,生成的oat文件会被加载到内存中,并且ART通过里面的oatdata和oatexec段找到任意一个类的方法对应的本地机器指令来执行

        1、调用JNI接口FindClass加载com.android.internal.os.ZygoteInit类
        2、调用JNI接口GetStaticMethodID找到com.android.internal.os.ZygotInit类的静态成员函数main
        3、调用JNI接口CalStaticVoidMethod开始执行com.android.internal.ZygoteInit类的静态成员函数main的本地机器指令
        完成上述的步骤,开始运行ART虚拟机
        当然相关的信息存放在dex2oat工具生成的oat文件中,故需要通过分析oat文件才可深入理解上述内容

        详见:参考罗升阳Blog ART相关



目录bionic==>系统底层库
    针对Android系统定制的仿生C库、链接器等所在目录。Android并没有使用linux的glibc库,bionic C库针对嵌入式系统优化,添加了一些Android特定的函数API,同时大大减少库的体积,也避免了LGPL版权的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值