向Android系统中添加模块及产品流程

 添加Android模块 

一、基础知识:

(1)在Android系统中,编译都是以模块(而不是文件)作为单位的,每个模块都有一个唯一的名称;

(2)为了将模块编译到Android系统中,每个模块都需要一个专门的Make文件,也即是“Android.mk”文件;

二、实现hello.c 模块的编写 

1. 如在 hardware/test目录下,编写hello.c

2. 在hardw/test目录下,编写Android.mk

Android.mk编写的步骤:

(1)设置当前模块的编译路径为当前文件夹路径

LOCAL_PATH := $(call my-dir)

(2)清理(可能由其他模块设置过的)编译环境中用到的变量

include
$(CLEAR_VARS)

(3)块编译变量

LOCAL_SRC_FILES := 要编译的文件        //当前模块包含的所有源代码文件

LOCAL_MODULE := 生成模块的名称       // 当前模块的名称,这个名称应当是唯一的,起名字要特殊一些,防止相同 ;

LOCAL_CFLAGS := 编译的参数              //C/C++编译器的参数

LOCAL_MODULE_TAGS := 标签            //必须有标签,标签的值可能是debug,
eng, user, development 或 optional

optional是默认标签, 标签是提供给编译类型使用的

(4)模块类型

include $(BUILD_模块类型)

模块类型有:

BUILD_EXECUTABLE                     编译目标机上的可执行文件(ELF)

BUILD_STATIC_LIBRARY              编译目标机上的静态库(*.a 编译时使用)

BUILD_SHARED_LIBRARY             编译目标机上的动态库文件(*.so)

BUILD_JAVA_LIBRARY                  编译目标机上的java动态库

BUILD_STATIC_JAVA_LIBRARY    编译目标机上的java静态库

BUILD_PACKAGE                           编译目标机上的java包

3. 返回到源码顶层目录,执行 source build/envsetup.sh

作用:

(1)添加编译命令到当前终端上(如:lunch、模块编译命令m/mm/mmm)

(2)添加 产品名-编译类型到lunch菜单上;

4. 执行lunch命令,可以选择Android提供全志A13的nuclear_top产品 ,选择对应的 产品名-编译类型;

5. 模块编译,指定目录使用mmm,当前目录使用mm

----------------------------------------------------------------------------------------------------------------

添加Android产品

参考nuclear-top产品,实现属于我们自己的产品目录

nucler-top 表示设备     nuclear_top 表示产品

1. 在device目录下,找到对应的厂家,新建一个属于我们自己产品的目录,如Joki_device

说明:

<1>选择的厂家是farsight(华清),即在该厂家目录下新建一个属于我们自己产品目录;

<2>注意创建的产品目录,一定要以设备的名字作为产品的目录名;

<3>用 “Joki”  表示产品的名字;

2. 进入产品目录下Joki_device, 添加vendorsetup.sh文件 ,该文件作用是添加 产品名- 编译类型 到lunch菜单

( 可以复制nuclear-top下的vendorsetup.sh 到自己的产品目录下,把产品名和编译类型修改一下即可;)

修改内容:

说明:

<1> Joki-eng 意思是:Joki表示的产品名字,eng表示的是编译类型是工程机版本,也即开发阶段的编译版本;

<2> 在执行 source build/envsetup.sh 这个脚本时,vendorsetup.sh脚本相应会被执行,用于添加自己的产品名及

编译类型到lunch菜单中;

3. 添加产品信息文件: 产品名.mk,如Joki.mk   (不一定非要是产品名,只要和AndroidProducts.mk指定的信息文件名保持一致就行)

( 可以复制nuclear-top下的nuclear_top.mk 到自己的产品目录下,并改成自己的产品名 Joki.mk )

修改内容:

说明:

<1>必须修改的两个参数:

PRODUCT_NAME(产品的名字) :  Joki

PRODUCT_DEVICE(产品的设备):Joki_device (设备的名字一定和创建的产品目录名一致)

4. 添加AndroidProducts.mk 文件,用来指定产品信息文件的位置;

( 可以复制nuclear-top下的AndroidProducts.mk 到自己的产品目录下)

修改内容:

说明:

第二行的意思是:产品信息文件Joki.mk是在当前目录下

5. 添加设备的配置文件:BoardConfig.mk

( 可以复制nuclear-top下的BoardConfig.mk 到自己的产品目录下)

不要修改内容

 ...文件添加完毕...之后进行配置编译

6. 执行source build/envsetup.sh

作用:

