android移植简述

一、概述

移植的工作一般的主要不外乎做以下这些事情:

A、有的现成好的直接选配

这个工作主要是熟悉该源码的编译系统,就是源码自动化编译是怎么组织的。linux环境下不外乎是Makefile及脚本。所以得熟悉这两个方面的知识。

B、有的不好的代码修改好后选配

这个工作不仅仅是要熟悉编译系统,还要熟悉别人的代码结构。一般牛X的软件架构也牛X,所以主要是学习牛X的人设计的代码结构,所谓的框架。框架懂了,再熟悉里面的细节,就可以改了。

C、添加新代码并选配

这个工作同样要熟悉编译系统及源码结构。这个时候对框架可能不能仅仅限于知道,而且要深刻理解,按照牛人的思路来设计代码。

所以android的移植就可以简单的说成有以下方面的工作:

A、熟悉android的编译系统

主要是.mk文件的规则,这个官网及源码中有文档说明(development/Ndk/Docs/android-mk.txt),得好好研究清楚。

就源码中的脚本,譬如:build/envsetup.sh

B、熟悉android的源码目录结构

system:根文件系统相关的一些代码

packages:android的一些APP的源码

frameworks:framework层代码,不改动android源码的话,主要就是app层调用hal层代码的接口实现的源码

hardware:hal层代码

devices和vendor:厂商定制代码

build:编译系统的一些mk文件

out:是编译输出目录

主要的一些目录就是上面了,对于初学的话,差不多就足够了。当然所有的都熟悉是最好了。

C、三个层次的代码

要向android添加代码的话,一般主要熟悉三个层次的代码就差不多了。

APPframeworkHAL

APP:应用程序层次,主要是java代码,通过跨平台的java编写的代码来完成需求逻辑对系统提出功能性要求,让系统去完成相应的动作。

framework:cpp代码,主要是提供给java调用的接口,这些接口通常是去调用到hal层的代码。

HAL:登记一组供framework回调的函数,来完成一定的功能。

二、厂商代码定制

公司目录——demo

设备目录——demopad

1、创建目录

device/demo

device/demo/demoPad

OR

vendor/demo

vendor/demo/demoPad

2、mk文件编写

这个比较复杂一点,但是简单地说:找到mk中的一些定义的变量,要选择要编译什么?怎么编译?或是要拷贝什么?怎么拷贝?等等方面的问题。简而言之就是熟悉mk规则。

(1)厂商配置

A、AndroidBoard.mk范例:

LOCAL_PATH := $(call my-dir)   #指定本地编译目录

(2)产品配置

A、AndroidProducts.mk内容范例:

PRODUCT_MAKEFILES := \

$(LOCAL_DIR)/demoPad.mk   #指定demoPad.mk为产品定制的Makefile

B、demoPad.mk内容范例:

$(call inherit-product, device/.../xxx.mk) #指把xxx.mk中的变量添加进来

DEVICE_PACKAGE_OVERLAYS := device/.../overlay #指定目录下的资源替换系统的资源

PRODUCT_COPY_FILES += \    #指定拷贝内容:源——>目标

source_path:destination_path

PRODUCT_PROPERTY_OVERRIDES += \   #

key=value

PRODUCT_PACKAGES += \    #定制软件

xxx

$(call inherit-product-if-exists, device/.../xxx.mk)#指把xxx.mk(xxx.mk要存在)中的变量添加进来

PRODUCT_CHARACTERISTICS := tablet  #产品特性——平板

# Overrides

PRODUCT_BRAND  := demo

PRODUCT_NAME   := demoPad  #要编译的产品名称选项的前缀一致

PRODUCT_DEVICE := demoPad  #要编译的设备目录一致

PRODUCT_MODEL  := demo

(3)设备配置

BoardConfig.mk范例:

include device/.../xxx.mk #包含xxx.mk中的定义

TARGET_CPU_ABI := armeabi-v7a#指定cpu

TARGET_CPU_ABI2 := armeabi    #支持eabi

TARGET_ARCH_VARIANT := armv7-a-neon

ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_BOARD_PLATFORM := exDroid

TARGET_BOOTLOADER_BOARD_NAME := demoPad

......

三、编译步骤

1、环境搭建

主要是安装java SDK和一些支持库(应用程序移植就是麻烦,往往需要一堆支持环境,不像内核或是u-boot这样的底层代码,仅仅要自己的代码,不需要其他支持)。

这个到官网看下就知道了,官网有详细的说明。不过直接照着官网的做,有可能也会有点小问题。譬如android4.0需要ubuntu 64bits环境及gcc要是4.4版本的。那么相应的库安装就g++-multilib就不对,需要是g++-4.4-multilib。这样的问题,只能在编译出错后才能够知道。

http://source.android.com/source/initializing.html

2、配置java到环境变量

# export PATH=$PWD/jdk-xxx/bin:$PATH

# export CLASSPATH=$PWD/jdk-xxx/lib

其中jdk-xxx指的是java SDK安装好后的目录名

