对于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. ime-mode:disabled 关闭文本框输入法

    在用户输入数字的表单中,需要禁止用户输入中文.符号等,减少用户输入出错误的可能性,CSS可以实现此功能. ime-mode的语法解释如下: ime-mode : auto | active | ina ...

  2. RECONFIGURE语句会清空计划缓存么?

    几个星期前,有个网友问我一个非常有趣的问题:RECONFIGURE语句会清空计划缓存么?通常我对这个问题的答案是简单的是,但慢慢的我找出了真正的答案是“看情况啦”.我们来看下它,为什么“它看情况”. ...

  3. LINQ(集成化查询)

    LINQ可以对数组.集合等数据结构进行查询.筛选.排序等操作:也可以用于与数据库交互:也支持对XML的操作,使用LINQ技术可以动态创建.筛选和修改XML数据和直接操作XML文件. 一). LINQ基 ...

  4. 实战 ASP.NET Web API

    Web API 框架是一个面向 Http 协议的通信框架.相对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置.Web API 的开发类似于 ASP.N ...

  5. mvc实现上传图片(上传和预览)webuploader

    笔者看到mvc最近比较流行,而很多使用一些比较旧的的方法上传图片,再次安利一下百度的webuploader控件吧 webuploader第一步要先下载一些插件这点可以在webuploader官网上下载 ...

  6. 超简单的激活Microsoft Office 2016 for Mac 方法

    1.简介: 2016年9月14日更新本博客,激活工具同样适用于Office 15.25(160817)版本.我此前在国外网站上找到一个App,下载之后运行,直接点击一个黑色开锁的标识按钮,输入系统密码 ...

  7. python之redis和memcache操作

    Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...

  8. 魔术方法__sleep 和 __wakeup

    感觉序列化和反序列化用得倒是比较少了,而json_encode和json_decode用得相对多,都是转化成串,进行入库.传输等.json更方便,但是序列化和反序列化结合这两个魔术方法使用倒还行< ...

  9. java入门笔记(1)

    上图表达的是我们写的java程序是怎么在电脑上运行并算出结果的.编译器判断语法是否正确,如果错误,不能生成.class文件. JVM(Java Virtual Machine)是java虚拟机. JV ...

  10. AntiModerate – 渐进式图片加载的 JavaScript 库

    AntiModerate 是一个渐进式图片加载的 JavaScript 库.我们多数看到的图片显示模式,都是从上到下逐渐显示的,这是“标准式”图像:而有的图片是先出现一个很低分辨率的图像轮廓,类似加了 ...