1、Android移植分为两部分:应用移植和系统移植;

2、应用移植:指将第四层的应用程序一直到某一特定硬件平台上。

  (1)为保证应用程序能在新的平台上正常运行,需要对源代码就行一些修改,因为硬件平台之间以及Android SDk API之前都可能存在差异。如果无法获取应用程序的源代码,只能重新在新的硬件平台上实现;

  (2)Android应用移植不涉及驱动和HAL程序库(注:HAL程序库是Android新增加的硬件抽象层);

3、系统移植:指让Android操作系统在某一特定硬件平台上运行。

  (1)使操作系统在特定硬件平台上运行的条件:

    ①操作系统支持硬件平台上的CPU架构。Linux内核本身支持很多常用的CPU架构,如ARM,X86,PowerPC,因此不需要做过多的改动,但不代表不做改动;

    ②识别硬件平台上的各种硬件。这些工作主要也是由Linux内核完成的,主角是Linux驱动。

  (2)HAL(Hardware Abstraction Layer,硬件抽象层)

    ①位于第二层,也是普通的Linux程序库(.so文件),Android SDK通过HAL之间访问Linux驱动(一般的Linux系统都是由应用程序直接访问驱动)。

    ②Google公司这样设计的目的:Linux内核基于GPL开源协议,但是许多驱动厂商不想开放源代码,所以增加了HAL层,可以将Linux驱动的业务逻辑放在HAL层,这样处理Linux驱动开源技术只是一个空架子。

4、总结:

  (1)Android移植的主要工作:移植Linux驱动和移植HAL;

  (2)Android移植的基本原则是尽可能找到驱动和HAL的源代码,在源代码的基础上改比从头开始编写容易得多,实在无法获取源代码,就只能从头开始做起了;

  (3)Android移植很大程度上是Linux内核移植,Linux内核移植主要是移植驱动程序。不同Linux版本的驱动程序不能通用,需要修改源代码,并在新的Linux内核下重新编译才可以运行在新的Linux内核版本下。

最新文章

  1. php冒泡排序和快速排序
  2. r.js结合gulp等于webpack(angular为例)
  3. C# 只移除最后一个字符
  4. Atitit mtp ptp rndis midi协议的不同区别
  5. css margin
  6. MySQL 调优基础(二) Linux内存管理
  7. centos7 配置vnc
  8. Netty5 + HTTPS 练习
  9. ajax — get? or post?
  10. iOS9 升级设置
  11. Apache-Tika解析XML文档
  12. 使用redis缓存加索引处理数据库百万级并发
  13. JDBC的使用——Statement
  14. android专栏
  15. Unity3D常用代码集合
  16. java常用类————Date类
  17. Linux中安装字体
  18. [LeetCode] Number of Distinct Islands II 不同岛屿的个数之二
  19. 安卓笔记--- intent传递自定义类
  20. Android开发 - 掌握ConstraintLayout(八)障碍线(Barrier)

热门文章

  1. 模拟实现兼容低版本IE浏览器的原生bind()函数功能
  2. 庭审全程文字实录 z
  3. UBUNTU查看软件版本
  4. MySQL 字符串 转 int/double CAST与CONVERT 函数的用法
  5. inno setup 在卸载时如果想保留文件 使用uninsneveruninstall
  6. 如何正确地使用Python的属性和描述符
  7. C# 数据回滚
  8. OC基础(20)
  9. android L 新控件侧滑菜单DrawerLayout 使用教程
  10. C# ToolStripProgressBar