Android的编译系统

合集下载

android源码编译及rom制作

android源码编译及rom制作
内部测试版本:Ubuntu10.04 Gingerbread (2.3.x) or newer:64 bit系统 工具:Python 2.5-2.7
GNU make 3.81-3.82 JDK 6(生成 Gingerbread 或更高版本) JDK 5(Froyo 或旧版本) Git 1.7 或更高版本 gcc/g++ 4.4 (其他版本编译出错)

设置Linux编译环境
安装JDK: Java6:
$ sudo add-apt-repository "deb / lucid partner" $ sudo apt-get update $ sudo apt-get install sun-java6-jdk
一整套编译 100GB 选择编译分支
建议:不要使用虚拟机安装ubuntu编译 1、编译花费时间长,需要内存大 2、如果配置低,可能会卡住不动 3、虚拟机连接手机有问题,很可能不识别,编译前需要从手机拉 配置数据;不能使用fastboot模式刷机

设置Linux编译环境
|-- prebuilt
(x86和arm架构下预编译的一些资源)
|-- sdk
(sdk及模拟器)
|-- system
(文件系统库、应用及组件——C语言)
|-- vendor
(厂商定制代码)

Android源码编译
初始化编译环境 下载代码树 编译 编译内核
sudo chmod a+rx /etc/udev/rules.d/51-android.rules sudo /etc/init.d/udev restart
3.重启adb服务(必须为sudo 已配置android环境变量)

android编译流程

android编译流程

android编译流程Android编译流程是将源代码转化为可执行的Android应用程序的过程。

编译流程包括以下几个主要步骤:1.获取源代码:首先,开发人员需要从Android Open Source Project (AOSP) 或者其他可靠的源代码库中获取Android源代码。

获取源代码可以通过使用版本控制工具如Git来完成。

2.准备构建环境:在编译之前,需要准备好构建环境。

这包括安装正确的开发工具、依赖库和配置。

- 开发工具:Android编译使用Java编程语言,因此需要安装Java Development Kit (JDK)。

同时还需要安装Android软件开发工具包(SDK),用于构建和测试Android应用。

- 依赖库:编译Android需要一些依赖库,包括C/C++编译器、make 工具、libc、libm和其他系统库。

这些库可以通过安装合适的软件包管理工具来获取。

-配置:开发人员需要根据构建计划配置构建环境。

这包括选择编译器版本、构建目标平台以及其他构建选项。

3.设置环境变量:为了让系统能够找到正确的构建工具和依赖库,开发人员需要设置一些环境变量。

这可以通过在命令行终端中设置系统环境变量或者使用脚本文件进行配置来实现。

4.执行初始化构建:在进行实际的编译之前,需要执行一些初始化构建操作。

这包括解压源代码文件、创建构建描述文件、设置编译选项等。

5.编译源代码:编译源代码是整个编译流程的核心步骤。

在此步骤中,构建系统将递归地遍历整个源代码树,并将每个源文件编译成目标文件。

编译过程通常分为以下几个阶段:-预处理:在编译之前,构建系统会首先对源代码进行预处理。

预处理器将处理预处理指令、宏定义等,并将源代码转化为可供编译器识别的形式。

-编译:编译器将源代码编译成汇编语言或者中间代码。

-汇编:汇编器将汇编语言代码转化为机器可执行的二进制指令。

Android编译系统中的Android.bp

Android编译系统中的Android.bp

Android编译系统中的Android.bpAndroid.bp,是⽤来替换Android.mk的配置⽂件。

它使⽤框架来解析,最终转换成⽂件。

与Android.mk不同的是,Android.bp是纯粹的配置⽂件,不包含分⽀、循环等流程控制,也不能做算数、逻辑运算。

与此同时,⽂件也是如此。

这就产⽣了⼀些新的问题与需求——在Android项⽬上进⾏选择编译、解析配置、转换成等——应运⽽⽣。

其实就相当于Makefile编译系统的核⼼,即build/make/core/下⾯的内容。

它负责提供Android.bp的含义定义与解析,并将之转换为⽂件。

和都是由写的项⽬。

从Android Nougat开始,prebuilts/go/⽬录下新增了所需的运⾏环境,在编译时使⽤。

Android.bp以及相关⽀持,从Android Nougat开始加⼊,从Android Oreo(8.0)开始默认开启。

如果需要在Android Nougat的版本使⽤,需要在执⾏编译时添加变量。

Android.mk转换Android.bp实例下⾯,以⼀个AOSP上的简单模块,system/core/sdcard/Android.mk,来做为案例。

1.LOCAL_PATH := $(call my-dir)2.3.include $(CLEAR_VARS)4.5.LOCAL_SRC_FILES := sdcard.cpp fuse.cpp6.LOCAL_MODULE := sdcard7.LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror8.LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser9.10.LOCAL_SANITIZE := integer11.12.include $(BUILD_EXECUTABLE)这是⼀个编译⼆进制可执⾏⽂件的⼩模块,内容⾮常简单。

快速搭建android5.1系统源码编译环境

快速搭建android5.1系统源码编译环境

1.安装ubuntu编译Android 5.1需要ubuntu 64位的操作系统,在百度上搜索ubuntu,到ubuntu官网下载Ubuntu 64位桌面(desktop)版本,进行安装。

安装完成后,需要更新一下ubuntu源。

Android5.1系统源码编译的磁盘空间要求较高,ubuntu 的磁盘空间需要分配60G以上,内存需要4G以上,否则容易出现编译错误等问题。

