Ubuntu 17.04上编译android7.1.1

来源:互联网 发布:linux 显卡查看 编辑:程序博客网 时间:2024/05/23 19:58

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


环境准备

安装好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

 

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

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

 

更改为

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_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

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


原创粉丝点击