详细介绍android rom移植知识普及

最近接到很多兄弟们的求助,也回答过无数个和下面这个问题类似的问题:

如何编译android 原生代码得到一个rom,然后跑到某某手机上。

鉴于很多兄弟对这块不清楚,我这里一并简单回答之。

1 ROM包含两个基本的image,一个是boot.image,这个image中主要是kernel和文件系统/目录下的一些东西。kernel我就不说了,/目录下主要是init和相关的配置文件

system.image是android系统的userpace的核心,包括/system/bin,system/lib,system/app下的一些东西。

2 手机,不同手机,其内部使用的芯片,配置等等都不同。另外,android源码中并不包含硬件相关的代码。也就是说拿标准源码编译出来的仅仅在模拟器上跑跑还可以,

拿到真机上,跑也许能跑起来,但也就把手机当个模拟器使,电话,audio,wifi等等和硬件相关的都不能用。没有什么为什么会这样,硬件相关的驱动是厂商的闭源代码,

绝对不可能放出来。 不过,android中自带一些htc/sumsing的二进制HAL层so,也是在编译对应device的时候拷贝到system.image中去的。

所以,基于上面的认识,兄弟们就不要想着拿标准源码搞出一个能正儿八经跑的rom了。除此之外,手机还有AP/BP之分,BP的代码是另外一套,相当于另外一个OS,用于

modem通信的。即使你能搞定AP,BP也不要想了

3 CM是怎么搞出来的?CM不是神仙,它的工作我估计分下面几个来完成:

1 boot.image,有可能是直接基于厂商的。例如在HTC G7移植中,直接使用了G7官方的ROM

2 system,image中,跟硬件无关的(也就是非HAL层代码),爱怎么改怎么改。

3 system.image中,跟硬件相关的,先通过adb pull把官方的so弄出来,然后放到自己的ROM中。这里的工作比较难,但理论上是可以做到二进制兼容的。

从上面可知,如果官方没有提供4.0的ROM,CM也歇菜。(我个人觉得其实是可以在4.0中使用2.3的so的,方法可以通过dlopen方式加载,中间再做一层隔离。但如果

依赖的头文件发生变化了,那工作量就大了去了)

4 MIUI,点心OS,是CM之上的二次开发。国人的拿来主义造就了MIUI和点心等其叫嚣着做ROM的公司。

综上,兄弟们不要想着凭一己之力搞个牛叉的ROM了,没必要,没意义。

1 想搞rom的,建议在CM基础上做二次开发,和硬件相关的统统都不要动。

2 想改ui的,也可以基于现有的system.image,换换图片,然后再打包成image。这个网上有很多做法。技术含量不高,玩玩可以了。

ANY WAY,谢谢兄弟们的信任。欢迎高手就上述知识点和大家argue。

详细介绍android rom移植知识普及的更多相关文章

  1. 学习笔记:APP切图那点事儿–详细介绍android和ios平台

    学习笔记:APP切图那点事儿–详细介绍android和ios平台 转载自:http://www.woofeng.cn/articles/168.html   版权归原作者所有 作者:亚茹有李 原文地址 ...

  2. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  3. 或许是介绍Android Studio使用Git最详细的文章

    欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/03/12/GitOnAS/ 前言 本文较长,图片很多很多,流量党慎入 使用Git已经有一段时间了,但是之前 ...

  4. Android 蓝牙开发(3)——蓝牙的详细介绍

    前面的两篇文章,主要是在 Android 官网关于蓝牙介绍的基础上加上自己的理解完成的.主要针对的是 Android 开发中的一些 API 的使用. 第一篇文章 Android 蓝牙开发(1) 主要是 ...

  5. Android Bitmap详细介绍(转)

    转自: Bitmap详细介绍 package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; imp ...

  6. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  7. 给 Android 初学者的 Gradle 知识普及

    给 Android 初学者的 Gradle 知识普及:http://gold.xitu.io/entry/5778f8bd165abd0054b443b0/promote?utm_source=bai ...

  8. android之ListView,详细介绍实现步骤,举例,自定义listview适配器

    android之ListView,详细介绍实现步骤,举例,自定义listview适配器 本文来源于www.ifyao.com禁止转载!www.ifyao.com android中如何使用listVie ...

  9. thinkPHP 模板中的语法知识 详细介绍(十二)

    原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件    ==>记住常量的是大写 1.css link .js  sc ...

随机推荐

  1. SpringMVC03controller中定义多个方法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. nyoj 17

    // nyoj 17        代码如上,用的是dp,总的来说就是对一个字符串 从末尾开始比较,设定一个数组,存放每个单调字串的最大长度,最后比较... //要注意的就是里面if语句对于每次字符比 ...

  3. Lesson 4: Know Your Tools

    Lesson 4: Know Your Tools "差劲的人

  4. C#垃圾回收

    析构方法: 我们知道引用类型都有构造方法(constructor),相对应的也有一个析构方法(destructor).顾名思义,构造方法,就是在创建这个对象时,要执行的方法.例如,我们可以通过构造方法 ...

  5. java学习——多线程

    本文内容来源于  历经5年锤练--史上最适合初学者入门的Java基础视频 线程:就是进程中一个负责程序执行的控制单元(执行路径) 每一个线程都有自己运行的内容.这个内容可以称为线程要执行的任务. 多线 ...

  6. 如何在Eclipse中给main方法加参数

    在main方法中有一个args参数,那么如何给args参数赋值呢? public class TestMain { public static void main(String[] args) { f ...

  7. Ubuntu小私房(4)--Linux系统目录结构

    Linux目录结构是Linux学习者必须了解的知识,Linux的目录与Windows又有很大的不同,所以搞清楚Linux目录结构是关键. Linux文件类型 (部分转自ChinaBytel) linu ...

  8. Android中的动画

    Android中的动画分为: 1.逐帧动画(Frame Animation):  把动画过程的每张静态图片都收集起来,然后由Android来控制依次显示这些静态图片,然后利用人眼”视觉暂留“的原理,给 ...

  9. 数据库触发器new old

    数据库触发器new old: "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . col ...

  10. 转:十条不错的编程观点。(出处:酷 壳 – CoolShell.cn)

    在Stack Overflow上有这样的一个贴子<What’s your most controversial programming opinion?>,翻译成中文就是“你认为最有争议的 ...