保存资料:Ubuntu 17.04上编译android7.1.1

来源:互联网 发布:淘宝卖家怎么参加双12 编辑:程序博客网 时间:2024/06/16 12:38

最近进行了源码编译工作,写下了一篇笔记,大部分内容都是网上其他博文也有的,我经过一步步验证了的

环境准备

安装好git和curl

$ sudo apt-get install git

$ sudo apt-get install curl

下载repo

创建repo的路径,将repo路径设为环境变量。

$ mkdir ~/bin

PATH= /bin:PATH

repo的google下载地址国内被墙了,换成清华的镜像,使用git从清华镜像上download下来

$ git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/

问题一:unable to connect toaosp.tuna.tsinghua.edu.cn

解决办法:

网上资料说,这是由于防火墙导致的,git协议要求防火墙开放9418端口,而企业级防火墙一般不允许对这个非标准端口的访问,(弄不懂是什么东东,但是后面的解决办法有用)

解决方法是git协议换成https

$ git config –global url.”https://”.insteadof git://

解决问题后,

替换成下面命令

$ git clone https://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/

继续下载repo, 完成后将repo拷贝到开始设置的路径中

$ cp git-repo/repo ~/bin/

给repo添加执行权限

$ chmod a+x ~/bin/repo

接下来打开bin目录下的repo文件,修改REPO_URL

REPO_URL=’git://aosp.tuna.tsinghua.edu.cn/android/git-repo’

下载源码

初始化repo

创建源码存放路径

$ mkdir android_source

$ cd android-source

· 确定要下载的Android版本
从官网看SourceCode Tags and Builds看自己想下哪个版本,Branch一栏就是需要用到的版本号了。

指定要获取的版本

$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-7,1,1_r22

执行后,出现下面问题

问题二:unable to auto-detect email address

解决办法:

执行下面的命令

$ git config –global user.email “xxxx”

$ git config –global user.name “xxx”

按上述方法解决问题后,再执行成功

同步repo,下载源码

$ repo sync

同步过程中出现error,不用管,加上参数 -f 继续同步

$ repo sync -f

开始编译

安装openjdk

官网介绍,android 7.0到主分支用open jdk8

安装open jdk8

$ sudo apt-get update

$ sudo apt-get install openjdk-8-jdk

如果ubuntu上已经安装了oraclejdk了,需要切换到openjdk

$ sudo update-alternatives –config java

$ sudo update-alternatives –config javac

我的ubuntu是完全新装的系统,所以后面这两个命令没有验证。

安装依赖

Ubuntu编译android需要的包,从别人的博客中来的,我没有自己思考,但是可以用

sudo apt-get install libx11-dev:i386 libreadline-dev:i386 libgl1-mesa-dev g++-multilib

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386

sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev

sudo apt-get install git-core gnupg flex bison gperf build-essential

sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib

sudo apt-get install libc6-dev-i386

sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev

sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

sudo apt-get install lib32z-dev ccache

开始编译

网上大家大致使用下面四种方式导入源码

  1. (编译得10多个小时,神经病啊,不干)编译所有源码 — 生成idegen.jar — 执行idegen.sh生成android.ipr/android.iml —Android sutdio导入

  2. (别人的源码版本跟自己的不对应,估计idegen.jar会有问题)不编译源码 — 下载别人分享的idegen.jar — 执行idegen.sh生成android.ipr/android.iml —Android sutdio导入

  3. (非常不推荐,打开源码后一片红色) 只下载frameworks/base的代码 — 下载别人分享的idegen.jar — 执行idegen.sh生成android.ipr/android.iml —Android sutdio导入

  4. (真正正确并快速的方法,也是我要说的方法)编译idegen生成属于自己本地这套代码的idegen.jar — 执行idegen.sh生成android.ipr/android.iml — Android sutdio导入

下面介绍的方法

A. 直接编译生成idegen

$ source build/envsetup.sh

$ make idegen && development/tools/idegen/idegen.sh

慢慢等吧,我的ubuntu采用4核,用了1个小时。

成功后在源码路径下生成 android.iml android.ipr

B. 先编译成功再生成idegen

指定编译时缓存这样,更快编译成功

$ prebuilts/misc/linux-x86/ccache/ccache -M 50G

$ . build/envsetup.sh

$ lunch

选择运行目标

为加快编译,设置合适的运行线程参数,查看本机的cpu核心数量

$ cat /proc/cpuinfo

本机是i5 4核的u,所以编译执行

$ make j4

执行后出现“out of memory error”错误,解决办法:

1、修改Jack的配置文件

$ prebuilts/sdk/tools/jack-admin

  这是一个管理Jack的shell脚本,找到start-server函数,直接修改其启动参数,由原来的

JACK_SERVER_COMMAND=”java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIRJACK_SERVER_VM_ARGUMENTS -cp LAUNCHERJARLAUNCHER_NAME”

更改为

JACK_SERVER_COMMAND=”java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIRJACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp LAUNCHERJARLAUNCHER_NAME”

  此时Jack服务器仍然在后台执行,所以我们需要将其停止,然后重启启动(make会自动启动Jack服务器)才能使得修改后的参数生效。

  我们执行下面的命令此时Jack服务器仍然在后台执行,所以我们需要将其停止,然后重启启动(make会自动启动Jack服务器)才能使得修改后的参数生效。

  我们执行下面的命令:

先停止服务

./prebuilts/sdk/tools/jack-admin stop-server

重新开始服务

./prebuilts/sdk/tools/jack-admin start-server

详细的错误日志里边列出了问题并且已经给出了解决方案 - 增加Java虚拟机的-Xmx大小,即设置一个较大的堆内存上限。

继续编译

$ make -k

编译完成后,生成idegen模块在Android源码中有development/tools/idegen/,是生成ide的project文件,当然也能用于android studio

执行编译idegen命令

$ mmm development/tools/idegen

执行目录下的脚本

$ development/tools/idegen/idegen.sh

如上,我们完成了源码的配置工作

安装android studio

下载最新版本的android studio

解压到/opt/路径下

$ sudo unzip android-studio.zip -d /opt/

设置/opt/目录及子目录的权限

$ sudo chmod -R 777 /opt/*

进入/opt/android-studio/bin目录下为studio.sh添加权限

$ sudo chmod +x studio.sh

执行studio.sh打开androidstudio

$ sh studio.sh

Android SDK路径配置为/opt/Android/Sdk

配置好后,打开源码工程吧。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿园小班看图说话 幼儿园小班区角 幼儿园小班创意美术 幼儿园小班幼儿教育笔记 幼儿园小班反思 幼儿园小班益智区 幼儿园小班活动 幼儿园小班歌曲 幼儿园小班安全 幼儿园小班古诗大全 幼儿园小班建构区 幼儿园小班教具 幼儿园小班作业 小班幼儿园教师随笔 幼儿园小班律动 幼儿园小班课 幼儿园小班兔子舞 幼儿园小班 美术 幼儿园小班建构 幼儿园评语小班 幼儿园小班英语教案大全 幼儿园小班区角图片 幼儿园教育小班 幼儿园小班备课 幼儿园小班美术亲子活动 幼儿园教案小班 幼儿园小班幼儿发展目标 小班幼儿园教材 幼儿园小班画画图片 幼儿园小班美术图片 幼牙龙 幼牙龙进化 漆黑的魅影幼牙龙 恶霸幼犬 幼犬狗粮泡多久 自制幼犬狗粮 幼犬狗粮排行 什么品牌的幼犬狗粮好 泰迪幼犬吃什么狗粮好 萨摩耶幼犬狗粮 德牧幼犬吃什么狗粮