2.安装openjdk-7-jdkAndroid 5.1 用到的jdk不再是Oracle 的jdk ,而是开源的openjdk,在ubuntu安装好后,使用如下命令安装jdk:$sudo apt-get install openjdk-7-jdk安装好后,设置环境变量:$sudo gedit /etc/profile在profile文件末尾加上:JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/PATH=$PATH:$HOME/bin:$JAVA_HOME/binexport JAVA_HOMEexport PATH3.安装编译依赖的软件使用如下命令安装依赖软件:sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc4.配置Cache使用如下命令配置cache:$sudo apt-get install ccache$source ~/.bashrc5.编译android系统源码1,初始化编译环境$. build/envsetup.sh2,选择编译目标包ps:lunch的方式有很多中,可以使用lunch命令查看,我使用最常用的$lunch full-eng3,编译$makeps: 1.make后面可以跟参数:如你的机器是四核四线程,可以使用make -j4,这样速度更快,但编译时使用的内存更多。

android img 的编译过程

android img 的编译过程

android img 的编译过程
Android img的编译过程通常包括以下步骤:
在Android源码根目录下执行初始化环境命令:source build/envsetup.sh。

使用lunch命令选择需要编译的版本,如:lunch full-eng。

执行make命令进行编译,如:make bootimage,这个命令会编译生成boot.img。

boot.img的生成过程主要是将kernel、ramdisk、dtb打包到一起。

在这个过程中,需要用到dtb.img,如果dtb.img过大导致编译不过,那么需要分析dtb.img的生成过程。

dtb.img实际上是将kernel下的dts文件重新命名后拷贝到out目录下生成的。

此外,编译Android系统时,make命令实际上是在执行Makefile文件。

Android系统的Makefile文件在源码根目录下,并且这个Makefile文件会包含另一个主要的Makefile文件,即main.mk。

在main.mk中,定义了一个默认目标droid,这个目标依赖于droid_targets。

droid_targets又依赖于droidcode和dist_files两大伪目标。

当执行make命令时,make工具会检查并解析这些依赖关系,然后按照依赖顺序生成目标文件。

Android编译命令

Android编译命令

Android编译命令⼀、引⾔先看下⾯⼏条指令,相信编译过Android源码的⼈都再熟悉不过的。

source setenv.shlunchmake -j12记得最初刚接触Android时,同事告诉我⽤上⾯的指令就可以编译Android源码,指令虽短但过⼏天就记不全或者忘记顺序,每次编译时还需要看看⾃⼰的云笔记,冰冷的指令总是难以让我记忆。

后来我决定认真研究下这个指令的含义。

知其然还需知其所以然,这样能更深层次的理解并记忆,才能与⾃⾝的知识体系建⽴强连接,或许还有意外收获,果然如此,接下来跟⼤家分享⼀下在研究上述⼏条指令含义的过程中,深⼊了解到的Android Build(编译)系统。

⼆、编译命令准备好编译环境后,编译Android源码的第⼀步是source build/envsetup.sh,其中source命令就是⽤于运⾏shell脚本命令,功能等价于”.”,因此该命令也等价于. build/envsetup.sh。

在⽂件envsetup.sh声明了当前会话终端可⽤的命令,这⾥需要注意的是当前会话终端,也就意味着每次新打开⼀个终端都必须再⼀次执⾏这些指令。

起初并不理解为什么新开的终端不能直接执⾏make指令,到这⾥总算明⽩了。

接下来,解释⼀下本⽂开头的引⽤的命令:source setenv.sh //初始化编译环境,包括后⾯的lunch和make指令lunch //指定此次编译的⽬标设备以及编译类型make -j12 //开始编译,默认为编译整个系统,其中-j12代表的是编译的job数量为12。

所有的编译命令都在envsetup.sh⽂件能找到相对应的function,⽐如上述的命令lunch,make,在⽂件⼀定能找到function lunch(){...}function make(){...}source envsetup.sh,需要cd到setenv.sh⽂件所在路径执⾏,路径可能在build/envsetup.sh,或者integrate/envsetup.sh,再或者不排除有些⼚商会封装⾃⼰的.sh脚本,但核⼼思路是⼀致的。

搭建android源码编译环境

搭建android源码编译环境

搭建android源码编译环境-何1制作启动盘(图仅供参考)1.1准备工作(1)准备1G以上的U盘一个;(2)下载Ubantu 12.04光盘镜像文件,如:ubuntu-12.04.2-desktop-i386,不是很大,约700M;注意:该过程会将你的U盘格式化,里面所有的数据均会丢失,请提前做好备份;(3)下载UltraISO;(4)同时,准备一空磁盘(D、E、F均可),留待安装Ubantu。

1.2制作启动盘(1)打开UltraISO软件界面,打开你所需要写入U盘的镜像,就是你所下载的.ISO系统镜像。

(2)点击—>启动—>写入硬盘镜像—>便捷启动—>写入新的硬盘主引导记录(MBR)—>USB+ZIP+—>写入。

打开系统镜像写入镜像到U盘,注意写入方式,点击写入写入成功之后,制作启动盘成功。

2用启动盘安装Ubantu系统2.1设置BIOS启动模式(1)重启电脑进入BIOS,设置从USB启动-----USB-HDD(USB硬盘模式),BIOS版本会有不同,设置方式也略有不同。

2.2启动盘安装Ubantu系统(1)插入启动盘,重启电脑进到了ubuntu的安装界面,选择安装语言,这里的语言仅仅指安装过程中的语言(支持中文安装),下拉左侧选择“中文(简体)”,然后点击“安装Ubantu”。

功后进行,不然安装过程会很慢,选择“继续”。

项,人工进行分区。