<1> 添加配置编译命令到控制终端;(如:croot,lunch等命令)

<2> 会执行所有vendorsetup.sh脚本,该脚本的作用是添加"产品型号-编译类型"到lunch菜单中

7. 执行lunch命令,进行配置   (由于执行了上面的脚本,所以在lunch菜单中可以看到我们的 “产品型号-编译类型”)

作用:

<1> 选择要编译的产品和编译类型;   (选择5)

<2>检查选择的产品是否存在, 存在, 获取产品信息,根据产品信息, 检查产品的设备信息是否存在, 存在, 获取设备信息;

<3>找到选择产品的版本配置文件

<4>检查选择的编译类型是否正确

<5>打印选择的产品信息及其设备信息

8. 执行make命令,进行编译; (编译时间较长)

时间: 2024-10-10 22:41:41

向Android系统中添加模块及产品流程的相关文章

Android系统中添加一个产品----图文详解

本文本着开源的精神介绍如何向一个Android系统中添加一个产品的整个过程,按照以下过程笔者有理由相信每个将要从事本行业的人都可以完成,其实添加一个产品并不难,难的是对其相关硬件的修改,好了废话不多说. 首先我们要创建一个属于自己产品的目录,这里以WY_device为例,以WY作为产品的名字. 首先从已经存在的产品中拷贝一个以产品的名字为名的.mk文件,修改为自己的.mk文件,在这里为WY.mk 对其进行如下的修改: 然后添加AndroidProducts.mk  这是添加产品的配置文件名路径,

Android系统中基于Binder的IPC流程框架分析

前言: Activity.Service.BroadcastReceiver.Content Provider是Android的四大应用程序组件,构成一个完整的应用程序的这些组件可以在同一个进程,也可以不在同一个进程,而当这些组件不在同一个进程,需要进行数据交互时就需要一种IPC(Inter-Process Communication)进程间通信机制来完成,而Binder就是提供了IPC功能的一个框架.实现IPC的整个Binder框架包含几个重要组成部分,它们分别是Binder Driver.C

Android系统中的广播(Broadcast)机制简要介绍和学习计划

在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备. 在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式

RK3128平台android系统修改添加遥控器键值码值

最近帮客户定制RK3128平台的固件,涉及到定制新的遥控器,需要添加或修改遥控码值.RK3128平台android系统修改遥控器码值比全志A20.A31s稍微麻烦一些,其实本质是一样的.具体的修改方法如下: 1,先弄清楚遥控器的状况,包括遥控器用户码.键值对应的码值.方法:adb shell,输入echo1 >/sys/module/rockchip_pwm_remotectl/parameters/code_print, 再输入,cat /proc/ksmg,也可以通过串口搞. 遥控器对着灯板

Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...)

前言 "条条大路通罗马."工作中,实现某个需求的方式往往不是唯一的,这些不同实现方式不仅表现在代码质量上,还影响着我们的工作效率.就像,在 Android 系统中,总有那么一些鲜为人知的 API 能够减少我们很多零碎的工作量.于是,就想凭着一些经验,整理一些常用的,找个地方归纳总结,也供日后翻阅. getResources().getIdentifier(String name, String defType, String defPackage) 根据资源名称获取资源 id.正常情况

AIDL在android系统中的作用

AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口.最近看了下AIDL在Android系统中的用法,在网上看到很多初学的朋友不太明白AIDL的实际作用,android提供了很多进程间通信的组件,像action.broadcast.contentprovide都可以实现进程间的通信,为什么还要用AIDL这个东西呢?我在android源码中实现了一个自己写的AIDL例子,用以

linux内核netfilter实现url重定向 (嵌入android系统中)

该文件拷贝到 <AndroidSource>/kernel/net/ipv4/netfilter 目录下, 在  <AndroidSource>/kernel/net/ipv4/netfilter/Makefile  最后一行添加:obj-y += url_redirect.o  (Mtk系统 编译bootimage烧写 编译命令:./makeMtk [工程名] n(r) kernel && ./mk bootimage) (在android系统中测试)该文件还需修

debian 64位系统中添加对32位的支持

dpkg --add-architecture i386 apt-get update apt-get install ia32-libs debian 64位系统中添加对32位的支持,布布扣,bubuko.com

Android系统中的dp和px的转换

android系统中DP和SP的转化:1.首先分析TypedValue.java 可以调用以下代码获得dp的值 TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20,getResources().getDisplayMetrics()); public static float applyDimension(int unit, float value,DisplayMetrics metrics) { switch (unit) {