3、编译

生成一个vendorsetup.sh脚本

# touch device/demo/demoPad/vendorsetup.sh

把add_lunch_combo demoPad-eng添加到vendorsetup.sh中

add_lunch_combo是build/envsetup.sh脚本的一个函数,其功能是生成一个选项,即可以选择编译我们定制的厂商目录下的东西

# echo "add_lunch_combo demoPad-eng" > device/demo/demoPad/vendorsetup.sh

导出build/envsetup.sh脚本中的函数

# source build/envsetup.sh

选择我们定制厂商目录,以便定制编译

# lunch demoPad-eng

拷贝内核

# extract-bsp

编译,这里可以加-j2这样的参数,意思是可以多线程编译,这个根据你的机器来。

# make

一、概述

移植的工作一般的主要不外乎做以下这些事情:

A、有的现成好的直接选配

这个工作主要是熟悉该源码的编译系统,就是源码自动化编译是怎么组织的。linux环境下不外乎是Makefile及脚本。所以得熟悉这两个方面的知识。

B、有的不好的代码修改好后选配

这个工作不仅仅是要熟悉编译系统,还要熟悉别人的代码结构。一般牛X的软件架构也牛X,所以主要是学习牛X的人设计的代码结构,所谓的框架。框架懂了,再熟悉里面的细节,就可以改了。

C、添加新代码并选配

这个工作同样要熟悉编译系统及源码结构。这个时候对框架可能不能仅仅限于知道,而且要深刻理解,按照牛人的思路来设计代码。

所以android的移植就可以简单的说成有以下方面的工作:

A、熟悉android的编译系统

主要是.mk文件的规则,这个官网及源码中有文档说明(development/Ndk/Docs/android-mk.txt),得好好研究清楚。

就源码中的脚本,譬如:build/envsetup.sh

B、熟悉android的源码目录结构

system:根文件系统相关的一些代码

packages:android的一些APP的源码

frameworks:framework层代码,不改动android源码的话,主要就是app层调用hal层代码的接口实现的源码

hardware:hal层代码

devices和vendor:厂商定制代码

build:编译系统的一些mk文件

out:是编译输出目录

主要的一些目录就是上面了,对于初学的话,差不多就足够了。当然所有的都熟悉是最好了。

C、三个层次的代码

要向android添加代码的话,一般主要熟悉三个层次的代码就差不多了。

APPframeworkHAL

APP:应用程序层次,主要是java代码,通过跨平台的java编写的代码来完成需求逻辑对系统提出功能性要求,让系统去完成相应的动作。

framework:cpp代码,主要是提供给java调用的接口,这些接口通常是去调用到hal层的代码。

HAL:登记一组供framework回调的函数,来完成一定的功能。

二、厂商代码定制

公司目录——demo

设备目录——demopad

1、创建目录

device/demo

device/demo/demoPad

OR

vendor/demo

vendor/demo/demoPad

2、mk文件编写

这个比较复杂一点,但是简单地说:找到mk中的一些定义的变量,要选择要编译什么?怎么编译?或是要拷贝什么?怎么拷贝?等等方面的问题。简而言之就是熟悉mk规则。

(1)厂商配置

A、AndroidBoard.mk范例:

LOCAL_PATH := $(call my-dir)   #指定本地编译目录

(2)产品配置

A、AndroidProducts.mk内容范例:

PRODUCT_MAKEFILES := \

$(LOCAL_DIR)/demoPad.mk   #指定demoPad.mk为产品定制的Makefile

B、demoPad.mk内容范例:

$(call inherit-product, device/.../xxx.mk) #指把xxx.mk中的变量添加进来

DEVICE_PACKAGE_OVERLAYS := device/.../overlay #指定目录下的资源替换系统的资源

PRODUCT_COPY_FILES += \    #指定拷贝内容:源——>目标

source_path:destination_path

PRODUCT_PROPERTY_OVERRIDES += \   #

key=value

PRODUCT_PACKAGES += \    #定制软件

xxx

$(call inherit-product-if-exists, device/.../xxx.mk)#指把xxx.mk(xxx.mk要存在)中的变量添加进来

PRODUCT_CHARACTERISTICS := tablet  #产品特性——平板

# Overrides

PRODUCT_BRAND  := demo

PRODUCT_NAME   := demoPad  #要编译的产品名称选项的前缀一致

PRODUCT_DEVICE := demoPad  #要编译的设备目录一致

PRODUCT_MODEL  := demo

(3)设备配置

BoardConfig.mk范例:

include device/.../xxx.mk #包含xxx.mk中的定义

TARGET_CPU_ABI := armeabi-v7a#指定cpu

TARGET_CPU_ABI2 := armeabi    #支持eabi

TARGET_ARCH_VARIANT := armv7-a-neon

ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_BOARD_PLATFORM := exDroid

TARGET_BOOTLOADER_BOARD_NAME := demoPad

......

三、编译步骤

1、环境搭建

