对于android开发,实际上大部分工作都是在应用层,但为了体现"技术含量",以及"知其所以然",以便在遇到问题是不至于束手无策。因此有必要了解底层的工作机制。

由于android是开源的系统,因此学习其内部的工作机制是非常容易的,目前也有一些关于android源码分析的书籍。

我一直认为,应用层的开发和底层没什么太大的关系,不过有一次因为应用权限的问题,也算是对android framework层有一些了解了,借助一本源代码分析的书籍了解android的工作原理并没有想象中那么困难。

与其他地方不同是本人使用了鲜为人知的代码注入技术(并非依赖注入),对于具有root权限的android设备,只需要往系统进程中注入一个.so文件,再用这个.so文件去获取jvm执行环境,就可以加载java代码,这样就将自己的java代码注入到系统进程中。

注入java代码以后就可以在framework层执行操作了,因此我们成功的从应用层穿越到android底层。

当然如果要在framework层执行自己编写的代码,直接替换系统文件也是可以的。一种方式是下载安卓源代码,构建编译环境,还有一种方式是对系统中的jar文件进行反编译在编译回去这也是可行的。参考(未测试):http://dss16694.iteye.com/blog/1436466

代码注入参考:http://blog.csdn.net/jiangwei0910410003/article/details/40949475

当然替换系统文件和代码注入都需要有root权限,最新的android默认启用了SELinux,获取root权限可能会遇到麻烦,因此最好是使用4.3以下的系统来研究。

android底层是基于linux的,系统开机后,首先运行的是linux,android的运行环境从app_process的可执行文件开始运行,由init.rc指定文件路径以及启动参数。app_process中启动了jvm,随后就进入了java的世界,java的程序都大部分都放在/system/framework文件夹下,与普通的jar包不同,这里的java是基于dalvik。反编译可以得到普通的jar文件,放在项目中可以作为lib使用,通过jar的函数调用系统的功能。

如果你想弹窗体出来玩玩可以参考这里。
http://blog.csdn.net/innost/article/details/47660193
(这可不是一般的窗体)

dalvik虚拟机的内容,以及最新的art的内容请自行百度或谷歌进行了解。

关于android的系统的加载过程,以及各种系统服务相关的内容的分析,请参考安卓源码分析的书籍。

从android系统的结构可以看出,android的很多代码是用java实现的,而java是可以跨平台的,理论上只要让启动程序app_process以及相关的可执行文件能在windows等系统上运行,android就可以直接运行于windows等其他的操作系统上。

实际上这样的移植已经有人实现了,Chrome ARC上就可以,虽然很多软件还运行不起来,目前看到的有WindowsAndroid也是通过移植的方式来运行android而不是通过虚拟机,可能还有其他的。

不过我还没有看到开源的项目,或者已经有这样的开源项目我还没有发现,如果有谁知道告诉我一下哈。

另外一个有意思的事件就是可以将android的UI,单独拿出来,这样就可以用开发安卓应用的方式开发桌面应用了,android的UI有现成的开发工具和众多的开发人员。java中的swt以及swing都已经快要被遗忘了。

好了,先就说这么多了,更多内容请关注我的微信公众号:zhaojieTec

如何穿越到android底层的更多相关文章

  1. Android底层驱动开发(一)

    1   Android为什么要增加硬件抽象层HAL A    统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B   解决GPL版权问题,因为linux内核基于GPL协议.这个G ...

  2. 【转】Android 底层开发的几点

    我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径.根据前辈的经验,Android底层完全入门需要两年. 先说下我的入门过程:第零步,下载源码,我下的 ...

  3. 搭建Android底层开发环境

    为了开发linux驱动方便些,我们一般将linux作为Android的开发环境,那么就需要搭建Android的开发环境,下面是一些搭建Android底层时的心得: (1)安装JDK:除了普遍使用的下载 ...

  4. 【转】Android底层库和程序

    原文网址:http://blog.csdn.net/louiswangbing/article/details/6616202 Android底层库和程序 1.     本地实现的基本结构 Andro ...

  5. 写给Android App开发人员看的Android底层知识(1)

    这个系列的文章一共8篇,我酝酿了很多年,参考了很多资源,查看了很多源码,直到今天把它写出来,也是战战兢兢,生怕什么地方写错了,贻笑大方. (一)引言 早在我还是Android菜鸟的时候,有很多技术我都 ...

  6. 写给Android App开发人员看的Android底层知识(2)

    (五)AMS 如果站在四大组件的角度来看,AMS就是Binder中的Server. AMS全称是ActivityManagerService,看字面意思是管理Activity的,但其实四大组件都归它管 ...

  7. Linux内存管理之mmap详解 (可用于android底层内存调试)

    注:将android底层malloc换为mmap来获取内存,可将获取到的内存添加tag,从而再利用meminfo进行分析,可单独查看该tag的内存,从而进行分析. 一. mmap系统调用 1. mma ...

  8. Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值

    Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值 题外话:一个问题研究到最后,那边记录文档的前半部分基本上都是没用的,甚至是错误的. 重点在最后,前边不过一些假想猜測. ht ...

  9. 《Android底层接口与驱动开发技术详解》digest

    第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache A ...

随机推荐

  1. Mongo查询

    这里主要是讲MongoDB在控制台中如何进行高级查询. 还有一句想提醒大家,多动手实验,才是硬道理. <,>,>=,<= 这四个就不用解释了,最常用的,也是最简单的. db.c ...

  2. cookie设置保存用户名,填入中文名之后出现的错误500问题

    对于问题发生的原因以后再来补充: 解决方法就是在dologin.jsp当中使用URLEncode工具类,这个工具类在java的net包当中 <一>用户浏览器-->jsp  的过程 1 ...

  3. Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署

    本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...

  4. 可控制导航下拉方向的jQuery下拉菜单代码

    效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...

  5. 《c# 从入门经典》 (第6版) - c# 简介

    1,.NET Framework:是开发平台,包含两大部分: ①庞大的代码库(类库),可以在客户语言(C#,VB)中来使用这些代码 ②Common Language Runtime,负责管理应用程序的 ...

  6. form表单提交和阻止

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Java中,方法的重写、重载的区别,以及多态的实例

    首先我们要明白什么是重写和重载 重写(override):子类方法覆盖了父类的方法.    (类与类之间继承的关系) 例:父类代码 public class Deng { public void Qi ...

  8. UDS(ISO14229-2006) 汉译(No.4 术语和缩写)

    A_PCI                    Application layer Protocol Control Information应用层协议控制消息. A_PDU              ...

  9. FilterDispatcher已被标注为过时解决办法 &gt;&gt;&gt; FilterDispatcher &lt;&lt;&lt; is deprecated!

    一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcher isdeprecated! 在web.xm ...

  10. [翻译] Autoac 最佳实践和建议

    使用嵌套的 ILifetimeScope 解析服务 Autofac 被设计为跟踪(track)和清理(dispose)资源.为确保资源被正确处理,务必将长时间运行的应用程序分成小的工作单元 (请求或事 ...