Vmware安装ubuntu编译android源码详细过程

2023-11-04

 Vmware安装ubuntu编译android源码详细过程


说明下面文章经过博主在ubuntu12.04 64位编译过android4.4.4_r1+android4.4.4_r2+android4.0.3_r6+android2.3_x+android5.1.1_r6+android5.1.1_r12这些版本均成功,希望对大家有帮助

一、安装ubuntu

http://www.ubuntu.org.cn/index_kylin  挑选一个版本,怎么安装就不啰嗦了,补充一点千万要大一点,反正大了也不占实际空间,等下空间小就又要重装系统了,编译一个版本准备100G吧,编译2个版本的内核就准备200G吧,编译过程不用害怕,出错了就百度,然后用apt-get安装需要的软件就行,我这里选择Ubuntu12.04 desktop 64位,用的是vwmare虚拟机

1.    常用命令

给予root权限

Sudo或者sudo –s或者root权限

    如果你是下载的是别人丢网上的android源码压缩文件可以用下面的解压

解压 命令

        .tar.gz     格式解压为          tar –zxvf xx.tar.gz

.tar.bz2   格式解压为          tar –jxvf xx.tar.bz2

        安装7z:apt-get install p7zip-full

使用7z:7z x file file是要解压的文件名

 

2.root的权限登录(议设置,用root登录,方便后续操作)

对于Ubuntu12.04 desktop 64位系统                    

执行:  gedit /etc/lightdm/lightdm.conf修改配置文件

[SeatDefaults]
allow-guest=false
autologin-user=root
autologin-user-timeout=0   #0
秒就登录
autologin-session=lightdm-autologin
user-session=ubuntu
greeter-session=unity-greeter

然后我们启动root帐号:打开中断输入
sudo passwd root
根据提示输入root帐号密码。
重启ubuntu,不需要手动输入root用户名密码,系统会自动进入root用户。

 

二、安装jdk

必须安装jdk1.6,注意你用的ubuntu是64位的就安装64位的jdk,如果用32位的就安装32位的jdk,我这里用64位的

1.       把jdk-6u35-linux-x64.bin放到/usr/lib/java目录下,并且修改成777权限

2.       运行./jdk-6u35-linux-x64.bin

3.       配置环境变量

Gedit /etc/environment

JAVAHOME=/usr/lib/java/jdk1.6.0_35  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/java/jdk1.6.0_35/bin:/usr/lib/java/jdk1.6.0_35/jre/bin"  CLASSPATH=/usr/lib/java/jdk1.6.0_35/lib:/usr/lib/java/jdk1.6.0_35/jre/lib

4.       执行命令,使配置生效

source /etc/environment ( source /home/username/.bashrc )

验证是否安装成功,中断输入

Java –version,

Javac

java

三、对于ubuntu12.04 64位desktop版编译android4.0.3和android4.4.4配置和编译过程

1、ubuntu环境变量详解

 

修改用户环境变量

用户环境变量通常被存储在下面的文件中:

·        ~/.profile

·        ~/.bash_profile 或者 ~./bash_login

·        ~/.bashrc

上述文件在Ubuntu 10.0以前版本不推荐使用。

系统环境变量

echo $PATH查看原有那些变量

系统环境变量一般保存在下面的文件中:

·        /etc/environment

·        /etc/profile

·        /etc/bash.bashrc

/etc/profile和 /etc/bash.bashrc在Ubuntu 10.0版本中不推荐使用。

 

(1)修改办法1

/etc/environment改了之后 使他立即生效source /etc/environment 这个不行啊每次打开终端都要输入一次,你还是重启电脑吧,重启电脑就永久生效了

(2)修改办法2

用编辑器打开/etc/profile,然后加入

export JAVA_HOME=/usr/java/jdk1.7.0_04

exportPATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

然后输入 source /etc/profile使其生效,不行就重启

 

(3)临时导入

source build/envsetup.sh 临时导入sh的环境变量到系统环境变量中

2、安装编译过程中需要的软件

建议安装完这些软件,看下面5出错解决办法里面需要安装的软件和配置,还请也安装上,免得中途出问题,又要安装,,当然也可以跟我一样,等会儿出错了,再去安装

sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev

sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential 

sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libslibncurses5-dev

3、下载android源码

使用

apt-get install curl  先安装curl

apt-get install git 安装git

curl"http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo">/bin/repo

这样在/bin目录下面有一个repo文件了,repogoogle提供的用来专门下载源码的脚本

 

chmod a+x repo

 

mkdir my_down_android_core    千万别用中文目录,注意桌面也是中文啊,别丢桌面,桌面也是中文目录,等下编译会报错

