安卓逆向_5 --- Android 学习

 

Android 之 四大组件、六大布局、五大存储:https://blog.csdn.net/freeking101/article/details/105377197

 

安卓(Android)动态创建多个按钮并添加监听事件:https://www.jb51.net/article/88036.htm
安卓按钮添加监听的三种方法:https://www.cnblogs.com/linfenghp/p/5373754.html

 

 

Android系统框架简介

 

哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=21

 

 

Android开发入门教程:7天玩转安卓APP开发

 

http://c.biancheng.net/android/

 

 

Android 教程

 

https://www.runoob.com/android/android-tutorial.html

 

https://www.runoob.com/w3cnote/android-tutorial-intro.html

 

 

黑马程序员

 

http://yun.itheima.com/course/c57.html

 

 

慕课

 

https://www.imooc.com/search/?type=course&words=Android

 

 

1.Dex加载流程:(安卓源代码)
Davlivk虚拟机加载dex文件
Java层 Dex 加载流程:BootClassLoader ---> PathClassLoader ----> DexClassLoader
Native层 Dex 加载流程:libdvm.so (重编译 system.img)---> OpenDexFileNative

 

 

Android Application 启动流程分析( 点击图标,APP加载流程

 

From:https://www.jianshu.com/p/a5532ecc8377

译者注:
原文分成两个部分, 链接如下:
http://multi-core-dump.blogspot.com/2010/04/android-application-launch.html
http://multi-core-dump.blogspot.com/2010/04/android-application-launch-part-2.html
本文合二为一, 章节标题由译者加注.

 

 

1、App 基础理论

 

要想优化 App 启动时间,第一步就是了解 App 启动进程的工作原理。 有几个基础理论:

Android Application 与其他移动平台有两个重大不同点:

  1. 每个Android App 都在一个独立空间里,意味着其运行在一个单独的进程中,拥有自己的VM,被系统分配一个唯一的 user ID。
  2. Android App 由很多不同组件组成,这些组件还可以启动其他 App 的组件。因此,Android App 并没有一个类似程序入口的 main() 方法。

Android Application组件包括:

  • Activities: 前台界面, 直接面向User, 提供UI和操作.
  • Services: 后台任务.
  • Broadcast Receivers: 广播接收者.
  • Contexnt Providers: 数据提供者.

Android进程与Linux进程一样。默认情况下,每个 apk 运行在自己的 Linux 进程中。 另外,默认一个进程里面只有一个线程---主线程。这个主线程中有一个 Looper 实例,通过调用 Looper.loop() 从 Message队列里面取出 Message 来做相应的处理。

那么,这个进程何时启动的呢?

简单的说,进程在其需要的时候被启动。任意时候,当用户或者其他组件调取你的 apk 中的任意组件时,如果你的 apk 没有运行,系统会为其创建一个新的进程并启动。通常,这个进程会持续运行直到被系统杀死。关键是:进程是在被需要的时候才创建的。

举个例子,如果你点击 email 中的超链接,会在浏览器里面打开一个网页。Email App 和 浏览器App 是两个不同的App,运行在不同的进程中。这次点击事件促使 Android 系统去创建了一个新的进程来实例化浏览器的组件。

首先, 让我们快速看下Android启动流程. 与众多基于Linux内核的系统类似, 启动系统时, bootloader启动内核和init进程. init进程分裂出更多名为"daemons(守护进程)"的底层的Linux进程, 诸如android debug deamon, USB deamon等. 这些守护进程处理底层硬件相关的接口.

随后, init进程会启动一个非常有意思的进程---"Zygote". 顾名思义, 这是一个Android平台的非常基础的进程. 这个进程初始化了第一个VM, 并且预加载了framework和众多App所需要的通用资源. 然后它开启一个Socket接口来监听请求, 根据请求孵化出新的VM来管理新的App进程. 一旦收到新的请求, Zygote会基于自身预先加载的VM来孵化出一个新的VM创建一个新的进程.

启动Zygote之后, init进程会启动runtime进程. Zygote会孵化出一个超级管理进程---System Server. SystemServer会启动所有系统核心服务, 例如Activity Manager Service, 硬件相关的Service等. 到此, 系统准备好启动它的第一个App进程---Home进程了.


 

2、启动App流程

 

一个 APK 只有一个 Application。每个 Apk 运行时都需要有一个 Application对象,Application对象执行 onCreate方法时APP就开始运行

用户点击 Home 上的一个 App 图标,启动一个应用时:

Click事件会调用startActivity(Intent), 会通过Binder IPC机制, 最终调用到ActivityManagerService. 该Service会执行如下操作:

  • 第一步通过PackageManager的resolveIntent()收集这个intent对象的指向信息.
  • 指向信息被存储在一个intent对象中.
  • 下面重要的一步是通过grantUriPermissionLocked()方法来验证用户是否有足够的权限去调用该intent对象指向的Activity.
  • 如果有权限, ActivityManagerService会检查并在新的task中启动目标activity.
  • 现在, 是时候检查这个进程的ProcessRecord是否存在了.

如果ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity.

 

2.1 创建进程

ActivityManagerService调用startProcessLocked()方法来创建新的进程, 该方法会通过前面讲到的socket通道传递参数给Zygote进程. Zygote孵化自身, 并调用ZygoteInit.main()方法来实例化ActivityThread对象并最终返回新进程的pid.

ActivityThread随后依次调用Looper.prepareLoop()和Looper.loop()来开启消息循环.

流程图如下:

 

2.2 绑定Application

接下来要做的就是将进程和指定的Application绑定起来. 这个是通过上节的ActivityThread对象中调用bindApplication()方法完成的. 该方法发送一个BIND_APPLICATION的消息到消息队列中, 最终通过handleBindApplication()方法处理该消息. 然后调用makeApplication()方法来加载App的classes到内存中.

流程如下:

 

2.3 启动Activity

经过前两个步骤之后, 系统已经拥有了该application的进程. 后面的调用顺序就是普通的从一个已经存在的进程中启动一个新进程的activity了.

实际调用方法是realStartActivity(), 它会调用application线程对象中的sheduleLaunchActivity()发送一个LAUNCH_ACTIVITY消息到消息队列中, 通过 handleLaunchActivity()来处理该消息.

假设点击的是一个视频浏览的App, 其流程如下:

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为公布车联网进展:年内将覆盖10万网联车

来源:车云摘要:实际上,华为进军汽车业的“野心”在于,提供车联网的相关解决方案。近年来,华为一直有向其他领域扩充的计划与布局,此前,其将与汽车厂商合作造车的传闻也一直不绝于耳。对此&#…

杨强:人工智能在企业的落地是一门大学问

来源:图灵人工智能摘要:人工智能到现在已经 60 多年,几起几落,它的兴衰也是围绕着 “AI是不是可以落地” 进行的。杨强香港科技大学计算机和工程学系主任国际人工智能联合会IJCAI理事长第四范式首席科学家杨强:一个AI&…

安卓逆向_6 --- Dalvik 字节码、Smali 详解

CTF Wiki smali:https://ctf-wiki.org/android/basic_operating_mechanism/java_layer/smali/smali/ 深入理解 Dalvik 字节码指令及 Smali 文件:https://blog.csdn.net/dd864140130/article/details/52076515 安卓逆向入门教程(二&#xff09…

NASA宣布在火星上发现了3种有机分子

图来自美国国家航空航天局来源:海外网摘要:美国国家航空航天局(NASA)召开新闻发布会,公开了火星新发现——好奇号火星探测器在火星上发现了有机分子。当地时间周四(7日),美国国家航空…

Chrome 爬虫插件 Web Scraper

Web Scraper 官网:https://webscraper.io/ 有关webscraper的问题,看这个就够了(建议收藏): https://zhuanlan.zhihu.com/p/34104808https://blog.csdn.net/biggbang/article/details/86251526 web scraper 入门到精通…

AI新方向: 科学家们暂停模仿“人脑”,公布了新路线图

来源:华尔街新闻摘要:科学家们一直致力于创造一种像人类一样思考的机器,但经过一段时间的探索,这一进程遇到了阻碍,他们基本上已经暂停了模仿“人脑”,转而研究已有发现的应用。科学家们一直致力于创造一种…

Hack.Chat 在浏览器里快速建立简单、随用即丢线上聊天室,无须下载安装软体

From:http://www.luoxiao123.cn/1554-6.html 有时候想跟其他使用者线上文字对话,但又不想把自己的联络资料(例如 Facebook 或即时通讯帐号)泄漏给对方,有些人可能会选择申请一个临时使用的帐号,但这未免也太…

CCAI2018 | 韩家炜:大规模文本数据挖掘的新方向

来源:中国人工智能学会现实中的大数据常常表示为一种非结构化,交叉和动态变化的文本数据。如何从大规模文本数据中抽取结构化知识是一个非常值得研究的任务。很多研究工作依赖于劳动密集型的数据标注,用有监督的方法去抽取知识。但是&#xf…

关于面试宝典中的各个问题(一)

1、关于浮点数1.0f在内存中的表示:是3f800000. 各个类型所占的字节数(byte),1byte8bit char 1 short 2 bool 1 int 4 long 4 float 4 double 8 long double 8 char * 4 int * 4 float * 4 以上是对于我的电脑,在典型…

安卓手机 Python 自动化( uiautomation、uiautomation2、weditor )

其他自动化工具或者框架: Airtest:https://airtest.readthedocs.io/zh_CN/latest/autojs:Auto.js快速入门实战教程:https://zhuanlan.zhihu.com/p/90065914appium:https://blog.csdn.net/freeking101/article/details…

揭秘|多伦多大学反人脸识别,身份欺骗成功率达99.5%

来源 :机器人大讲堂摘要:在一些社交媒体平台,每次你上传照片或视频时,它的人脸识别系统会试图从这些照片和视频中得到更多信息。比如,这些算法会提取关于你是谁、你的位置以及你认识的其他人的数据,并且&am…

安卓逆向_8 --- Android 调试工具 DDMS 和 Monitor ( 去掉 车来了 app 的广告 )

From:https://www.e-learn.cn/topic/3527658 Android SDK 中的 ddms 使用详解:https://blog.csdn.net/x83853684/article/details/80643131 ADB、Android Monitor、DDMS、HierarchyViewer、MAT、SysTrace、TraceView 性能分析工具使用大全:…

杂谈 | 微软复兴,它与苹果竟有这么多相似之处!

来源:网易智能摘要:且不要谈CEO们是否会让他们公司的“重生”,仅仅是成为一个成功帝国的好管家就已经是一项了不起的成就了。上周,微软市值超过了谷歌母公司Alphabet,成为继苹果(Apple)和亚马逊…

全能终端神器 --- MobaXterm 、开启 linux 远程桌面

From:https://cloud.tencent.com/developer/news/244102 官网地址:https://mobaxterm.mobatek.net MobaXterm 20.2_Professional.7z 下载地址:https://download.csdn.net/download/freeking101/12363312 MobaXterm 又名 MobaXVT&#xff0c…

教机器遗忘或许比学习更重要:让AI健忘的三种方式

大数据文摘出品编译:臻臻、Shan LIU、龙牧雪大部分人不会喜欢遗忘的感觉。回到家顺手把钥匙丢在一个角落就再也想不起来放在哪儿了,街角偶遇一个同事却怎么拍脑袋也叫不出他的名字……我们害怕遗忘,讨厌遗忘。然而,生而为人&#…

一套价值十万的微信公众号采集解决方案

From:http://www.blog2019.net/post/138 原文地址 相关阅读: 一套价值十万的微信公众号采集解决方案(免费送) 数据采集采集架构中各模块详细分析 基于大数据平台的互联网数据采集平台基本架构 教你一种1分钟下载1万个网页的方法,你学吗&a…

2018 年全球人工智能与机器人峰会将在深圳举办

来源:雷锋网摘要:第三届 CCF-GAIR —— 2018 年全球人工智能与机器人峰会,深圳,2018 年 6 月 29 日至 7 月 1 日。2018 年,AI 学术界与工业界的核心议题已演变为“基础理论技术创新”和“行业解决方案落地”&#xff0…

Grafana 使用教程 --- 开源的度量分析与可视化套件

原文链接:https://blog.csdn.net/bbwangj/article/details/81109615 Linux下使用GrafanaInfluxDBMongoDB实现爬虫可视化动态监控【附代码及详细教程】 https://www.jianshu.com/p/9de223e05a5e Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间…

美国重夺超算“头把交椅”,专家建议中国加快E级超算研制

“顶点”超算 橡树岭国家实验室网站图来源:科技日报摘要:美国能源部下属橡树岭国家实验室6月8日正式宣布,已研发出被命名为“顶点”的超级计算机。美国能源部下属橡树岭国家实验室6月8日正式宣布,已研发出被命名为“顶点”的超级计…

安卓逆向_9 --- log 插桩、Toast 弹窗、smali代码编写和植入 ( 好搜小说 )

From:https://www.bilibili.com/video/BV1UE411A7rW?p36 如果仅仅用 Smali 来分析代码,效果其实不如用 dex2jar 和 jd-gui 更直观,毕竟看反编译的 java 代码要更容易一些。 但 Smali 强大之处就是可以随心所欲的进行插桩操作。何为插桩&…