(下图为重装Ubantu,仅供参考)(4)在磁盘管理中删除一个空盘(之前准备的空磁盘),此时磁盘中有“空闲”的空间,如下图:(5)创建新分区,选择“空闲”磁盘136000m,点击下面的“添加”得到如下界面,选择“主分区”,输入135000空间大小为根目录,文件格式一般选择“Ext4日志文件系统”,挂载点选择“/”.(6)交换分区,Ubuntu中必须创建至少两个分区,一个是刚才我们创建的根目录,一个是交换分区swaparea,将剩下的1000Mb分给该分区(交换分区大小设置为你的物理内存大小或少于内存,不能大于你的物理内存).(7)点击“现在安装”,ubuntu已经开始复制文件了,安装正在进行,接下来会让你选择所在地,为的是对UMT时间进行调整.(8)接下来选择Keyboardlayout键盘布局,一般情况下保持默认,你可以测试你的键位是否正确,如果设置错误也可以在进入系统之后进行更改.(9)接下来输入你的用户信息即密码.(10)几分钟过后Ubuntu就安装好了,重启电脑可进入Ubantu系统.3安装jdk1.63.1替换源列表(1)首先备份Ubuntu 12.04源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表,有备无患嘛)(2)修改更新源sudo gedit /etc/apt/sources.list (打开Ubuntu 12.04源列表文件)用以下源列表替换Ubuntu 12.04源列表:#deb cdrom:[Ubuntu 12.04.2 LTS _Precise Pangolin_ - Release i386 (20130213)]/ precise main restricted# See /community/UpgradeNotes for how to upgrade to# newer versions of the distribution.deb /ubuntu/ precise main restricteddeb-src /ubuntu/ precise main restricted## Major bug fix updates produced after the final release of the## distribution.deb /ubuntu/ precise-updates main restricteddeb-src /ubuntu/ precise-updates main restricted## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team. Also, please note that software in universe WILL NOT receive any## review or updates from the Ubuntu security team.deb /ubuntu/ precise universedeb-src /ubuntu/ precise universedeb /ubuntu/ precise-updates universedeb-src /ubuntu/ precise-updates universe## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to## your rights to use the software. Also, please note that software in## multiverse WILL NOT receive any review or updates from the Ubuntu## security team.deb /ubuntu/ precise multiversedeb-src /ubuntu/ precise multiversedeb /ubuntu/ precise-updates multiversedeb-src /ubuntu/ precise-updates multiverse## N.B. software from this repository may not have been tested as## extensively as that contained in the main release, although it includes## newer versions of some applications which may provide useful features.## Also, please note that software in backports WILL NOT receive any review## or updates from the Ubuntu security team.deb /ubuntu/ precise-backports main restricted universe multiversedeb-src /ubuntu/ precise-backports main restricted universe multiversedeb /ubuntu precise-security main restricteddeb-src /ubuntu precise-security main restricteddeb /ubuntu precise-security universedeb-src /ubuntu precise-security universedeb /ubuntu precise-security multiversedeb-src /ubuntu precise-security multiverse## Uncomment the following two lines to add software from Canonical's## 'partner' repository.## This software is not part of Ubuntu, but is offered by Canonical and the## respective vendors as a service to Ubuntu users.# deb /ubuntu precise partner# deb-src /ubuntu precise partner## This software is not part of Ubuntu, but is offered by third-party## developers who want to ship their latest software.deb /ubuntu precise maindeb-src /ubuntu precise main(4)通知ubuntu启用新的更新源sudo apt-get update3.2安装jdk 1.6(1)sudo apt-get install sun-java6-jdk(2)update-alternatives --config java,查看可选择的jdk列表,选择默认使用自己安装的jdk.3.3安装其他工具sudo apt-get install build-essentialsudo apt-get install makesudo apt-get install gccsudo apt-get install g++sudo apt-get install libc6-devsudo apt-get install flexsudo apt-get install bisonsudo apt-get install patchsudo apt-get install texinfosudo apt-get install libncurses-devsudo apt-get install git-core gnupg //(gnupg系统可能已自带)sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curlsudo apt-get install ncurses-devsudo apt-get install zlib1g-devsudo apt-get install valgrind(可选,有21M大,我觉得一般人是用不到的)sudo apt-get install python2.5 (实际上不用装,Ubuntu 8.04 已经自带)4 android源码编译4.1编译源码拷贝androidsrc源码压缩包到主文件夹中,用文件归档管理器打开,提取到主文件夹中.打开终端:cd /home/用户名/androidsrc/make注:编译过程中会碰到一些错误,在百度中搜索一些资料解决。

Android编译系统(Android.mk文件详解)

Android编译系统(Android.mk文件详解)

Android编译系统(Android.mk⽂件详解)【Android-NDK(Native Development Kit) docs⽂档】NDK提供了⼀系列的⼯具,帮助开发者快速开发C(或C++)的动态库,并能⾃动将so和java应⽤⼀起打包成apk。

Android.mk⽂件是GNU Makefile的⼀⼩部分,它⽤来对Android程序进⾏编译。

因为所有的编译⽂件都在同⼀个 GNU MAKE 执⾏环境中进⾏执⾏,⽽Android.mk中所有的变量都是全局的。

因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义。

⼀个Android.mk⽂件可以编译多个模块,每个模块属下列类型之⼀:1)APK程序⼀般的Android程序,编译打包⽣成apk⽂件2)JAVA库java类库,编译打包⽣成jar⽂件3)C\C++应⽤程序可执⾏的C\C++应⽤程序4)C\C++静态库编译⽣成C\C++静态库,并打包成.a⽂件5)C\C++共享库编译⽣成共享库(动态链接库),并打包成.so⽂,有且只有共享库才能被安装/复制到您的应⽤软件(APK)包中。

可以在每⼀个Android.mk file 中定义⼀个或多个模块,你也可以在⼏个模块中使⽤同⼀个源代码⽂件。

编译系统为你处理许多细节问题。

例如,你不需要在你的 Android.mk 中列出头⽂件和依赖⽂件。

