位置: 编程技术 - 正文

深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境(深入浅出android开发)

编辑:rootadmin

推荐整理分享深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境(深入浅出android开发),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入浅出php,深入浅出的讲解,深入浅出android软件开发教程,深入浅出android 百度网盘,深入浅出php,深入浅出Android Camera,深入浅出android 百度网盘,深入浅出android 百度网盘,内容如对您有帮助,希望把文章链接给更多的朋友!

作者:唐老师 , 华清远见嵌入式学院讲师。

编译Android源码

关于android系统的编译,Android的官方网站上也给出了详细的说明。 初始化编译环境

切换到Android源码目录:

[plain] view plaincopyprint?

1. $ cd WORKING_DIRECTORY

执行下面命令,加载编译过程中用到的命令、环境变量:

[plain] view plaincopyprint?

1. $ source build/envsetup.sh

Ø 选择编译选项

执行下面的命令,从列表中选择一个编译项:

[plain] view plaincopyprint?

1. $ lunch 2. You're building on Linux 3. 4. Lunch menu... pick a combo: 5. 1. full-eng 6. 2.full_x-eng 7. 3.vbox_x-eng 8. 4.full_maguro-userdebug 9. 5.full_tuna-userdebug . 6.full_panda-eng

我们选择:1,也就是说,编译full-eng的目标,当然我们也可以直接指定编译项,如下:

[plain] view plaincopyprint?

1. $ lunch full-eng

其中,lunch命令是指打印或设置出当前系统中设置的编译项,full-eng这个编译项由两部分组成,其中前半部分full表示目标设备为Android的模拟器,官方解释为:fully configured with all languages,apps, input methods,全部的应用程序及语言,输入法等。后半部分eng表示带有调试功能的工程机。

lunch命令打印全部的信息,如下表所示:

Build name Device Notes full emulator fully configured with all languages, apps, input methods full_maguro maguro full build running on Galaxy Nexus GSM/HSPA&#; ("maguro") full_panda panda full build running on PandaBoard ("panda")

Buildtype Use user limited access; suited for production userdebug like "user" but with root access and debuggability; preferred for debugging eng development configuration with additional debugging tools

Ø 编译前的准备

由于我们使用ubuntu.对Android进行编译,Android对Ubuntu.的编译平台的支持不是很推荐,有些库的兼容方面会有一些问题,在编译过程中会产生一些错误,我们要进行一些修正。

错误信息:

[plain] view plaincopyprint?

1. g&#;&#; selected multilib '' not installed

[plain] view plaincopyprint?

