概述
最近进行了源码编译工作,写下了一篇笔记,大部分内容都是网上其他博文也有的,我经过一步步验证了的
环境准备
安装好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
开始编译
网上大家大致使用下面四种方式导入源码
(编译得10多个小时,神经病啊,不干)编译所有源码 — 生成idegen.jar — 执行idegen.sh生成android.ipr/android.iml —Android sutdio导入
(别人的源码版本跟自己的不对应,估计idegen.jar会有问题)不编译源码 — 下载别人分享的idegen.jar — 执行idegen.sh生成android.ipr/android.iml —Android sutdio导入
(非常不推荐,打开源码后一片红色) 只下载frameworks/base的代码 — 下载别人分享的idegen.jar — 执行idegen.sh生成android.ipr/android.iml —Android sutdio导入
(真正正确并快速的方法,也是我要说的方法)编译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= TMPDIR JACK_SERVER_VM_ARGUMENTS -cp LAUNCHERJAR LAUNCHER_NAME”
更改为
JACK_SERVER_COMMAND=”java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir= TMPDIR JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp LAUNCHERJAR 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先停止服务重新开始服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复