dalvik

android系统架构图及各层介绍

ε祈祈猫儿з 提交于 2020-12-18 04:10:21
此技术文档主要是从基础了解 Android 系统 架构 ,便于对以后开发形成一些基本应用架构。 android 的系统架构采用了分层架构的思想,如图1所示。从上层到底层共包括四层,分别是应用程序程序层、应用框架层、系统库和Android运行时和 Linux 内核。 图1:Android系统架构图 每层功能简要介绍如下: 一 应用程序层 该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用 Java 语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。 二 应用程序框架层 该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。XMPP((Extensible Messaging and Presence Protocol可扩展通讯和表示协议,前称Jabber [1] )是一种以 XML 为基础的开放式 实时通信

字节跳动团队发布Android Framework笔记,知乎上已获万赞

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-18 02:10:55
Android Framework 的知识有多重要,其广泛的应用在各个领域。像掉帧监控,函数插装,慢函数检测,ANR 监控,启动监控,都需要对 Framework 有比较深入的了解,才能知道怎么去做监控,利用什么机制去监控,函数插桩插到哪里,反射调用该反射哪个类哪个方法哪个属性 另外 Framework 作为 Android 框架层,为 App 提供了众多 API 去调用 ,但是很多机制都是 Framework 包装好了给 App 来用的,如果不知道这些机制的原理,那么很难去在这基础上做优化。 举个例子,如果你了解 Android App 的启动机制,优化启动速度的时候会更得心应手: 定制什么样的 StartingWindow;什么时候可以拿到图片的宽高;DelayLoad 怎么做才会更合适;Service 什么时候启动可以不影响启动速度;Activity onResume 回调的时候真的可见了么?Redex 为什么会加快应用启动速度? 再比如我们经常说的 Handler,MessageQueue,Looper。看源码你就可以更好的理解那些概念: ThreadLocal 做什么的;Thread 和 Handler 的关系;为什么不能在子线程更新 UI? 还有很多栗子,这里就不一一论述学习Android Framework的重要性了。 如何学习Android Framework

Android 9.0 Zygote 启动流程

风格不统一 提交于 2020-12-06 10:00:05
极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要介绍 Android Zygote 启动分析 知识点,通过阅读本篇文章,您将收获以下内容: 一、 Android 系统基本服务 二、虚拟机创建和第一个Java 程序引导 三、Dalvik 虚拟机基本配置 四、Zygote 启动流程 五、Zygote 启动分析 六、Zygote 创建system_server主要方法 七、Zygote 创建System_server 分析 八、Zygote 创建应用 九、Zygote 创建应用流程 十、Zygote 预加载资源 十一、Zygote 预加载的目的 十二、优化Zygote 启动方法: 线程池 十三、fork SystemServer Zygote 服务时通过 init.rc 进程启动的, Zygote 的 classname 为 main . init.rc 文件配置代码如下: ... ... on nonencrypted class_start main class_start late_start on property:sys.init_log_level=* loglevel ${sys.init_log_level} ... ... 详细可以参考 init.rc 启动分析。 Android 9.0 系统启动流程 一、 Android 系统基本服务 Android

Android系统的启动流程

自作多情 提交于 2020-10-29 20:54:29
Android系统的启动,主要是指Android手机关机后,长按电源键后,Android手机开机的过程。从系统角度看,Android的启动程序可分为: 1、bootloader引导 2、装载与启动Linux内核 3、启动Android系统 · 3.1、启动Init进程 · 3.1、启动Zygote · 3.1、启动SystemService · 3.1、启动Launcher 一、Bootloader启动 开机,开机就是给系统开始供电,此时硬件电路会产生一个确定的复位时序,保证 CPU是最后一个被复位的器件,为什么CPU要最后被复位呢?因为,如果CPU第一个被复位,则当CPU复位后开始运行时,其他硬件内部的寄存器状态可能还没有准备好,比如磁盘或者内存,那么久可能出现外围硬件初始化错误。当正确完成复位后,CPU开始执行第一条指令,该指令所在的内存地址是固定的,这由CPU的制造者指定。不同的CPU可能会从不同的地址获取指令,但这个地址必须是固定的,这个固定地址所保存的程序往往被称为"引导程序(BootLoader)",因为其作用是装载真正的用户程序。而U-boot的启动过程大致上可以分为两个阶段: · 第一阶段:汇编代码U-boot的第一条指令从cpu/armXXX/start.S文件开始 · 第二阶段:C代码从文件/lib_arm/board.c的start_armboot()函数开始

工作7年,面试失败101次,10月腾讯我凉在一面,没脸见人:连这些Android核心问题都不懂?

与世无争的帅哥 提交于 2020-10-25 01:58:56
做了7年Android,面试过上百家公司,我终于总结出一番道理,那就是空有技术,不懂面试,照样找不到好工作! 90%的面试者凉在一面! 从难度上说,第一轮面试不会很难,题目大多是面试官一早想好,主要只考核基础问题。但可怕的是在整个面试过程中,就属这个环节刷掉的人最多! 很多面试者的技术能力很强,却被无限放大了某个小问题,对最新技术的稍不敏感,对基础知识的微小疏漏,都可能是致命的。 如果能够在面试之前,对面试题目已经做好充分理解,先一步做好你的正确答案,一定能让面试官对你有不一样的评价! 想快速拿到大厂的高薪offer,你要先清楚大厂会考你什么问题,我分析了众多企业对于Android开发工程师的需求,总结了这套出镜率最高的面试题! 一、常规知识点 1、 Android类加载器 在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并、优化,然后再生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,在早期的Android应用开发中,如果不对Android应用进行分dex处理

Android平台dalvik模式下java Hook框架ddi的分析(1)

人走茶凉 提交于 2020-10-02 08:48:15
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/75710411 一、前 言 在前面的博客中已经学习了作者crmulliner编写的,针对Android系统的跨进程 inline Hook的实现即Android native Hook框架adbi的实现。Android Hook框架adbi主要是针对的Android的native函数进行inline Hook操作,那么如果需要对Android系统中Java编写的函数进行Hook,又该怎么操作呢?作者crmulliner后面又实现了针对Android的java函数进行Hook的框架ddi。adbi Hook框架和ddi java Hook框架的实现流程都差不多,首先实现root权限下Android跨进程的so注入,在so库文件被加载注入到目标进程中时,调用该so库文件的构造函数有一次代码执行的机会,利用这一次代码执行的机会既可以进行针对Android系统底层native函数的inline Hook或者.got Hook等,也可以进行针对Android系统的java函数进行dalvik Hook或者art Hook。Android平台的所有跨进程Hook都是基于Android系统root权限下的so注入和一次代码执行机会来实现的,只要能实现Android的跨进程注入

来点干货 | Android 常见内存泄漏与优化(二)

纵饮孤独 提交于 2020-09-28 03:58:33
作者 | 无名之辈FTER 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 在昨天的 《Android 内存泄漏问题多多,怎么优化?》 一文中,我们详细阐述了Java虚拟机工作原理和Android开发中常见的内存泄漏及其优化方法,本文将在此基础上继续学习Android虚拟机发展历程、Dalvik/ART的运行时堆、Dalvik/ART启动流程以及常见的内存分析工具的特点和使用方法,包括Android Profiler、MAT、LeakCanary等。 Android虚拟机:Dalvik和ART Dalvik是Google特别设计专门用于Android平台的虚拟机,它位于Android系统架构的Android的运行环境(Android Runtime)中,是Android移动设备平台的核心组成部分之一。类似于传统的JVM,Dalvik虚拟机是在Android操作系统上虚拟出来的一个“设备”,用来运行Android应用程序(APP),主要负责堆栈管理、线程管理、安全及异常管理、垃圾回收、对象的生命周期管理等。在Android系统中,每一个APP对应着一个Dalvik虚拟机实例。 Dalvik虚拟机支持.dex(即"Dalvik Executable")格式的Java应用程序的运行,.dex是专为Dalvik设计的一种压缩格式,它是在

Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

巧了我就是萌 提交于 2020-08-20 06:37:16
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客《 Android平台dalvik模式下java Hook框架 ddi 的分析(1) 》中,已经分析了dalvik模式下 ddi 框架Hook java方法的原理和流程,这里来学习一下ddi框架代码中涉及到的 dex文件的注入和调用。将一个Android的so库文件跨进程注入到另一个进程中,在so库文件的实现里,我们可以做很多的事情,例如:inline Hook,java方法的Hook,dex文件的注入和调用,ndk的jni函数的Hook等等。 1 .ddi框架在进行dex文件的注入和调用是在原来dalvik模式下java方法Hook的基础上修改过来的,在 hijack注入工具将android so库文件注入到目标pid进程时实现android的inline Hook操作,为了保证android的inline Hook操作的顺利执行,需要为注入到目标pid进程中android so库文件定义 .init段或者.init_array段的构造函数,如下图中的my_init构造函数;在inline Hook操作的自定义函数my_epoll_wait里进行dalvik虚拟机模式下的java方法Hook操作。 代码的流程梳理如下: 1.

Android终端系统APP应用性能测试之响应速度&流畅度

淺唱寂寞╮ 提交于 2020-08-18 21:35:00
Android性能测试的基础,给大家介绍下测试思路! 响应速度: 是指终端中的APP/应用的启动时间 (包含冷启动和热启动 ,补充概念:”冷启动”:是指APP/应用第一次开启;”热启动”:是指APP/应用第二次以后开启;); 这里的启动方式有两种:1.人工手动点击打开;2.通过命令启动该应用;(这两者启动肯定是有误差的,实际上在手机面向客户,所以经常采用人工启动应用开始计时) 测试方法1: 我们可以采用秒表计时方式,从人点击开始计时到应用打开后计算时间,但是这种计时方式是最最不准确的,误差和错误非常大,一般这种方法不推荐; 更精准点的方法是借用仪器,类似高速摄像机,误差可以减少至毫秒级,有录像和截图,从截图和录像中,从你手机中开始点击的那一刻开始计算,而且可以直观看到用户主观的感受,非常推荐这种方式,即准确又接近用户体验,但是这种仪器非常昂贵,几十万一台不等。 测试方法2: 通过我们终端本身日志或logcat,查看应用的启动时间,可这种启动方式也是有点误差,但是误差也很小,不比借用仪器精确。 测试方法3: 通过第三方工具/APK(你有能力可以自己写一个),网上看有没有相关的APK下载,这个是最简单的,但不知道准确率如何,只能用于参考; 测试方法4: 通过命令和脚本去监听应用的启动时间,这种方法常适用于该应用是通过命令启动的,如: adb shell am start -w com

阿里早期Android加固代码的实现分析

╄→尐↘猪︶ㄣ 提交于 2020-08-18 05:42:55
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/78320445 看雪上有作者(寒号鸟二代)将阿里移动早期的Android加固进行了逆向分析,得到了能够运行成功的NDK代码,主要是基于第2界阿里移动破解大赛的apk逆向分析出来的,文章的原地址《 阿里早期加固代码还原4.4-6.0 》。周末有空仔细阅读和分析了一下作者寒号鸟二代给出的逆向还原的代码,发现阿里移动的Android加固在dalvik虚拟机模式下dex文件的加载方案和看雪上的一些作者给出的方案一样,具体可以参考桃园小七的博客《 APK加壳【2】内存加载dex实现详解 》;在Art虚拟机模式下,鉴于Art虚拟机的复杂和兼容性考虑,dex文件的加载方案做不是很底层。尽管Android加固的原理分析已经比较多了,但是为了进一步感受Android加固的产品化,还是有必要学习一下阿里移动加固早期Android加固的代码实现。 1. 阿里移动早期Andorid加固外壳apk应用java层代码的实现如下,为了增加apk应用的逆向难度,Android加固的外壳apk应用的Application类的代理实现子类StubApplication的成员函数attachBaseContext和成员函数onCreate的实现被放在Native层