编译系统将会为你⾃动处理这些问题。

这也意味着,在升级 NDK 后,你应该得到新的toolchain/platform⽀持,⽽且不需要改变你的 Android.mk ⽂件。

注意,NDK的Anroid.mk语法同公开发布的Android平台开源代码的Anroid.mk语法很接近,然⽽编译系统实现他们的⽅式却是不同的,这是故意这样设计的,可以让程序开发⼈员重⽤外部库的源代码更容易。

在描述语法细节之前,咱们来看⼀个简单的"hello world"的例⼦,⽐如,下⾯的⽂件:sources/helloworld/helloworld.csources/helloworld/Android.mk'helloworld.c'是⼀个 JNI 共享库,实现返回"hello world"字符串的原⽣⽅法。

【转】Android编译系统详解(三)——编译流程详解

【转】Android编译系统详解(三)——编译流程详解

【转】Android编译系统详解(三)——编译流程详解原⽂⽹址:本⽂原创作者: 欢迎转载,请注明出处和1.概述编译Android的第三步是使⽤mka命令进⾏编译,当然我们也可以使⽤make –j4,但是推荐使⽤mka命令。

因为mka将⾃动计算-j选项的数字,让我们不⽤纠结这个数字到底是多少(这个数字其实就是所有cpu的核⼼数)。

在编译时我们可以带上我们需要编译的⽬标,假设你想⽣成recovery,那么使⽤mka recoveryimage,如果想⽣成ota包,那么需要使⽤mka otapackage,后续会介绍所有可以使⽤的⽬标。

另外注意有⼀些⽬标只是起到修饰的作⽤,也就是说需要和其它⽬标⼀起使⽤,共有4个⽤于修饰的伪⽬标:1) showcommands 显⽰编译过程中使⽤的命令2) incrementaljavac⽤于增量编译java代码3) checkbuild⽤于检验那些需要检验的模块4) all如果使⽤all修饰编译⽬标,会编译所有模块研究Android编译系统时最头疼的可能是变量,成百个变量我们⽆法记住其含义,也不知道这些变量会是什么值,为此我专门做了⼀个编译变量的参考⽹站,你可以在该⽹站查找变量,它能告诉你变量的含义,也会给出你该变量的⽰例值,另外也详细解释了编译系统⾥每个Makefile的作⽤,这样你在看编译系统的代码时不⾄于⼀头雾⽔。

编译的核⼼⽂件是和,main.mk主要作⽤是检查编译环境是否符合要求,确定产品配置,决定产品需要使⽤的模块,并定义了许多⽬标供开发者使⽤,⽐如droid,sdk等⽬标,但是⽣成这些⽬标的规则主要在Makefile⾥定义,⽽内核的编译规则放在build/core/task/kernel.mk我们将先整体介绍main.mk的执⾏流程,然后再针对在Linux上编译默认⽬标时使⽤的关键代码进⾏分析。

Makefile主要定义了各个⽬标的⽣成规则,因此不再详细介绍它的执⾏流程,若有兴趣看每个⽬标的⽣成规则,可查看2. main.mk执⾏流程2.1 检验编译环境并建⽴产品配置1) 设置Shell变量为bash,不能使⽤其它shell2) 关闭make的suffix规则,rcs/sccs规则,并设置⼀个规则: 当某个规则失败了,就删除所有⽬标3) 检验make的版本,cygwin可使⽤任意版本make,但是linux或者mac只能使⽤3.81版本或者3.82版本4) 设置PWD,TOP,TOPDIR,BUILD_SYSTEM等变量,定义了默认⽬标变量,但是暂时并未定义默认⽬标的⽣成规则5) 包含,该makefile定义了两个⽬标help和out, help⽤于显⽰帮助,out⽤于检验编译系统是否正确6) 包含,config.mk作了很多配置,包括产品配置,包含该makefile后,会建⽴输出⽬录系列的变量,还会建⽴PRODUCT系列变量,后续介绍产品配置时,对此会有更多详细介绍7) 包含,该makefile会包含所有⼯程的CleanSpec.mk,写了CleanSpec.mk的⼯程会定义每次编译前的特殊清理步骤,cleanbuild.mk会执⾏这些清除步骤8) 检验编译环境,先检测上次编译结果,如果上次检验的版本和此次检验的版本⼀致,则不再检测,然后进⾏检测并将此次编译结果写⼊2.2 包含其它makefile及编译⽬标检测1) 如果⽬标⾥含有incrementaljavac,那么编译⽬标时将⽤incremental javac进⾏增量编译2) 设置EMMA_INSTRUMENT变量的值,emma是⽤于测试代码覆盖率的库3) 包含,该makefile定义了许多辅助函数4) 包含,该makefile定义了⾼通板⼦的⼀些辅助函数及宏5) 包含,该makefile定义了优化dex代码的⼀些宏6) 检测编译⽬标⾥是否有user,userdebug,eng,如果有则告诉⽤户放置在buildspec.mk或者使⽤lunch设置,检测TARGET_BUILD_VARIANT变量,看是否有效7) 包含, PDK主要是能提⾼现有设备升级能⼒,帮助设备制造商能更快的适配新版本的android2.3 根据TARGET_BUILD_VARIANT建⽴配置1) 如果编译⽬标⾥有sdk,win_sdk或者sdk_addon,那么设置is_sdk_build为true2) 如果定义了HAVE_SELINUX,那么编译时为build prop添加属性ro.build.selinux=13) 如果TARGET_BUILD_VARIANT是user或者userdebug,那么tags_to_install += debug 如果⽤户未定义DISABLE_DEXPREOPT为true,并且是user模式,那么将设置WITH_DEXPREOPT := true,该选项将开启apk的预优化,即将apk分成odex代码⽂件和apk资源⽂件4) 判断enable_target_debugging变量,默认是true,当build_variant是user时,则它是false。

