来源:优游网责编:网络时间:2024-06-01 12:07:15
下载和编译参考:
内存不足:
手动释放缓存 (清理内存cache)
前言:下载和编译安卓源码需要耗费巨大的硬盘资源,如下载的.1.1的源码约45G,编译又需要翻倍,因此,
建议硬盘至少要预留110G的空间;此外,编译时曾遇到过JVM虚拟机内存不足的问题,导致出现make ERROR,
在此建议内存得有4G(或制作交换分区,下面有方法)。
先扩展虚拟机磁盘,方法参考:
1. 下载源码
由于的官方源需要翻墙才能得到,因此改用国内清华大学的源。
下载repo工具
先在上确保下载了Git工具(git-core)
$ dpkg --get-selection | grep git
若无,则:
$ sudo apt-get install git
此时,同样因为墙的原因,我们使用清华大学的镜像下载repo工具,并将其脚本文件拷贝至~/bin目录
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ git clone https://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/
$ cp -rf ~/git-repo/repo$ && chmod a+x ~/bin/repo
开始下载安卓源码
修改repo脚本文件中的:
= '#39;
创建用于存放源码的目录:
$ mkdir android_source
$ cd android_source
在源码目录初始化仓库:
$ repo init -uhttps://aosp.tuna.tsinghua.edu.cn/platform/manifest/ -b android-5.1.1_r3
其中,-5.1.1_r3为版本号。
初始化后,可以开始将源码同步到本地,由于经常会自动断网,可使用以下脚本:
#!/bin/bash
echo "======start repo sync======"
repo sync -j4
while [ $? -ne 0 ];
do
echo "======sync failed, re-sync again======"
sleep 3
repo sync -j4
done
下载完毕,总大小约45 GB,可在存放源码的目录下使用du指令测试:
$ du –lh --max-depth=1
目录结构如下:
源代码目录含义:
目录名描述
abi
应用程序二进制接口
C/C++运行时库,在NDK程序中很大一部分调用就是这里的程序
用于装载和启动程序,其中就包括和。是中唯一在LInux内核之前执行的程序。通过这段程序可以初始化硬件,建立内存控件的映射图等,总之,就是为LInux内核准备合适的运行环境
build
用于编译源代码以及建议.img,.img等文件的工具
cts
用于兼容性测试的工具
虚拟机的源代码
高层的开发和调试工具
与设备相关的代码
docs
包含与源代码项目的文档和工具,如虚拟机格式文档等
扩展工具的源代码
框架层源代码。也就是 SDK的源代码
硬件层接口和库
Java核心库
ndk
NDK相关的源代码
与系统一同发布的应用程序的源代码
在各种平台下编译之前要使用的工具
sdk
在开发环境中使用的工具,如ddms,,等
的基本系统
切换源码版本
若想切换到其他源码版本分支,可以执行
$ repo init –bandroid-5.1.1_r4
$ repo sync–j4
2. 搭建编译环境(.04) 安装并配置JDK
对于Java版本要求:
.x至 6.0
7
.3.x至 4.4.x
6
更具体的可以参看: 源码编译要求
安装-7-jdk
$ sudo apt-get install openjdk-7-jdk
注:验证是否安装成功
$ java –version
配置JDK
$sudo vi /etc/profile
在文件末尾加上:
=/usr/lib/jvm/java-7--amd64/
PATH=$PATH:$HOME/bin:$/bin
PATH 安装编译源码需要的依赖软件
统一放在脚本中运行.
#/bin/bash
echo “=============Installing Software==============”
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 unzip
echo “=============Finished Installing==============”
注:版本不同,依赖的软件也不一样。
3. 编译安卓系统源码 导入编译命令
在安卓源码根目录执行脚本,导入编译所需命令到本地,如m/mm/mmm/lunch…
$ .build/envsetup.sh
lunch:选择编译选项
执行lunch查看可以选择的编译选项
$ lunch
这里我选择了1.-eng安卓源码下载,lunch函数会帮助配置平台变量。
我们简单的介绍,编译版本的命令规则,其形式都是BUILD-,
BUILD指的是特定功能的组合特定代码集合的名称,源码可以运行在什么环境,比如full表示模拟器等.
BUILD TYPE则指的是编译类型,通常有三种:
-user:首先的访问,适用于发行版的产品.
-:和user模式类似,但是具有root权限并具有调试功能,适用于调试.
-eng:工程机模式,包含额外的调试工具.
不难发现,我们需要以eng模式进行编译,以便我们调试
make:开始编译
$ make –j4 | tee build.log
需要注意的是,参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,
即当前cpu的核心的2倍,可通过以下指令查看cpu核心数:
$ cat /proc/cpuinfo
因此我选择 –j4.
第一次编译,失败
编译了约后,系统居然报错:
查看build.log,发现原因是物理内存不足导致无法分配足够的内存给JVM虚拟机:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c2c00000, 26738688, 0) failed;
error='Cannot allocate memory' (errno=12)
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 26738688 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/lijingbei/android_source/hs_err_pid54199.log
# [ timer expired, abort... ]
解决方法(一)
没办法,上网搜资料,其中有种方法是在分区中建立交换分区,以扩大总内存容量。我们建立一个大小为1G的交换分区:
$ sudo dd if=/dev/zero of=/swapfilebs=64M count=16
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
作用为将文件制造程交换分区;作用为启动该交换分区.
建立前通过free查看交换分区大小为1G:
$ free
建立后通过free查看交换分区大小为2G:
编译完成后可删除该交换分区,如下:
$sudo swapoff/swapfile
$sudo rm /swapfile
解决方法(二)
修改.mk文件,该文件位于build/core/目录下。具体:
修改-.jar-to-dex中的- –
其中第一个16M意思是最小分配的JVM堆栈大小;第二个的2048M是最大的堆栈大小。修改为- –:
解决方法(三)
注意,线程数越高的话需要的内存也越高,如果内存不足编译到一半会出错,所以如果内存比较小的话,
虽然时间长一些,但是建议直接使用make。
编译成功
4. 运行模拟器
通过以下命令运行虚拟机
$ sourcebuild/envsetup.sh
$ lunch
$ emulator
第一次写博客,若有错误,望包涵!
拳击游戏还是有很多的玩家都是非常的喜欢尝试的,很是刺激,并且也是能够发泄心中的不快吧,现在市面上是有很多的类型的拳击的游戏,这些游戏一般都是一些格斗的游戏,其实是非常的有趣,也是相当的刺激的,游戏中是有一些不同的场景都是能够去进行体验的,我们也是能够去刺激的进行对战的,小编现在就是收集了一些有意思的拳击游戏,相信你们一定会喜欢的。
趣味烧脑游戏一般比较适合人们在无聊的时候打发时间,同时其操作以及游戏规则上都比较简单,让大家不会有上手很难的感受,可以轻轻松松就体验这个游戏的独特乐趣,并且随时下线都不用担心坑队友,同时也可以和好友一起来玩法,有多种挑战模式,可以根据自己的真实水平以及喜好来选择不同的挑战模式参与,收获到不一样的游戏趣味体验!
太空冒险类游戏顾名思义就是以外太空为背景打造的一类游戏,玩家在这种类型的游戏当中可以体验到非常独特有意思的太空冒险旅程,玩法内容的设计上充满了想象力,所有的场景都是人们在日常生活中从来没有见过的,而你可以驾驶各种各样的战舰展开无比激烈的星际对决,同时可以邀请身边的朋友一起参与到冒险当中,竞技对决的过程中十分注重
这里面为大家收集了一系列比较好玩的女生游戏,并且将会不断的更新,每个玩家都可以根据自己的喜好来选择适合自己的游戏打发时间,每款游戏都设置了新手教程,这样方便大家更加轻松的上手,不同类型的游戏可以让你领略到不一样的游戏乐趣,并且在这里随时都可以尝试其他的玩法,让你一次性就可以玩个够,同时还可以将这里的游戏乐趣分享
幻想曹操外传 2005 年,我的小学同桌带来的神秘玩具——GBA 掌机
内存不足怎么办?手动释放缓存,轻松解决
游戏评测:禁止魔法的国度,少女拯救王国的探险之旅
幻想曹操传:一款集角色扮演、文字冒险、策略卡牌于一体的游戏
魔兽世界怀旧服屠龙纲要怎么刷?作用及获取方法全解析
地下城编年史汉化内购版:暗黑冒险之旅,多种玩法等你来体验
探索鄂尔多斯高原:从美丽草原到桌子山岩画的奇妙之旅
坦克世界WCI 国际冠军赛即将打响,百万奖金花落谁家?
无畏舰长电脑版体验教程:如何在电脑上畅玩太空战将
2023 圣诞箱子来袭!开箱重点看金坦,还有这些你不知道的事