概述
最近进行了源码编译工作,写下了一篇笔记,大部分内容都是网上其他博文也有的,我经过一步步验证了的
环境准备
安装好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的配置文件
$ |
这是一个管理Jack的shell脚本,找到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
配置好后,打开源码工程吧。
最后
以上就是慈祥飞鸟为你收集整理的Ubuntu 17.04上编译android7.1.1的全部内容,希望文章能够帮你解决Ubuntu 17.04上编译android7.1.1所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复