linux 安卓内核编译的方法

linux 安卓内核编译的方法

linux 安卓内核编译的方法Linux操作系统以其强大的功能和灵活的配置,吸引了越来越多的开发者。

安卓系统作为一款开源的移动设备操作系统,其内核编译对于开发者来说也是必不可少的技能。

本文将向大家介绍如何使用Linux系统进行安卓内核的编译。

一、准备工作1. 确保你的Linux系统已经安装了基本的开发工具,如gcc、make、patch等。

2. 下载安卓内核源码,可以选择从官网或者github获取。

3. 创建一个用于存放编译结果的目录,如/home/user/kernel_build。

二、配置内核1. 打开终端,导航到源码目录。

2. 使用patch工具对内核源码进行修补,确保源码与当前Linux 内核版本兼容。

3. 修改Makefile文件,指定编译选项和目标。

三、编译内核1. 运行make命令进行第一轮编译,生成中间文件。

2. 运行make menuconfig,进入配置界面,对内核选项进行进一步配置。

3. 退出menuconfig,再次运行make命令进行第二轮编译。

4. 等待编译完成,检查是否有错误信息。

四、安装驱动和模块1. 将驱动程序和模块提取出来,放在适当的目录下。

2. 运行make install命令,将驱动和模块安装到内核中。

3. 验证驱动和模块是否成功安装,可以运行一些测试程序来检查。

五、打包和测试1. 将编译后的内核映像打包,可以使用kimage工具或其他适合的打包工具。

2. 将打包后的内核映像刷入模拟器或实际设备中,进行测试。

3. 运行一些应用程序,检查内核是否能够正常工作。

4. 对测试结果进行分析和优化,根据实际需求进行进一步的调整和修改。

总结:安卓内核编译是一项需要一定技能的任务,但通过本文所述的步骤,你可以轻松完成这个过程。

在编译过程中,需要注意一些细节问题,如源码的兼容性、配置选项的选择等。

此外,为了确保编译的成功率,建议在虚拟机中进行操作,以避免对真实系统造成损坏。

Android通过源码编译apk获得系统权限

Android通过源码编译apk获得系统权限

Android通过源码编译apk获得系统权限Android通过源码编译apk获得系统权限/archives/android-source-code-compiled-by-apk-to-obtain-system-privileges.htmlAndroid中的应用程序如何获得系统权限?在 android 的API中有提供Sy stemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要root权限或者运行与系统进程中才可以用。

本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。

第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。

2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。

第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:eclipse源码编译,无需用make来编译(android源码目<D:\my android_mx27>):1、首先,AndroidManifest.xml中manifest节点中加入android:sharedUserId="android.uid.system"这个属性2、用eclipse编译出apk(ClockSetting.apk)文件,但这个文件不能用,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件3、使用当前android系统(android系统可能不同)的platform密钥来重新给apk文件签名(可能还未用用户米要签名)。

Android编译环境的配置

Android编译环境的配置

Android 在ubuntu10.04 编译环境的配置一.软件的安装1.Linux系统是安装在Vmware中,所以必须下载Vmware,这里采用的版本为Vmware.Workstation.v7.1.0.Lite.rar下载地址:(暂时没有找到)安装完vmware后,可以让它自动检测新版本并升级。

2.下载Ubuntu,这里采用的版本是10.04,文件名为ubuntu-10.04-desktop-i386.iso下载地址为:/lucid/。

3.下载完成后,安装ubuntu10.04,由于采用vmware安装,故只需简单设置即可,其他采用默认设置安装,需要注意的是vmware的空间应该分配大一些(最好是大于60GB),不然,以后要扩展空间时比较麻烦。

4.Ubuntu的默认安装的用户不是超级用户root,因此要使用超级用户root,必须通过下面的命令来开启:(1).使用默认用户进入ubuntu的界面,打开shell,(2).在shell中输入命令:sudo passwd root ,然后按确认键;(3).按下确认键后,系统要求你设置root用户的密码,连续输入2次后,root用户的密码设置成功;(4).重新启动系统即可使用超级用户登陆.5.使用超级用户登陆后,开始配置Android的编译环境:(1).由于ubuntu的软件中心提供的是java6,而编译Android需要的是java5,为了保证采用命令安装时系统能够自动找到需要的java5,我们必须修改apt里面的sources.list:root@ubuntu:/# vim /etc/apt/sources.list在该文件末添加如下网址:# update the sun-java5-jdk from as follow:deb /ubuntu/ jaunty multiversedeb /ubuntu/ jaunty-updates multiverse(2).采用命令安装所需软件:root@ubuntu:/# sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-devzlib1g-dev(由于apt-get能够自动区分命令,故采用一条命令即可.此命令安装的软件有:git-core ;gnupg ;sun-java5-jdk ;flex ;bison;gperf ;libsdl1.2-dev ;libesd0-dev ;libwxgtk2.6-dev ;build-essential ;zip ;curl ;libncurses5-dev ;zlib1g-dev;当安装到sun-java5-jdk时,需要手动点击协议。

Android6.0源码编译环境搭建

Android6.0源码编译环境搭建

Android6.0源码编译环境搭建Android 6.0源码编译环境搭建环境搭建1、安装安装Git,curl等依赖组件对于AOSP 需要安装sudo apt-get install Git-core gnupg flex bison gperf build-essential \zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \libgl1-mesa-dev libxml2-utils xsltproc unzip2.安装openjdk-7-jdk sudo apt-get update sudo apt-get install openjdk-7-jdk sudo update-alternatives --config Java sudo update-alternatives --config javacUbuntu16.04的安装源已经默认没有openjdk7了,所以要⾃⼰⼿动添加仓库,如下: sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-7-jdk3、ubuntu安装软件异常导致其他软件不能安装电脑有点卡我给强制关闭了,然后重启打开软件管理中⼼,直接闪退!之后不能安装任何软件(包括命令)。

