如何穿越到android底层
对于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底层的更多相关文章
- Android底层驱动开发(一)
1 Android为什么要增加硬件抽象层HAL A 统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B 解决GPL版权问题,因为linux内核基于GPL协议.这个G ...
- 【转】Android 底层开发的几点
我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径.根据前辈的经验,Android底层完全入门需要两年. 先说下我的入门过程:第零步,下载源码,我下的 ...
- 搭建Android底层开发环境
为了开发linux驱动方便些,我们一般将linux作为Android的开发环境,那么就需要搭建Android的开发环境,下面是一些搭建Android底层时的心得: (1)安装JDK:除了普遍使用的下载 ...
- 【转】Android底层库和程序
原文网址:http://blog.csdn.net/louiswangbing/article/details/6616202 Android底层库和程序 1. 本地实现的基本结构 Andro ...
- 写给Android App开发人员看的Android底层知识(1)
这个系列的文章一共8篇,我酝酿了很多年,参考了很多资源,查看了很多源码,直到今天把它写出来,也是战战兢兢,生怕什么地方写错了,贻笑大方. (一)引言 早在我还是Android菜鸟的时候,有很多技术我都 ...
- 写给Android App开发人员看的Android底层知识(2)
(五)AMS 如果站在四大组件的角度来看,AMS就是Binder中的Server. AMS全称是ActivityManagerService,看字面意思是管理Activity的,但其实四大组件都归它管 ...
- Linux内存管理之mmap详解 (可用于android底层内存调试)
注:将android底层malloc换为mmap来获取内存,可将获取到的内存添加tag,从而再利用meminfo进行分析,可单独查看该tag的内存,从而进行分析. 一. mmap系统调用 1. mma ...
- Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值
Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值 题外话:一个问题研究到最后,那边记录文档的前半部分基本上都是没用的,甚至是错误的. 重点在最后,前边不过一些假想猜測. ht ...
- 《Android底层接口与驱动开发技术详解》digest
第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache A ...
随机推荐
- Mongo查询
这里主要是讲MongoDB在控制台中如何进行高级查询. 还有一句想提醒大家,多动手实验,才是硬道理. <,>,>=,<= 这四个就不用解释了,最常用的,也是最简单的. db.c ...
- cookie设置保存用户名,填入中文名之后出现的错误500问题
对于问题发生的原因以后再来补充: 解决方法就是在dologin.jsp当中使用URLEncode工具类,这个工具类在java的net包当中 <一>用户浏览器-->jsp 的过程 1 ...
- Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署
本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...
- 可控制导航下拉方向的jQuery下拉菜单代码
效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...
- 《c# 从入门经典》 (第6版) - c# 简介
1,.NET Framework:是开发平台,包含两大部分: ①庞大的代码库(类库),可以在客户语言(C#,VB)中来使用这些代码 ②Common Language Runtime,负责管理应用程序的 ...
- form表单提交和阻止
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java中,方法的重写、重载的区别,以及多态的实例
首先我们要明白什么是重写和重载 重写(override):子类方法覆盖了父类的方法. (类与类之间继承的关系) 例:父类代码 public class Deng { public void Qi ...
- UDS(ISO14229-2006) 汉译(No.4 术语和缩写)
A_PCI Application layer Protocol Control Information应用层协议控制消息. A_PDU ...
- FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!
一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcher isdeprecated! 在web.xm ...
- [翻译] Autoac 最佳实践和建议
使用嵌套的 ILifetimeScope 解析服务 Autofac 被设计为跟踪(track)和清理(dispose)资源.为确保资源被正确处理,务必将长时间运行的应用程序分成小的工作单元 (请求或事 ...