unbutu-编译源码

记录一下,谨防忘记,又要一遍遍搜索,浪费时间。
重要网址清华大学镜像AndroidSource

1、源码下载

下载 repo 工具:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

2、下载openJDK

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
切换java版本
sudo update-alternatives --config java
sudo update-alternatives --config javac
java -version

或者
sudo apt-get update                           
sudo apt-get install openjdk-7-jdk

使用每月更新的初始化包

由于首次同步需要下载 24GB 数据,过程中任何网络故障都可能造成同步失败,我们强烈建议您使用初始化包进行初始化。
下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。
由于所有代码都是从隐藏的 .repo
目录中 checkout 出来的,所以我们只保留了 .repo
目录,下载后解压 再 repo sync
一遍即可得到完整的目录。
使用方法如下:

wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tarcd AOSP # 解压得到的 AOSP 工程目录# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录# 或 repo sync -l 仅checkout代码

在特定目录使用特定的jdk版本,设置环境变量

export J2SDKDIR=/usr/lib/jvm/java-7-openjdk-amd64
export J2REDIR=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:/usr/lib/jvm/java-7-openjdk-amd64/db/bin:/usr/lib/jvm/java-7-openjdk-amd64/jre/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export DERBY_HOME=/usr/lib/jvm/java-7-openjdk-amd64/db

在源码目录保存为jdk.sh文件,然后source jdk.sh

构建编译环境

1. 操作系统要求AOSP开源中,主分支使用Ubuntu长期版本开发和测试的,因此也建议你使用Ubuntu进行编译,下面我们列出不同版本的的Ubuntu能够编译那些android版本:

Android版本 编译要求的Ubuntu最低版本
Android 6.0至AOSP master Ubuntu 14.04
Android 2.3.x至Android 5.x Ubuntu 12.04
Android 1.5至Android 2.2.x Ubuntu 10.04

2. JDK版本要求除了操作系统版本这个问题外,我们还需要关注JDK版本问题,为了方便,同样我们也列出的不同Android版本的源码需要用到的JDK版本:

Android版本 编译要求的JDK版本
AOSP的Android主线 OpenJDK 8
Android 5.x至android 6.0 OpenJDK 7
Android 2.3.x至Android 4.4.x Oracle JDK 6
Android 1.5至Android 2.2.x Oracle JDK 5

更具体的可以参看:Google源码编译要求

下面是Ubuntu14.04中的依赖设置:

sudo apt-get install 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

初始化编译环境

. build/envsetup.sh

选择编译目标,选择2,所有选项的意思,后面更新

lunch 2
或者
lunch
然后选编号

开始编译,这里使用了4个并发数:

make -j4

打包源码固件

pack

运行模拟器

emulator

使用打包工具mmm,完成命令后会在根目录下生成android.irp,用android studio打开一个现有项目,打开android.irp即可

mmm development/tools/idegen/

其中mmm指令就是用来编译指定目录.通常来说,每个目录只包含一个模块.比如这里我们要编译Launcher2模块,执行指令:

mmm packages/apps/Launcher2/

稍等一会之后,如果提示:### make completed success fully ###
即表示编译完成,此时在out/target/product/gereric/system/app
就可以看到编译的Launcher2.apk文件了.

简单的来介绍out/target/product/generic/system目录下的常用目录:
Android系统自带的apk文件都在out/target/product/generic/system/apk目录下;
一些可执行文件(比如C编译的执行),放在out/target/product/generic/system/bin目录下;
动态链接库放在out/target/product/generic/system/lib目录下;
硬件抽象层文件都放在out/targer/product/generic/system/lib/hw目录下.
SystemUI目录在framework/base/packages/SystemUI
编译后systemUI.apk在out/target/product/xxx/system/priv-app/SystemUI

***编译错误: Out of memory error.

FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dex-dir/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] 错误 1

在控制台执行以下命令:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"out/host/linux-x86/bin/jack-admin kill-serverout/host/linux-x86/bin/jack-admin start-server
错误
log:
Copy: apicheck (out/host/linux-x86/obj/EXECUTABLES/apicheck_intermediates/apicheck)
Install: out/host/linux-x86/bin/apicheck
Checking API: checkapi-last
(unknown): error 17: Field android.app.Notification.FLAG_SHOW_LIGHTS has changed value from 1 to 0

******************************
You have tried to change the API from what has been previously released in
an SDK.  Please fix the errors listed above.
******************************

解决办法有2:1、make clean--> make update-api --make ; 2、要么手动添加相应版本的api值,使编译通过。

android 修改framework下资源文件后如何编译

在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用
进入项目根目录 cd frameworks/base/core/res/ 执行mm命令(原生或高通), 编译 framework-res.apk
或 ./mk mm frameworks/base/core/res(mtk 依据各平台编译命令有所不同)
编译完后com.android.internal.R中会生成资源的引用。
在目录frameworks/base/ 下执行mm 编译 framework.jar (原生或高通)
或 ./mk mm frameworks/base (mtk 依据各平台编译命令有所不同)

如果 frameworks/base/services 下有修改,则也要编译

frameworks/base/services/java/ 执行mm 编译  services.jar
或./mk mm frameworks/base/services/java

执行如下命令

  adb remount
  adb push framework-res.apk /system/framework/
  adb push framework.jar /system/framework/
  adb push services.jar /system/framework/  (如果有修改的话)

有的系统还有编译framework后还生成了secondary_framework.jar
也要push。
push完成之后,可以cd system/framework 进入目录,
然后 ll 两个小写L命令 确认下是否push成功

adb reboot 重启设备。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 前言Android Build 系统是 Android 源码的一部分。关于如何获取 Android 源码,请参照 ...
    加菲猫Jack阅读 2,121评论 0 6
  • 从小到大,我从来不羡慕那些能在一间公司里工作的人,因为这样的职场生活,我觉得是最累人的工作。我讨厌明争暗斗,勾心斗...
    e929ffbf969b阅读 431评论 0 0
  • 浪漫诗意 我们朝着明亮走去 20140520最初的心意 应该是二号楼杨柳树下的那段坦诚告白 那晚 我听到了心动的声...
    华晨宇阿阅读 222评论 0 3
  • 第五卷主要谈公正,相比于上一章所谈的各个具体德性的简短来说,这一章对公正则是进行了详之又详的讨论,可见亚氏对公正的...
    成人的道阅读 2,428评论 1 7