显⽰:E: 软件包Sougou Pinyin需要重新安装,但是我⽆法找到相应的安装⽂件。

各种autoremove、remove、purge都不⾏。

然后:sudo dpkg --remove --force-remove-reinstreq Sougou Pinyin解决问题。

android user userdebug 编译参数

android user userdebug 编译参数

android user userdebug 编译参数在Android的编译系统中,`userdebug`是一种构建类型,它提供了比`user`构建类型更多的调试功能。

当您选择`userdebug`构建类型时,系统会编译一些额外的调试组件和功能,这使得开发人员可以更容易地进行调试和测试。

在Android源代码的根目录下,有一个名为`build/target/product/build_configs.mk`的文件。

在这个文件中,您可以找到关于各种构建类型的定义。

对于`userdebug`构建类型,您可以找到类似以下的定义:```makefileuserdebug \PRODUCT_NAME := $(TARGET_PRODUCT) \$(ifneq ($(strip $(TARGET_BUILD_VARIANT)),), \PRODUCT_NAME := $(PRODUCT_NAME)-unSpecified-minimal) \PRODUCT_BRAND := google \PRODUCT_MODEL := Android Open Source Project Device \PRODUCT_DEVICE := generic \PRODUCT_LOCALES := \PRODUCT_DEFAULT_LOCALE := en-US \PRODUCT_MANUFACTURER := Android Open Source Project \PRODUCT_SYSTEM_VERSION := $(TARGET_BUILD_SYSTEM_VERSION) \...```这里可以看到`userdebug`构建类型有一些特定的设置,例如它指定了产品名称、品牌、模型、设备、默认语言等。

这些设置可以帮助确定编译哪些特定的功能和组件。

如果您想了解更多关于`userdebug`构建类型的详细信息,可以查看Android的官方文档或源代码中的相关文件。

android源码编译流程

android源码编译流程

android源码编译流程Android系统源代码是开源的,任何有兴趣的人都可以下载、阅读和修改它。

但是,为了保证该系统在各种硬件上的流畅运行,需要对Android源码进行编译。

以下是Android源码编译的流程:1. 安装编译环境编译Android源码需要安装一些必要的工具。

首先需要安装JDK(Java Development Kit),其次需要安装Android SDK(Software Development Kit)和NDK(Native Development Kit)。

此外,还需要安装Git和Repo工具,用于获取和同步源代码。

2. 下载源代码在安装好编译环境之后,需要从官方网站下载Android源代码。

这个过程可能需要一段时间,并且需要高速稳定的网络连接。

下载完成后,将源代码存储在本地磁盘上。

3. 初始化和同步源代码使用Repo工具初始化本地文件夹和Git工作区。

初始化完成之后,需要对代码库进行同步操作以确保源代码是最新的。

同步的过程可能需要几个小时,取决于网络速度和源代码树的大小。

4. 设置编译环境针对不同的设备和平台,需要配置不同的编译环境。

在此步骤中,需要设置所需的环境变量和其他相关的参数,例如,配置JDK路径、选择目标平台和设备、设置NDK路径等等。

5. 生成MakefileAndroid源代码使用GNU Make来构建,因此需要生成一个Makefile列表。

这个过程使用根目录下的build/envsetup.sh文件来完成。

一旦生成了Makefile,就可以开始编译Android源代码了。

6. 执行编译执行编译操作是最耗时的部分,需要等待一段时间才能完成。

编译和构建过程是一个逐步递进的过程。

首先需要编译基础库,然后编译各个组件和应用程序。

这个过程需要在控制台中执行一系列的命令,并且需要注意一些错误和警告消息。

7. 生成系统映像一旦编译完成,在源代码树下的out目录中就会生成一个system.img文件,这是Android系统的镜像文件。

android12编译流程

android12编译流程

android12编译流程Android 12编译流程Android 12是Google推出的最新一代Android操作系统,为了开发和定制Android 12,我们需要了解Android 12的编译流程。

本文将详细介绍Android 12的编译流程,帮助读者了解Android 12的构建过程。

一、环境设置在开始Android 12的编译之前,我们需要先设置好编译环境。

首先,我们需要安装Java Development Kit(JDK),并配置JAVA_HOME环境变量。

其次,我们需要安装Git和repo工具,用于获取和管理Android源代码。

最后,我们需要安装所需的编译工具链和依赖库。

二、获取源代码在环境设置完成后,我们需要获取Android 12的源代码。

Android的源代码托管在Google的服务器上,我们可以通过repo 工具来获取。

首先,我们需要创建一个目录,并在该目录下初始化repo工具。

然后,我们使用repo工具初始化Android源代码仓库,并同步代码到本地。

三、构建环境配置在获取源代码后,我们需要配置构建环境。

首先,我们需要选择目标设备的架构和配置。

Android支持多种架构,如ARM、x86等,我们需要根据目标设备选择适当的架构。

其次,我们需要选择编译模式,如用户模式或调试模式。

最后,我们可以根据需要进行其他配置,如添加自定义的系统应用或功能。

四、开始编译在配置构建环境完成后,我们可以开始编译Android 12了。

Android的编译过程是一个复杂的过程,涉及到多个模块和组件的编译和链接。

编译过程主要包括以下几个步骤:1. 初始化编译环境:Android会根据之前的配置,初始化编译环境,包括设置编译参数和环境变量。

2. 编译系统组件:Android的系统组件包括框架、库和应用等,这些组件需要先进行编译。

编译系统组件的过程是一个递归的过程,先编译底层的组件,然后编译上层的组件。

