添加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命令,进行编译; (编译时间较长)

向Android系统中添加模块及产品流程相关推荐

  1. 在Android系统中添加一款新铃声

    想在Android系统中添加铃声,可以通过adb push 的方法,但如果要多次修改系统,每次push进去就显得太费劲了,这里有个简单的方法,就是把铃声编译进android 的system.img文件 ...

  2. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

  3. 在Android系统中添加组合键快捷启动功能

    启动系统特定功能的组合键的判断应该在系统分发按键消息前处理, 这样从系统运行 的角度来说成本最低. 添加组合键处理需要先搞清楚按键消息在framework中采集 和分发子系统的工作流程, 虽然有and ...

  4. ZIP文件格式及其在android系统中的应用

    zip是一种归档文件格式,zip可以把若干文件和目录下的文件进行归档,这些归档的文件可以压缩也可以不压缩,并且压缩算法也是可以选择的,目前zip最经常使用的是deflate算法,因为zip中包含若干归 ...

  5. Android系统中如何添加USB网络共享

    Android系统中如何添加USB网络共享 类别 需求 索引类别 USB网络共享 问题描述 平台是RT1296,在Android系统中已经有支持USB网络共享,但相应的产品系统中还未开启USB网络共享 ...

  6. android属于数据库管理系统,详细谈谈Android系统中的SQLite数据库的应用

    数据库是按照数据结构来组织.存储和管理数据的仓库,而在信息话的社会,数据库又不单单仅限与数据的相关内容,现在数据库技术是管理信息系统.办公自动化系统.决策支持系统等各类信息系统的核心部分,而SQL是结 ...

  7. Android系统中的进程管理:进程的创建

    对于操作系统来说,进程管理是其最重要的职责之一. 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解. 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建. 本文适合Android平 ...

  8. Android 系统中 Location Service 的实现与架构

    定位服务是移动设备上最常用的功能之一,本文以 Android 源码为基础,详细分析了 Android 系统中定位服务的架构和实现. 在 Android 系统中,所有系统服务的实现都是类似的.只要明白其 ...

  9. 如何单独编译Android源代码中的模块

    第一次下载好Android源代码工程后,我们通常是在android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了And ...

最新文章

  1. 一周的微信公众平台接口开发总结
  2. centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
  3. logstash异常
  4. OkHttp自定义重试次数
  5. 【django之admin,单例模式】
  6. 解决Request method 'GET' not supported问题
  7. pdf用什么软件编辑最方便
  8. 一维码Code 128简介及其解码实现 zxing-cpp
  9. ARM的开发步骤:让你思路更清晰
  10. 解决网站mp4视频不能边播放边下载的问题!(终极解决方案)
  11. 示例填充图片_用示例解释洪水填充算法
  12. 【计算机组成原理】码距怎么计算
  13. 手机端H5页面边框缺失问题解决
  14. 语音如何转文字?建议收藏这些方法
  15. 30天数据分析与机器学习实践之Day16——Python文本数据分析:新闻分类任务
  16. java.lang.VerifyError: Verifier rejected class 问题解决
  17. 原型设计Axure的基本使用
  18. 用C++评选优秀教师和优秀学生
  19. html5单位转换器,Converter单位转换器
  20. 项目管理笑话集之关羽斩颜良

热门文章

  1. 极流行的四型人格分类,你是哪一种?
  2. vue构建pc端项目(ElementUI)、vue入门小应用
  3. zzzfun、age、omofun常见动漫下载问题汇总
  4. ADNI数据集-数据分析11.17
  5. 赖世雄老师---不完全不及物动词---become/turn/get/seem及感官动词
  6. vnc远程linux命令,用VNC实现远程桌面共享(支持Windows, Linux, …) | 易水博客
  7. 题解-CTS2019氪金手游
  8. byval 和byref的区别,今天刚明白。
  9. 任正非,你也太能装逼了吧?
  10. linux 网络安全工具,常用的Linux网络安全工具简介