主要是安装java SDK和一些支持库(应用程序移植就是麻烦,往往需要一堆支持环境,不像内核或是u-boot这样的底层代码,仅仅要自己的代码,不需要其他支持)。

这个到官网看下就知道了,官网有详细的说明。不过直接照着官网的做,有可能也会有点小问题。譬如android4.0需要ubuntu 64bits环境及gcc要是4.4版本的。那么相应的库安装就g++-multilib就不对,需要是g++-4.4-multilib。这样的问题,只能在编译出错后才能够知道。

http://source.android.com/source/initializing.html

2、配置java到环境变量

# export PATH=$PWD/jdk-xxx/bin:$PATH

# export CLASSPATH=$PWD/jdk-xxx/lib

其中jdk-xxx指的是java SDK安装好后的目录名

3、编译

生成一个vendorsetup.sh脚本

# touch device/demo/demoPad/vendorsetup.sh

把add_lunch_combo demoPad-eng添加到vendorsetup.sh中

add_lunch_combo是build/envsetup.sh脚本的一个函数,其功能是生成一个选项,即可以选择编译我们定制的厂商目录下的东西

# echo "add_lunch_combo demoPad-eng" > device/demo/demoPad/vendorsetup.sh

导出build/envsetup.sh脚本中的函数

# source build/envsetup.sh

选择我们定制厂商目录,以便定制编译

# lunch demoPad-eng

拷贝内核

# extract-bsp

编译,这里可以加-j2这样的参数,意思是可以多线程编译,这个根据你的机器来。

# make


相关内容

  • linux嵌入式学习路线(新版)
  • 嵌入式学习路线图 嵌入式开发学习路线图 为什么选择学习嵌入式? 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一,同时也是当今IT领域仅存的几个金领职位之一.当前的中国IT人才面临严重的"后继乏人", 而且这种缺口由于培训缺乏.教育模式等原因造成的,而缺口最大的,就是高级 ...

  • [生活休闲]iPhone手机和Android手机有哪些不同
  • [生活休闲]iPhone手机和Android手机有哪些不同 自从iPhone横空出世,就以简单易用,并功能强大,作为智能手机的代名词,直到Google推出Android平台,才棋逢对手;数据显示,目前iOS和Android已经垄断了智能手机平台,那么,iPhone手机和Android手机到底哪个好用 ...

  • 毕业论文中期进展情况检查表
  • 四川大学锦江学院毕业论文(设计)中期进展情况检查表 院系:电子信息学院 学生姓名 赵文磊 专业班级 检查日期:2013 年 04 月 16 日 通信工程 指导教师 夏文龙 论文(设计)题目 目 前 已 完 成 任 务 尚 须 完 成 的 任 务 Android 平台下 3G 通信模块状态查询系统 1 ...

  • Bluestacks违反GPL协议使用源代码
  • 2014-1-20 14:16| 发布者:joejoe0332| 查看: 1352| 评论: 0|原作者: LUPA开源社区整理|来自: LUPA开源社区整理 摘要: Bluestacks(Windows下的Android运行时环境)内核是把一个android-x86跑在了Windows上,这部分是 ...

  • 基于Android平台的家庭植物工厂智能监控系统_刘彤
  • 基于Android平台的家庭植物工厂智能监控系统 刘 彤,贺宏伟,李 尧,马建设 518055) (清华大学深圳研究生院/深圳LED重点实验室,广东深圳 摘 要:随着人们生活品质的提高,家庭植物工厂受到越来越多的关注.为此,设计了一种以LED光源模拟太 阳光的人工光型密闭式家庭植物工厂.为了使该家庭 ...

  • 软件工程需求分析报告
  • <软件工程> 需求分析报告 报告名称 口袋代码 专 业 计算机科学与技术 姓 名 郝赛宇 黄俊 王锦阳 口袋代码需求分析 1引言 1.1编写目的 口袋代码是面向学生的,目的是方便学生随时记录自己所需要记录的代码.知识点.算法. 1.2 项目背景 项目名称为:口袋代码. 因为现在的便签大多 ...

  • 基于Android平台的点歌系统设计与实现毕业论文
  • 基于Android 平台的点歌系统设计与实 现 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指 导教师的指导下进行的研究工作及取得的成果.尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为 ...

  • 科研训练个人总结
  • 科研训练个人总结 基于Andriod平台的导游软件的设计与实现 此次科研训练是以小组的方式以团队合作方式选择或自拟一个开发项目并根据指导教师所给的文档编写规范来进行一整套文档的编写,我们小组由4人组成并自拟的题目<基于Andriod平台的导游软件的设计与实现>,可以这么说这个系统一直是我 ...

  • VisualBasic实习体会
  •   我对于visualbasic的学习,是从初中开始的。当时舟山市的中考政策有考级加分制度,考出全国二级能加10分。在此诱惑下报名参加培训班,考了两次,第一次笔试未通过,第二次才全通过。虽然考了两次,但是那时候已经能够编出几个没有什么逻辑性可言的小小游戏了。   所以这次认识实习,对我来说难度并不大 ...