Activity启动流程分析

Activity启动流程分析

本文主要介绍Activity的启动过程和过程中主要涉及的类。如果你跟随上一篇文章,成功编译了Android源码,可以动手跟本篇文章一步一步调试分析整个启动过程。没有编译源码,也可以看看android.googlesource,这里也有源码。

主要对象功能介绍

zygote进程和SystemServer进程

android是基于Linux系统的,而在linux中,所有的进程都是由init进程直接或者是间接fork出来的,zygote 进程也不例外。

每一个App其实都是

  • 一个单独的dalvik虚拟机
  • 一个单独的进程

Android系统开启新进程的方式,是通过fork第一个zygote 进程实现的。所以说,除了第一个zygote进程,其他应用所在的进程都是zygote的子进程。

Read More

Share Comments

Mac下Android源码编译(AOSP)

Mac下源码编译

作为一名安卓开发人员,有能力阅读Android源码,是向高手进阶的重要一步。
本文介绍在Mac系统下,进行Android源码编译需要的操作。

编译需要的步骤

android源码编译的四个流程: 1.搭建编译环境; 2.源码下载; 3.编译源码; 4运行.
下文也将按照该流程讲述.

搭建编译环境

使用本地工作环境来编译 Android 源文件,需要使用 Linux 或 Mac OS。目前不支持在 Windows 环境下进行编译。

Read More

Share Comments

Android免root实现hook系统服务拦截方法

本文转载自博文:Android系统篇之—-免root实现Hook系统服务拦截方法,结合最新开源的滴滴插件化方案 VirtualApk 对hook系统服务进行分析。

360之前开源了一款插件框架 Droid Plugin。与滴滴同一天,360又开源了一款插件框架 RePlugin

有关新闻介绍在这里:https://www.itcodemonkey.com/article/278.html
https://www.itcodemonkey.com/article/277.html

关于360两款插件框架有什么不同,可以查看RePlugin里的readme

本文简单结合VirtualApk源码来记录实现hook系统服务方法。

Android免root实现hook系统服务拦截方法

Binder机制回顾

Read More

Share Comments

Android Binder机制分析(二)

背景

上篇文章分析到了Binder机制,分别介绍了自定义AIDL服务和调用系统的远程服务和他们之间的区别。
本文承接上篇文章,继续介绍ServiceManager和系统服务的注册流程,最后对Binder机制进行分析。

关于系统服务的注册流程,大都转载自这篇文章

服务大管家ServiceManager

ServiceManager.java的源码可以在谷歌源码中看到,点击这里

上篇文章末尾提到,系统服务的IBinder对象都是由ServiceManager统一管理的。为什么这么说呢,先看下ServiceManager.getService方法:

Read More

Share Comments

Android Binder机制分析(一)

背景分析

最近在学习Android非侵入Hook机制,

6月30日,360开源RePlugin,安卓进入“全面插件化”时代:https://www.itcodemonkey.com/article/278.html

同一天,滴滴开源Android端插件化框架VirtualAPK:https://www.itcodemonkey.com/article/277.html

然后本人发现竟然可以不在清单文件中注册就可以启动Activity,还有这种操作?哈哈。后面会有单独的文章介绍这种骚操作。

在搜索中发现了这篇博客,
Android系统篇之—-Binder机制和远程服务调用机制分析
。本文大部分转载自原来博客,结合自己的分析,是研究Hook机制前的知识储备。

Android中远程服务调用分析

简单介绍,跨进程调用一个远程服务需要下面这几步:

Read More

Share Comments

Handler替代TimerTask

Handler替代TimerTask

原文来自:http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/

作者文中提到,使用TimerTask更新GUI,debug看起来可以,但实际上根本不起作用。
同时作者发现,使用handler可以得到更好的表现。

下面是一个例子,使用handler在100ms后启动一个Runnable:

private Handler handler = new Handler();
handler.postDelayed(runnable, 100);

下面代码里有一个小技巧,实现每隔100ms运行一次Runnable,就像TimerTask的scheduleAtFixedRate()方法:

Read More

Share Comments

Android架构师积累

Android架构师积累 ——By 高焕堂

“-Oriented”的涵意
◎ ”-Oriented”意味着一种信仰 。
◎ ”Object-oriented”相信任何软件都是
由对象所构成的,而且Nothing else 。

”-Driven”的涵意; 例如:Model-driven、Use Case-driven
– 其实”-driven”是”引导”,而不是大家常说的”驱动”。
– 就向北极星引导我们,指出方向而已。也像汽车司机(Driver)只是引导汽车方向,并没有去驱动汽车;而是引擎才是驱动汽车。

“-Centered”的涵意; 例如:Architecture-centered、 Architecture-centeric
–一切软件开发的活动都围绕着架构,就像盛诞节的糖果和礼物都挂在圣诞树上一样。

卡榫函数

• 所谓「卡榫(Hook)」,就是用来接合两个东西的接口。如果两个东西于不同时间出现,则一方会预留虚空,给予另一边于未来时刻能以实体来填补该空间,两者虚实相依,就密合起来了。设计优良的卡榫,可以让实体易于新陈代谢、抽换自如(Plug and Play, 俗称PnP)。

Read More

Share Comments

注解在Android中的应用

注解是Java语言的特性之一,它是在源代码中插入标签,这些标签在后面的编译或者运行过程中起到某种作用,每个注解都必须通过注解接口 @Interface 进行声明,接口的方法对应着注解的元素。

在上一篇文章JSR-330和assertion(断言)介绍中介绍了Java中的JSR-330 规范,这个规范就是使用注解的方式。

这篇文章主要介绍注解在Android中的应用。

Andorid中的应用

JSR-330规范只发布了规范 API 源码,主要是面向依赖注入使用者,而对注入器实现、配置并未作详细要求。
该规范主要配合依赖注入框架来使用。在Android中的依赖注入框架有 ButterKnife 和 Dagger2。下面简单分析 ButterKnife 的应用。

Read More

Share Comments