Android系统开发编译及系统移植

Android系统开发编译及系统移植

Android系统开发编译环境配置主机系统:Ubuntu9.04(1)安装如下软件包sudo apt-get install git-coresudo apt-get install gnupgsudo apt-get install sun-java5-jdksudo apt-get install flexsudo apt-get install bisonsudo apt-get install gperfsudo apt-get install libsdl-devsudo apt-get install libesd0-devsudo apt-get install build-essentialsudo apt-get install zipsudo apt-get install curlsudo apt-get install libncurses5-devsudo apt-get install zlib1g-devandroid编译对java的需求只支持jdk5.0低版本,jdk5.0 update 12版本和java 6不支持。

(2)下载repo工具curl /repo >/bin/repochmod a+x /bin/repo(3)创建源代码下载目录:mkdir /work/android-froyo-r2(4)用repo工具初始化一个版本(以android2.2r2为例)cd /work/android-froyo-r2repo init -u git:///platform/manifest.git -b froyo初始化过程中会显示相关的版本的TAG信息,同时会提示你输入用户名和邮箱地址,以上面的方式初始化的是android2.2 froyo的最新版本,android2.2本身也会有很多个版本,这可以从TAG信息中看出来,当前froyo的所有版本如下:* [new tag] android-2.2.1_r1 -> android-2.2.1_r1* [new tag] android-2.2_r1 -> android-2.2_r1* [new tag] android-2.2_r1.1 -> android-2.2_r1.1* [new tag] android-2.2_r1.2 -> android-2.2_r1.2* [new tag] android-2.2_r1.3 -> android-2.2_r1.3* [new tag] android-cts-2.2_r1 -> android-cts-2.2_r1* [new tag] android-cts-2.2_r2 -> android-cts-2.2_r2* [new tag] android-cts-2.2_r3 -> android-cts-2.2_r3这样每次下载的都是最新的版本,当然我们也可以根据TAG信息下载某一特定的版本如下:repo init -u git:///platform/manifest.git -b android-cts-2.2_r3(5)下载代码repo syncfroyo版本的代码大小超过2G,漫长的下载过程。

android ollvm 原理

android ollvm 原理

Android OLLVM 是 Android 操作系统的一个版本,其中包含了LLVM 编译器基础设施。

LLVM 是一个开源的编译器基础设施,它提供了编译器的核心组件,如代码优化器和代码生成器。

在 Android OLLVM 中,Android 的系统组件(如 libc、libm、libdl 等)是用 LLVM 编译的。

这意味着这些系统组件是用 LLVM 的中间表示(Intermediate Representation,IR)编写的,而不是用传统的机器码(如 x86 或 ARM 汇编)编写的。

使用 LLVM 编译系统组件的好处包括:
1. 优化性能:LLVM 提供了许多优化选项,可以在编译时对代码进行优化,从而提高运行时的性能。

2. 跨平台支持:由于 LLVM 的中间表示是平台无关的,因此使用 LLVM 编译的系统组件可以在不同的硬件架构上运行,而无需重新编译。

3. 更好的安全性:使用 LLVM 可以提供更好的代码安全性和完整性检查,从而提高系统的安全性。

4. 易于维护和开发:使用 LLVM 可以更容易地进行代码分析和调试,从而提高开发效率和代码质量。

总的来说,Android OLLVM 通过使用 LLVM 编译器基础设施来提高系统性能、跨平台支持和安全性。

Android编译时:m、mm、mmm、mma、mmma的区别

Android编译时:m、mm、mmm、mma、mmma的区别

Android编译时:m、mm、mmm、mma、mmma的区别m:编译整个安卓系统makes from the top of the treemm:编译当前⽬录下的模块,当前⽬录下需要有Android.mk这个makefile⽂件,否则就往上找最近的Android.mk⽂件。

builds all of the moudles in the current directorymma:当前⽬录新增或删除⽂件后,可以⽤mma重新编译。

mmm:编译指定路径下的模块,指定的路径下⾯需要有Android.mk这个makefile⽂件builds all of the moudles in the supplies directorymmma:指定⽬录下新增或删除⽂件后,可以⽤mmma重新编译。

// 未全编译的情况系下,可以使⽤该命令单编译模块mm、mmm是类似的,都是⽤来编译某些模块。

使⽤这些编译命令,⾸先需要在Android根⽬录下配置环境#source build/envsetup.sh 要确保当前根⽬录下有envsetup.sh脚本⽂件#lunch ... 对⼯程的选择#cd (要编译模块所在的⽬录)#mm(mma、mmm、mmma) -B -j2 2>&1 开始编译模块注:-B表⽰编译模块的所有⽂件,-j2表⽰编译的时候开启两个线程,2>&1表⽰将错误切换到输出(输⼊为0,输出为1,错误为2)。

envsetup.sh脚本⽂件⾥包含vendorsetup.sh 、lunch、 m mm mmm的定义mmm 和 mm 区别:mmm package/apps/DeskClockcd package/apps/DeskClock ,然后再mm。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设为主页加入收藏帮助 | 留言交流
转藏到我的图书馆推荐给朋友举报
build/core/envsetup.mk generate dir config and so on
build/target/product product config
build/target/board board config
build/core/combo build flags config
这里解释下这里的board和product。

borad主要是设计到硬件芯片的配置,比如是否提供硬件的某些功能,比如说GPU等等,或者芯片支持浮点运算等等。

product是指针对当前的芯片配置定义你将要生产产品的个性配置,主要是指APK方面的配置,哪些APK会包含在哪个product中,哪些APK在当前product中是不提供的。

config.mk是一个总括性的东西,它里面定义了各种module编译所需要使用的HOST工具以及如何来编译各种模块,比如说BUILT_PREBUILT就定义了如何来编译预编译模块。