cd my_down_android_core

repo init -u https://android.googlesource.com/platform/manifest

好等一会儿会让你输入姓名和邮箱的,输入就是了

 

自己去这里https://android.googlesource.com/platform/manifest/+refs挑选一个喜欢的版本吧然后

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1

repo sync 如果网络不稳定有可能会中断,中断以后你继续repo sync就行了

 

如果出现fatal: '../platform/abi/cpp.git' does not appear to be a gitrepository”错误则

1、在存放android系统源代码的目录(也就是执行repo sync命令的目录)下,有个.repo的隐藏目录,用ls -a可以查看的到,进入该目录:cd.repo;

2、打开.repo目录下的manifest.xml文件(命令vimmanifest.xml)并找到fetch属性,在我的文件中显示fetch="..",将fetch修改为fetch="git://Android.git.linaro.org/",保存并退出;

3、继续repo sync就可以下载了。

4、编译配置

cd到你下载的源码目录  (注意第二次编译前要make clean

source build/envsetup.sh

lunch 

然后选择编译的平台 1

make –jn(n建议用cpu核心的2倍,不知道自己电脑cpu核心的百度找答案)(建议先看下先把下面出错解决办法要安装的软件安装上,不要怕编译过程报啥错误就百度,然后把软件安装上就行了

5、出错解决办法

下面是我编译依次报错和解决办法。

报错1:/usr/include/features.h:324:26:致命错误: bits/predefs.h:没有那个文件或目录编译中断

解决1: apt-get installlibc6-dev-i386

报错2: make: ***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]错误 1

解决2:因为gcc版本太高了,安装

apt-get install gcc-4.4

apt-get install g++-4.4

然后把系统的gcc和g++这两个变量都链接到4.4版本

cd到/usr/bin目录

ls -l gcc*可以看到gcc链接的是gcc-4.6

我们把这个链接的删掉,

然后输入ln -s gcc-4.4 gcc,重新换成我们的链接

再次输入ls -l gcc*发现已经链接到我们的啦

可以看到已经指向我们的gcc-4.4了,用同样的办法,让g++链接到g++-4.4

ln -s g++-4.4 g++

 

报错3:

g++: selected multilib '32' not installed

make: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl]错误 1

解决3:

apt-get install g++-4.4-multilib gcc-4.4-multilib

 

报错4:

/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: ***[out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

解决4:

apt-get install lib32z1-dev

 

报错5:

/usr/bin/ld: cannot find -lncurses

collect2: ld returned 1 exit status

make: ***[out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb]错误 1

解决5:

apt-get install lib32ncurses5-dev

 

错误6:

/usr/bin/ld: cannot find -lGL

collect2: ld returned 1 exit status

host SharedLib: libEGL_translator (out/host/linux-x86/obj/lib/libEGL_translator.so)

make: ***[out/host/linux-x86/obj/lib/libGLES_CM_translator.so]错误 1

解决6

ln-s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so

 

错误7

/usr/bin/ld: cannot find -lX11

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so]错误 1

解决7

ln -s /usr/lib/i386-linux-gnu/libX11.so.6/usr/lib/i386-linux-gnu/libX11.so

 

报错8:

/usr/bin/ld: cannot find -lGL

collect2: ld returned 1 exit status

/usr/bin/ld: cannot find -lGL

collect2: ld returned 1 exit status

make: ***[out/host/linux-x86/obj/lib/libGLES_CM_translator.so]错误 1

make: *** 正在等待未完成的任务....

host SharedLib: libGLES_V2_translator(out/host/linux-x86/obj/lib/libGLES_V2_translator.so)

make: *** [out/host/linux-x86/obj/lib/libEGL_translator.so]错误 1

解决8:

ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2/usr/lib/libGL.so (注意看/usr/lib/i386-linux-gnu/mesa/目录下面/libGL.so的版本),同上错误6一样的

报错9:

make: ***[out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/libbcc-stamp.c] 错误 1
make: *** 正在删除文件“out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/libbcc-stamp.c”
make: *** 正在等待未完成的任务....
解决9

apt-get install git

apt-get install git-core

 

6、测试和运行

(1)用源码自带的运行,在ubuntu上运行

方法一:运行emulator命令(先cd到源码目录),出现这个说明成功(注意以后每次如果你重启电脑之后运行模拟器都要输入,source build/envsetup.sh 不然emulator找不到命令的)

选择setting->about phone可以看到一些信息

 

题外话:运行adb可以push文件到模拟器哦

方法二:完整命令

在ubuntu上完整命令(书上那么写但是我没有成功android4.0.3和androdi4.4.4失败)

 

