Android系统和内核编译命令
一、Introduction今天我们就来谈谈如何在Ubuntu平台上面编译android源码,我的是ubuntu10.04版本,在进行编译流程讲解之前我想讲一下 make 、make snod 、make kernel的作用,m、mm、mmm它们的作用以及区别。 - make: 编译源码,生成相应的系统镜像文件。 - make snod: 重新生成一个system.img系统镜像文件 - make kernel: 编译内核(可选)一般根据envsetup.sh文件内容而论- m: Makes from the top of the tree(编译全部模块)。 - mm: Builds all of the modules in the current directory(编译当前目录下的所有模块)。 - mmm: Builds all of the modules in the supplied directories(编译指定目录下的所有模块)。二、 编译Android source以及SDK 2.1、完全编译 使用make编译并生成镜像 ~$: cd ~/android/src ~$: make映像编译成功后会在目录 ~/android/src/out/target/product/generic 下产生一些image文件 ramdisk.img system.img userdata.img android -info.txt我们可以通过启动模拟器来验证我们是否编译正确 ,注意,我们最好在system.img所在的目录下进行如下动作 ~$ emulator -kernel ~/android2.2/prebuilt/android-arm/kernel/kernel-qemu -ramdisk ramdisk.img -debug all -data userdata-qemu.img -system system.img -sysdir . -show-kernel -skin 800x480 如果能正确启动则说明完全编译成功啦。完全编译完后我们就可以使用make sdk命令做一次SDK的编译拉,步骤如下: ~$ cd ~/android/src ~$ make sdk 注意:如果需要build SDK,随着版本的不同,我们所需的环境也不同,编译android2.2之前的版本需要安装sun-java5-jdk, 而不是sun-java6-jdk,否则会出现如下错误: build/core/product_config.mk:207: WARNING: adding test OTA key ============================================ TARGET_PRODUCT=generic TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID= ============================================ Combining NOTICE files: out/target/product/generic/obj/NOTICE.txt Finding NOTICE files: out/host/linux-x86/obj/NOTICE_FILES/hash-timestamp Combining NOTICE files: out/host/linux-x86/obj/NOTICE.txt Package: out/target/product/generic/generic-img-eng.anjoy.zip SDK buildinfo: out/target/product/generic/sdk/sdk-build.prop Docs droiddoc: out/target/common/docs/dx javadoc: 错误 - 在 doclet 类 DroidDoc 中,方法 start 已抛出异常 java.lang.reflect.InvocationTargetException com.sun.tools.javac.code.Symbol$CompletionFailure: 未找到 sun.util.resources.OpenListResourceBundle 的类文件 所以,如果jdk版本不同的话就去官网下载一个或者在线安装一个吧 ,这里我就不多说拉sdk编译成功后会在~/android /src/out/host/linux-x86/sdk/ 生成sdk的文件目录和压缩包: android-sdk_eng.anjoy_linux-x86 android-sdk_eng.anjoy_linux-x86.zip 并在~/android /src/out/target/product/generic(generic是默认的产品名)下打包所有的映像文件: generic-img-eng.anjoy.zip生成的SDK目录结构为: /home/anjoy/android/src/out/host/linux-x86/sdk/android-sdk_eng.anjoy_linux-x86: 总计 32 drwxrwx--- 6 anjoy anjoy 4096 2011-06-27 17:48 . drwxr-x--- 3 anjoy anjoy 4096 2011-06-27 17:48 .. drwxrwx--- 2 anjoy anjoy 4096 2011-06-27 17:48 add-ons drwxrwx--- 14 anjoy anjoy 4096 2011-06-27 17:48 docs -rw-rw---- 1 anjoy anjoy 172 2011-06-27 17:50 documentation.html drwxrwx--- 3 anjoy anjoy 4096 2011-06-27 17:48 platforms -rw-rw---- 1 anjoy anjoy 225 2011-06-27 17:50 RELEASE_NOTES.txt drwxrwx--- 3 anjoy anjoy 4096 2011-06-27 17:50 tools 想很方便的使用生成的SDK只需要在.bashrc中增加: export PATH=$PATH:/home/anjoy/android/src/out/host/linux-x86/sdk/android-sdk_eng.anjoy_linux-x86/tools2.2、模块化编译 注意:在模块化编译之前我们一定要把envsetup.sh 脚本source 一下,或者你直接把envsetup.sh文件所在的路径配置到你个人的bashrc文件里面,这样你就不要每次都作source动作拉。envsetup.sh 提供了一些的bash函数定义,当运行了envsetup.sh后就可以使用help 命令来查看: ~$ help Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment: - croot: Changes directory to the top of the tree. - m : Makes from the top of the tree. - mm : Builds all of the modules in the current directory. - mmm : Builds all of the modules in the supplied directories. - cgrep: Greps on all local C/C++ files. - jgrep: Greps on all local Java files. - resgrep: Greps on all local res/*.xml files. - godir: Go to the directory containing a file. ... .. 其中对模块的编译有帮助的是tapas、m、mm、mmm这几个命令。 其中mmm 后面要跟模块的根目录,不是所有的目录下都有子模块,那些含有Android.mk 文件目录才是模块的根目录,模块名可以从Android.mk 的LOCAL_MODULE 或者LOCAL_PACKAGE_NAME 变量中得到。单独编译某模块,需要在mmm后面指定模块路径,例如编译application中的Launcher2: mmm packages/apps/Launcher2/或者在src目录下直接运行make module name: cd ~/android/src make Launcher2 2.3、增量编译的步骤 a、假如我们修改了某个模块下的代码,那么我们只需要从新编译这个模块就可以拉,而不需要整个工程的编译。b、编译所修改的代码所在模块,例如: cd ~/android/src mmm packages/apps/Launcher2 c、在~/android/src中运行: cd ~/android/src make snod d、该命令生成一个新的系统映像system.img,将这个系统映像拷贝至sdk下: cd ~/android/src cp out/target/product/generic/system.img /out/host/linux-x86/sdk/android-sdk_eng.anjoy_linux-x86/tools/lib/images/ OK,这样就完成了Android源码的编译以及SDK的生成拉 提醒:如果你是Ubuntu10.04系统 32位机上安装编译Android2.3源码,其步骤和注意事项如下:1.安装JDK6 对于Android2.3 系统,不要安装JDK5 ,应该安装最新的JDK6 。 如果安装了JDK6,Android会自动按64位编译,如果系统是32位的,会有编译错误,后面会说如何修改这个错误。 sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner" sudo apt-get update sudo apt-get install sun-java6-jdk sudo update-java-alternatives -s java-6-sun 安装完后,需要手动设置JAVA_HOME, JRE_HOME , CLASS_PATH为JDK6 的安装路径。2.进行编译android2.3 ~$ cd ~/android2.3 ~$ source build/envsetup.sh ~$ make在make的时候会提示出错:************************************************************You are attempting to build on a 32-bit system.Only 64-bit build environments are supported beyond froyo/2.2.************************************************************ 因为Android2.3默认是64位的系统上编译,需要手动修改build/core/main.mk,把这个判断部分注释掉: #ifneq (64,$(findstring 64,$(build_arch))) #$(warning ************************************************************) #$(warning You are attempting to build on a 32-bit system.) #$(warning Only 64-bit build environments are supported beyond froyo/2.2.) #$(warning ************************************************************) #$(error stop) #endif 重新make,如果是安装了JDK6版本,会又报错:Docs droiddoc: out/target/common/docs/api-stubsCould not load ‘clearsilver-jni’java.library.path = out/host/linux-x86/libmake: *** [out/target/common/docs/api-stubs-timestamp] Error 45make: *** Waiting for unfinished jobs….Could not load ‘clearsilver-jni’java.library.path = out/host/linux-x86/lib make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45我们只需要修改这几个文件,该回到32位编译环境即可: # external/clearsilver/cgi/Android.mk # external/clearsilver/java-jni/Android.mk # external/clearsilver/util/Android.mk # external/clearsilver/cs/Android.mk把上面这些文件内容的编译选项-m64 改成-m32 即可 重新make,大概不到一个小时就make完了。OK,大工告成
Android系统和内核编译命令相关推荐
- Android系统 linux内核按键驱动开发
Android系统 linux内核按键驱动开发 前言 刚入门的小白,在csdn的帮助下完成了第一个按键驱动,特写此文记录学习并分享给有需要的人. 1.修改设备树.dts 我是用的开发板是rp-rk32 ...
- 02 A33 Android系统源码编译
下载源码包,解包后进入Android-SDK/tools目录. 1 先安装dtc-master和fakeroot工具. dtc-master安装方法: 解包后,在源码目录下: make &&a ...
- 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上
博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813 本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...
- Android 9.0 内核编译实战(以一加6为例)
前人栽树后人乘凉- 我们这里用EX内核编译做个示范 https://github.com/flar2/OnePlus6/tree/ElementalX-3.00 1.同步代码啦 git clone h ...
- android 3.10. 内核,编译android 3.10内核源码时出错
最近我尝试为我的xiaomi mi4c交叉编译android内核. 要做到这一点,我已经下载并这样配置的工具链:从这里编译android 3.10内核源码时出错 git clone https://a ...
- 安卓9.0刷linux,Android 9.0 内核编译实战(以一加6为例)
前人栽树后人乘凉... 1.同步代码啦 git clone https://github.com/flar2/OnePlus6.git -b ElementalX-3.00 我这里直接这么干了.最好还 ...
- Android Studio 导入 Android 系统模块并编译和调试
FAQ: AS导入系统模块源码,并且能够编译调试,正常查看java doc ???? Android AOSP基础(五)Android Studio调试系统源码的三种方式 http://liuwang ...
- Android系统中通过shell命令实现wifi的连接控制
简介 工作中遇到一个"变态"的需求,在android系统中不通过java层控制wifi的连接(主要是修改ap的essid和password),而是需要通过native层实现对wif ...
- 如何选取 android 系统上的编译工具链
https://mdgsf.github.io/2020/07/23/miscellanea-cpu/ 先介绍一些基础背景知识. Intel. 我们一般买的电脑都是 Intel 的 CPU. AMD. ...
- Android编译默认英语,Android系统语言出厂编译设置为简体中文
Android系统默认的语言是英语,但是对于中国大陆Android产品厂商来说,不会出厂之后语言还是英语,到用户手里之后,用户自己设置成简体中文吧?有如果客户不懂英语,岂不是就不能设置系统语言了?所以 ...
最新文章
- 由游戏中加入“人脸识别”而引发的思考
- Oracle 12c 简单的jdbc使用
- The APR based Apache Tomcat Native library
- 中断和异常,陷阱的区别和联系
- python如何获取信息_如何使用Python获取系统信息?
- Delphi如果要追赶C#,最应该做的
- vue中mixins的理解
- cuba.platform_CUBA Platform 6.3的新增功能
- 【强化学习】PPO代码注释版本
- STM32工作笔记0048---Systick滴答定时器---延时函数讲解
- 高级Javascript调试——console.table()
- 怎么把vivo强行刷入鸿蒙系统,vivo手机如何强制刷机
- 125、什么是核心交换机的链路聚合、冗余、堆叠、热备份
- 从零开始搭建ROS智能小车@sp头子
- 银行招考计算机专业考什么,银行笔试一般都考什么?
- 速成实用硬笔字——最常用高频汉字前100
- Android OpenCV(三十二):霍夫直线检测
- Java Web关键字填空
- php导入表格 出错,PHPExcel导入数据出现问题
- flickr php,php – 获取Flickr集
热门文章
- 用通俗易懂的方式告诉你什么是EM算法
- python ljust函数,Python 字符串左对齐-Python 指定字符串左对齐-python ljust() 函数-python ljust() 函数用法-嗨客网...
- 八爪鱼导出到mysql数据库_数据导出到Oracle数据库的方法 - 八爪鱼采集器
- RestFul 风格规范
- Android Studio向项目中导入module
- Linux应用的c编程main函数参数argc,argv说明
- P3707 [SDOI2017]相关分析
- (转)C# System.Diagnostics.Process.Start使用
- Visual Studio 单元测试之六---UI界面测试
- WPF/Silverlight 控件的几幅继承关系图