1. <command-line>:0:0: error:"_FORTIFY_SOURCE" redefined [-Werror] 2. <built-in>:0:0: note: this is thelocation of the previous definition 3. cc1plus: all warnings being treated aserrors 4. make: ***[out/host/linux-x/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

原因: 在Android系统过程中,要使用gcc-4.4/g&#;&#;-4.4的编译器,而Ubuntu.的gcc版本为4.6.3

解决方法: 安装gcc-4.4

[plain] view plaincopyprint?

1. $sudo apt-get install gcc-4.4 2. $sudo apt-get install g&#;&#;-4.4

进入到/usr/bin目录下,删除gcc对gcc-4.6的链接,创建到新安装的gcc-4.4的链接:

[plain] view plaincopyprint?

1. $cd /usr/bin 2. $sudo rm -r gcc 3. $sudo ln -s gcc-4.4 gcc

验证结果:

[plain] view plaincopyprint?

1. $gcc -v 2. $g&#;&#; -v

打印其版本为gcc-4.4x、g&#;&#;-4.4x即可。

Ø 编译源码

输入下面命令开始编译:

[plain] view plaincopyprint?

1. $ make -jn

其中,-jn表示,n个线程同时编译,一般n的&#;为CPU核的2倍,但是,也要和你的Ubuntu的内存有关系,每个线程在编译时最少需要1G内存,如果你没有很多内存,还是直接使用make命令吧,否则,编译到后面会出错。

这个过程,如果是虚拟机的话,至少要4个多小时,如果是实体机的话,要看配置,一般在1个小时以上。

深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境(深入浅出android开发)

编译成功结果如下图所示:

编译goldfish内核源码

编译Linux源码必然要先指定gcc交叉编译器,我们直接使用Android自带的arm-eabi-4.4.3编译器,它在WORKING_DIRECTORY/prebuilt/linux-x/toolchain/arm-eabi-4.4.3/bin路径下。

[plain] view plaincopyprint?

1. $ ls WORKING_DIRECTORY/prebuilt/linux-x/toolchain/arm-eabi-4.4.3/bin

我们编译下面一个编译脚本make_zImage.sh,让这个脚本去编译goldfish的内核:

[plain] view plaincopyprint?

1. #!/bin/bash 2. 3. export PATH=/home/farsight/andorid/android4.0/prebuilt/linux-x/toolchain/arm-eabi-4.4.3/bin:$PATH 4. export ARCH=arm 5. export SUBARCH=arm 6. export CROSS_COMPILE=arm-eabi- 7. make goldfish_armv7_defconfig 8. make

给make_zImage.sh添加可执行权限,然后执行该编译脚本:

[plain] view plaincopyprint?

1. $ chmod a&#;x make_zImage.sh 2. $ ./make_zImage.sh

当我们看到下面的结果时,表示goldfish的内核编译出来了:

4. Android编译过程分析

如果想要了解,Android的编译过程,可以参照下面三篇博文: Android编译系统详解(一): Android编译系统详解(二): Android编译系统详解(三): 1> source build/envsetup.sh:加载命令 2> lunch:选择目标平台编译选项 3> make:执行编译

我们按照编译步骤来分析编译过程的细节,最终添加自己的平台产品的编译选项。

4.1 source build/envsetup.sh

该命令是用来将envsetup.sh里的所有用到的命令加载到环境变量里去。主要几个命令如下:

[plain] view plaincopyprint?

1. function help( ) #显示帮助信息 2. function check_product() # 检查product 3. function check_variant() # 检查变量 4. function printconfig() #打印配置 5. function add_lunch_combo() #添加 lunch项目 6. function print_lunch_menu() #打印 lunch列表 7. function lunch() #配置lunch 8. function m() #make from top 9. function mm() #make from current directory . function mmm() #make the supplied directories

build/envsetup.sh其主要作用如下:

ü 加载了编译时使用到的函数命令,如:help,lunch,m,mm,mmm等 ü 添加了两个编译选项:generic-eng和simulator,这两个选项是系统默认选项 ü 查找vendor/*/*/vendorsetup.sh和device/*/*/vendorsetup.sh,也就是说从vendor/<厂商目录>/<平台设备目录>/目录和device/<厂商目录>/<平台设备目录>/目录下,查找vendorsetup.sh,如果找到的话,加载执行它,添加厂商自定义产品的编译选项。

如果想要添加自己的目标设备编译选项,我们就要在device或vendor目录下创建设备厂商,然后在设备厂商目录下,创建一个vendorsetup.sh文件,在里面添加上自己的编译项。

[plain] view plaincopyprint?

1. $mkdir -p device/farsight/fsdevice 2. $touch device/farsight/fsdevice/vendorsetup.sh 3. $echo "add_lunch_combo fs-eng" > device/farsight/fsdevice/vendorsetup.sh

注: farsight:厂商名 fsdevice:平台设备名 fs-eng:自定义的目标产品名为fs,eng为编译目标类型 所有的编译项的&#;式都是:设备名-编译目标类型,编译目标类型为:eng,user,userdebug,三种类型之一(详细见3.1节)。

下面验证一下我们的结果,当在Android目录下,再次执行source build/envsetup.sh时,我们可以看到我们新添加的编译项:

4.2执行lunch full-eng

我们当然也可以直接执行lunch命令,然后在弹出菜单里面来选择我们的编译项,如下图所示:

注:我们添加的编译项这时已经存在了,但是如果你选择了它,在编译时会出错,因为我们还没有对应编译项的配置文件。

lunch命令可以带参数和不带参数,最终导出一些重要的环境变量,从而影响编译系统的编译结果。导出的变量如下(以lunch full-eng为例):

[plain] view plaincopyprint?

1. TARGET_PRODUCT=full 2. TARGET_BUILD_VARIANT=eng 3. TARGET_BUILD_TYPE=release

4.3执行make命令

当我们输入make命令后,就开始android系统的编译了,所有的Makefile都通过build/core/main.mk这个文件组织在一起,它定义了一个默认goals:droid,当我们在TOP目录下,敲make实际上就等同于我们执行make droid。

当make include所有的文件,完成对所有make文件的解析以后就会寻找生成droid的规则,依次生成它的依赖,直到所有满足的模块被编译好,然后使用相应的工具打包成相应的img。其中,config.mk,envsetup.mk,product_config.mk文件是编译用户指定平台系统的关键文件。Android的编译系统比较复杂,详细的说明请参照前面给出博文内容。

下面列出在编译过程中经常使用的一些命令:

[plain] view plaincopyprint?

1. source build/envsetup.sh:加载编译命令,产生编译选项 2. lunch或lunch xxx-yyy:打印编译选项菜单或指定编译选项,xxx表示产品,yyy表示编译类型 3. make:根据lunch选项,编译Android系统,最后产出为:system.img,ramdisk.img,userdate.img 4. m:和make命令一样 5. mm:从当前目录下开始向下编译目标 6. mmm:指定一个目录,仅编译指定目录下的目标 7. make snod:只将out/target/product/XXX/system/目录下的内容打包生成system.img,不会检查依赖关系 8. make bootimage:只将out/target/product/XXX/root/目录下的内容打包生成ramdisk.img

文章来源:华清远见嵌入式学院 讲师博文,原文地址: . (文章转载请注明出处)

windows下的android开发环境搭建(基于Eclipse) 1、从Oracle官方网站上下载最新版本的JDK:

搭建Android开发环境 搭建之前,楼主语句题外话,作为一名开发人员,在安装软件的时候,设置的安装路径,不要用中文,不要有空,因为很多东西都是外国人的,他们的

Linux下Android开发环境搭建 Linux下Android开发环境搭建1、系统环境[android@localhost~]$uname-aLinuxlocalhost.localdomain2.6.-.el6.i#1SMPWedSep::EDTiiiGNU/Linux[android@localhost~]$lsb_releas

标签: 深入浅出android开发

本文链接地址:https://www.jiuchutong.com/biancheng/368604.html 转载请保留说明!

上一篇:window7下搭建cocos2d-x android开发环境【图文示例 不使用cygwin】(cocos2dx环境搭建)

下一篇:windows下的android开发环境搭建(基于Eclipse)(Windows下的C语言编译器)

  • 个人所得税可以退吗
  • 收到个人开票会计分录怎么做
  • 销项税额和进项税额发票怎么区别
  • 个人接受现金捐赠的例子
  • 子公司分红母公司缴税吗
  • 小规模给一般纳税人开专票能抵扣吗
  • 融资租赁的长期投资包括
  • 进口货物关税计入成本吗
  • 暂估入库的材料领用时如何做账
  • 建安企业无收入怎么结转成本?
  • 换汇成本跟进项有关系吗
  • 工资个税合理避税
  • 将自产产品无偿赠送 会计处理
  • 房产代理公司收客户钱违法
  • 床垫增值税税率是多少
  • 异地 发票
  • 外籍人员取得数月奖金怎么交税
  • 公司员工补充医疗保险方案
  • 在王者荣耀中怎么找个妹子
  • windows10开机很卡
  • 怎么解决百度打不开页面
  • 如何使用ChapGPT
  • 家具厂打磨工工作图片
  • 股权和投票权的关系是什么关系
  • 园林绿化工程公司电话
  • 企业接受个人捐赠
  • 手机测wifi网速准不准
  • 新企业办理地税登记流程
  • 职工医疗保险补交6万与交居民每交300哪个合算?
  • 捐赠支出税前扣除条件
  • 小孩不爱吃蔬菜怎么办?
  • vue项目eslint配置
  • 一搬纳税人
  • 管家婆软件如何做账
  • 职工医保报销后病情会泄露给单位吗
  • python opencv如何获取图片尺寸
  • 尚未抄税无法申报
  • 增值税发票有什么用途和作用
  • 主营业务成本可以设置二级科目吗
  • 对公给个人转账有风险吗
  • SQL Server 2008中SQL之WaitFor使用介绍
  • 个体工商户核算方式填什么
  • 清算所得税计税基础
  • 项目对公司的战略意义
  • 货物已发出可以退款吗
  • 费用发票可以不抵扣进项税吗
  • 公司给别人公司过账应该注意哪些
  • 利息资本化的利弊
  • 新准则印花税计提会计分录
  • 其它应付款核销法律意见书
  • 转出未交增值税借方余额怎么处理
  • 怎么注册电子邮箱号
  • 财报实收资本
  • 汇总帐凭证处理
  • 医疗机构药库设置标准
  • Ubuntu16.04 server下配置MySQL,并开启远程连接的方法
  • xp系统打开注册表
  • Ubuntu Kylin 14.10默认的屏幕分辨率怎么更改?
  • centos如何挂载镜像
  • win10怎么禁止用户安装程序
  • WINDOWS命令行为什么删除速度很快
  • ssgrate.exe - ssgrate是什么进程
  • windows7播放器在哪找
  • netfilter/iptables模块编译及应用
  • linux虚拟空间
  • 文件视图分为哪几种
  • unity的粒子系统在哪
  • 图片加载完成再加载
  • ExtJS TabPanel beforeremove beforeclose使用说明
  • jquery validate.js表单验证入门实例(附源码)
  • cocos2dx怎么用
  • Unity 管理www类访问的写法
  • js实现框选
  • python 解析算法
  • 非涉密网络严禁什么
  • 宁夏电子税务局官网登录入口首页
  • 辽宁省财政局会计网
  • 江西省税务局官网
  • 开票时间超时怎么办
  • 印尼贸易政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设