emulator –kernel  ./prebuilt/android-arm/kernel/ kernel-qemu-armv7 –sysdir./out/target/product/generic –system system.img –data userdata.img –ramdiskramdisk.img

额外加上命令

emulator -partition-size 500可以设置启动的内存大小

 

(2):把编译好的文件用android sdk自带模拟器运行

第一种方式

在windows上,注意哦这里你要先安装好android sdk自带的模拟器哦,

把ubuntu上面那4个文件拷贝到windows然后运行下面命令

D:\android_core\myAndroidAVD\android4.0.3>emulator -kernelkernel-qemu-armv7 -sy

sdir D:\android_core\myAndroidAVD\android4.0.3 -systemsystem.img -data userdata

.img -ramdisk ramdisk.img

运行起来之后再此目录下回生成一个hardware-qemu.ini文件

修改hw.ramSize为hw.ramSize=1024,不然内存太小会很卡的,如果有别的异常请用android sdk自带模拟器自己建立一个,然后对比此文件的设置吧

注意这种办法不能,只能android4.0.3有用,对于android4.4.4失败

第二种方式

在android sdk的镜像下载目录system-images,打开然后偷龙换凤,换掉上面那四种文件即可,然后用android sdk自带的模拟器管理软件来生成一个模拟器

经过不断尝试

对于android4.0.3的kernel文件为

/prebuilt/android-arm/kernel/kernel-qemu-armv7文件有用也就是android2.6.xx 有用,记得复制到android sdk下载的镜像目录后改名为kernel-qemu

对于android4.4.4的kernel文件为

/prebuilts/qemu-kernel/arm/kernel-qemu-armv7  有用,记得复制到android sdk下载的镜像目录后改名为kernel-qemu

/prebuilts/qemu-kernel/arm/kernel-qemu  无效

编译后得到的文件说明

我们可以在源码目录的out/target/product/generic/生成对应固件等文件

Build 结果的目录结构

所有的编译产物都将位于 /out目录下,该目录下主要有以下几个子目录:

·        /out/host/:该目录下包含了针对主机的 Android开发工具的产物。即 SDK中的各种工具,例如:emulatoradbaapt等。

·        /out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java应用代码和 Java 库。

·        /out/target/product/<product_name>/:包含了针对特定设备的编译结果以及平台相关的 C/C++库和二进制文件。其中,<product_name>是具体目标设备的名称。

·        /out/dist/:包含了为多种分发而准备的包,通过make disttarget将文件拷贝到该目录,默认的编译目标不会产生该目录。

Build 生成的镜像文件

Build 的产物中最重要的是三个镜像文件,它们都位于 /out/target/product/<product_name>/目录下。

这三个文件是:

·        system.img:包含了 Android OS的系统文件,库,可执行文件以及预置的应用程序,将被挂载为根分区。

·        ramdisk.img:在启动时将被 Linux内核挂载为只读分区,它包含了 /init文件和一些配置文件。它用来挂载其他系统镜像并启动 init进程。

·        userdata.img:将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据。

 

编译android源码部分内容

把我们写的helloandroid apk编译到android源码里面去

 

在packages/experimental目录下,开发一个helloandroid

重新编译打包得到system.img文件,用这个启动模拟器,就可以看到helloworld了.

单独编译和打包

用mmm单独编译某个模块,然后用make snod命令来纯粹执行打包android系统镜像文件system.img的操作

 

1、Source  build/envsetup.sh

 

2、mmm./packages/experimental/HelloAndroid/   单独编译源码一部分,而不需要全部编译

 

编译完成以后在

Out/target/product/generic/system/lib目录

 

如果是动态链接库文件,并且是硬件抽象层文件,就保存在

Out/target/product/generic/system/lib/hw目录

 

3、Make snod

就可以重新打包生成system.img文件,在

Out/target/product/generic/目录

然后同上运行模拟器可以看到

 

四、Vmware安装ubuntu12.04 64位编译android2.3x源码详细过程

先安装好ubuntu和java和root启动,详细见编译android4.x的笔记,下面只说需要安装的软件

错误1

/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc:没有那个文件或目录

解决1:apt-get install lsb-core

 

错误2:/bin/bash: bison: 未找到命令

解决2:$ sudo apt-get install bison

 

错误3./bin/bash: flex:未找到命令
解决3 apt-get install flex

 

错误4.external/clearsilver/cgi/cgi.c:22:18:致命错误: zlib.h:没有那个文件或目录
解决4 sudo apt-get install zlib1g-dev

 