envsetup.mk主要会读取由envsetup.sh写入环境变量中的一些变量来配置编译过程中的输出目录,combo里面主要定义了各种Host和Target结合的编译器和编译选项。

配置部分主要完成以下几个工作:
a) 基于Android 产品的配置(product config):选择构建安装的运行程序(user package)
b) 设置 target 等相关变量TARGET_ARCH, TARGET_OS,TARGET_BUILD_TYPE, TARGET_PREBUILT_TAG
c) 根据编译环境设置 host等相关变量HOST_OS, HOST_ARCH,HOST_BUILD_TYPE, HOST_PREBUILT_TAG
d) 编译 target上运行程序所需的工具链及编译参数设置,如linux-arm-cc,cflag,include目录等。

e) 编译 host上运行程序所需的工具链及编译参数设置。

下图简要介绍了Android build system的配置部分的主要构成及相互关系。

流程-...
男性必吃的12种食
物!...
美食
哲理小品:最美妙
的人生
摄影基础技法
二、初始化参数设置
在main.mk里,简单设置几个主要编译路径的变量后,来到config.mk:
——————————————config.mk——————————————
其中设置了源文件的一系列路径,包括头文件、库文件、服务、API已经编译工具的路径。

(前36行)
从40行开始,定义一些编译模块的生成规则:
除了CLEAR_VARS是清楚本地变量之外,其他所有的都对应了一种模块的生成规则,每一个本地模块最后都会include其中的一种来生成目标模块。

回到config.mk,接着会尝试读取buildspec.mk的设置:
如同注释所说,会尝试查找buildspec.mk,如果文件不存在会自动使用环境变量的设置,如果仍然未定义,会按arm默认的设
置去build。

这里的buildspec.mk可以自己创建,也可以将原先build/下的buildspec.mk.default直接命名为buildspec.mk并移到根目录。

实际上,buildspec.mk配置都被屏蔽了,我们可以根据需要直接打开和修改一些变量。

在这里我们可以加入自己的目标产品信息:
ifndef TARGET_PRODUCT
TARGET_PRODUCT:=generic_x86
endif
以及输出目录设置:
OUT_DIR:=$(TOPDIR)generic_x86
三、读取Product的设定
回到config.mk,接着进行全局变量设置,进入envsetup.mk:
——————————————envsetup.mk——————————————
里面的大部分函数都在build/envsetup.sh中定义。

首先,设置版本信息,(11行)在build/core/version_defaults.mk中具体定义平台版本、SDK版本、Product版本,我们可以将BUI LD_NUMBER作为我们产品generic_x86的version信息,当然,也可以自定义一个版本变量。

回到envsetup.mk,接着设置默认目标产品(generic),这里由于我们在buildspec.mk里设置过TARGET_PRODUCT,事实上这个变量值为generic_x86。

然后读取product的设置(41行),具体实现在build/core/product_config.mk中,进而进入product.mk,从build/target/product/Andr
oidProducts.mk中读出PRODUCT_MAKEFILES,这些makefile各自独立定义product,而我们的产品generic_x86也应添加一个m akefile文件generic_x86.mk。

在generic_x86.mk中我们可以加入所需编译的PRODUCT_PACKAGES。

下面为generic_x86.mk:
四、读取BoardConfig
接着回到config.mk,(114行)这里会搜索所有的BoardConfig.mk,主要有以下几个地方:
这里的TARGET_DEVICE就是generic_x86,就是说为了定义我们自己的产品generic_x86,我们要在build/target/board下添加一个自己的目录generic_x86用来加载自己的board配置。

在BoardConfig.mk中会决定是否编译bootloader、kernel等信息。

五、读取所有Module
结束全局变量配置后,回到main.mk,马上对编译工具及版本进行检查,错误便中断编译。

142行,包含文件definitions.mk,这里面定义了许多变量和函数供main.mk使用。

main.mk第446行,这里会去读取所有的Andro id.mk文件:
其中include $(ONE_SHOT_MAKEFILE)
这个ONE_SHOT_MAKEFILE是在前面提到的mm(envsetup.mk)函数中赋值的:ONE_SHOT_MAKEFILE=$M make -C $T files $@
具体make操作:
完整编译
我们在根目录下输入make命令即可开始完全编译。

这个命令实际编译生成的默认目标是droid。

也就是说,大家敲入make实际上执行的make droid。

而接下来大家看看main.mk文件里最后面的部分,会有很多伪目标,如sd k、clean、clobber等,这些在默认的make droid的命令下是不会执行的。

我们可以在make后加上这些标签来单独实现一些操作。

如:输入make sdk 将会生成该版本对应的SDK,输入make clean会清除上次编译的输出。

模块编译
有时候我们只修改了某一个模块,希望能单独编译这个模块而不是重新完整编译一次,这时候我们要用到build/envsetup.sh中提供的几个bash的帮助函数。

在源代码根目录下执行:
. build/envsetup.sh(.后面有空格)
这样大家相当于多了几个可用的命令。

这时可以用help命令查看帮助信息:
其中对模块编译有帮助的是tapas、m、mm、mmm这几个命令。

1、tapas——以交互方式设置build环境变量。

输入:tapas
第一步,选择目标设备:
第二步,选择代码格式:
第三步,选择产品平台:
注意:这里,Google源代码里默认是generic,而我们针对自己的产品应修改成generic_x86
具体在build/envsetup.sh里的函数chooseproduct()中对相应代码进行修改。

2、m、mm、mmm使用独立模块的make命令。

转藏到我的图书馆推荐给朋友的文件夹 [Android]
分享到:
人人
open in browser PRO version Are you a developer? Try out the HTML to PDF API。

相关文档
最新文档