对于android开发,实际上大部分工做都是在应用层,但为了体现"技术含量",以及"知其因此然",以便在遇到问题是不至于一筹莫展。所以有必要了解底层的工做机制。java
因为android是开源的系统,所以学习其内部的工做机制是很是容易的,目前也有一些关于android源码分析的书籍。linux
我一直认为,应用层的开发和底层没什么太大的关系,不过有一次由于应用权限的问题,也算是对android framework层有一些了解了,借助一本源代码分析的书籍了解android的工做原理并无想象中那么困难。android
与其余地方不一样是本人使用了不为人知的代码注入技术(并不是依赖注入),对于具备root权限的android设备,只须要往系统进程中注入一个.so文件,再用这个.so文件去获取jvm执行环境,就能够加载java代码,这样就将本身的java代码注入到系统进程中。windows
注入java代码之后就能够在framework层执行操做了,所以咱们成功的从应用层穿越到android底层。微信
固然若是要在framework层执行本身编写的代码,直接替换系统文件也是能够的。一种方式是下载安卓源代码,构建编译环境,还有一种方式是对系统中的jar文件进行反编译在编译回去这也是可行的。参考(未测试):http://dss16694.iteye.com/blog/1436466app
代码注入参考:http://blog.csdn.net/jiangwei0910410003/article/details/40949475jvm
固然替换系统文件和代码注入都须要有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