错误5      make:[out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/skin/window.o]
解决6      6sudo apt-getinstall libx11-dev
错误6.     sh: gperf: notfound
解决6      sudo apt-getinstall gperf

 

错误5/usr/include/features.h:324:26:致命错误:bits/predefs.h:没有那个文件或目录

解决6 apt-get install gcc-multilib即可

 

错误6  g++: selected multilib '32'not installed

解决6  apt-get installg++-4.4-multilib gcc-4.4-multilib

 

错误7  /usr/bin/ld: skippingincompatible /usr/lib/libz.a when searching for -lz

          /usr/bin/ld:cannot find -lz

解决7  apt-get install lib32z1-dev

 

错误8   /usr/bin/ld: cannot find-lncurses

解决8  然后接着在终端输入 apt-get install libncurses*

 

错误9:还是上面的6错误

解决9 :apt-get install lib32ncurses5-dev

 

五、Vmware安装ubuntu12.04 64位编译android5.1.1_r6源码详细过程

同上,不过不要安装jdk1.6而是安装openjdk1.7

sudo apt-get install default-jre

sudo apt-get install default-jdk

 

 

参考文章

《android系统源代码情景分析》罗阳升第一章

 

http://jingyan.baidu.com/article/5bbb5a1b3a541313eba17915.html android4.4源码编译环境搭建

http://jingyan.baidu.com/article/3c48dd34777079e10ae3585b.html Android 4.4  源码下载

http://jingyan.baidu.com/article/a501d80ce61ad0ec630f5e0b.html android4.4源码编译

Ubuntu11.1032位编译android4.0

http://blog.csdn.net/flydream0/article/details/7036156如何在Ubuntu11.10(32位)下载Android4.0源码(图文)

http://blog.csdn.net/flydream0/article/details/7046612如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)

 

查看cpu核心数

http://jingyan.baidu.com/article/27fa7326ff3b9146f9271f7e.html    如何查看电脑CPU的核心个数

查看ubuntu隐藏文件

http://jingyan.baidu.com/article/49711c61415945fa441b7c89.html  如何在ubuntu下查看隐藏的文件和文件夹

 

安装jdk

http://jingyan.baidu.com/article/60ccbceb63432364cab197cb.htmlUbuntu下安装JDK1.6

在官网下载历史jdk版本

http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html如何在官网下载java JDK的历史版本

安装repo办法

https://source.android.com/source/downloading.html#installing-repo


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vmware安装ubuntu编译android源码详细过程 的相关文章

  • jq校验复选框是否选择了

    jq校验复选框是否选择了 var arr sup input checkbox name custom brand ids checked each function i arr sup i this val if arr sup leng
  • remote: Support for password authentication was removed on August 13, 2021. Please use a personal ac

    报错 remote Support for password authentication was removed on August 13 2021 Please use a personal access token instead r
  • 安装Ubuntu20.04后时间不准

    安装Ubuntu20 04后时间不准 买了一台瘦客户机 原先是安装Windows操作系统的 后面安装Ubuntu20 04后导致时间一直有问题 不准 解决办法 1 安装 ntpdate sudo apt get install ntpdat
  • 超硬核!程序员10种副业赚钱之道,实现月收入增加20k!

    大家好 我是良许 经常有小伙伴问我说 良许 你的副业搞得那么溜 能不能给我们介绍一些可操作性的副业 让我们在让我们在工作之余能有另外一份收入 为了响应大家的需求 本文我就整理了一些我所知道的适合程序员的副业 向大家做一个分享 这些副业 每个
  • Node.js一些报错的解决方案

    安装 https blog csdn net qq 48485223 article details 122709354 报错1 查询版本 npm v npm WARN logfile could not create logs dir E
  • Json的格式规范

    解决报错 Resolved org springframework web HttpMediaTypeNotSupportedException Content type application x www form urlencoded
  • OCR常用公开数据集整理

    OCR常用的数据集 在这个代码仓库里 提供了常用的OCR检测和识别中的通用公开数据集的下载链接 并且提供了json标签转成 txt标签的代码和转换好的 txt标签 该项目的详细github地址如下 https github com zcsw
  • 通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤

    Ubuntu版本要求是16 04及以上版本 这里以16 04为例 在Ubuntu上安装OpenSSH server 执行 sudo apt get install openssh server 在Windows 10 1803 上安装Win
  • go-casbin学习

    casbin学习 一 背景 1 Casbin是什么 Casbin 是一个授权库 在我们希望特定用户访问特定的 对象 或实体的流程中可以使用 主题 访问类型 例如 动作 可以是 读取 写入 删除 或开发者设置的任何其他动作 这是Casbin最

随机推荐