最近整理了一下关于系统源码编译的笔记,并且迁移到csdn.方便以后自己编译使用.
-----代码编辑小工具:
//安装代码文件管理软件
sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text-installer
使用方法:
ubuntu 14.04上编译Android 8.0.0 (OPR5.170623.007)源码并烧写到nexus 6P
首先android系统开源的,有做rom的、app的、驱动、机顶盒、智能手表、导航仪等等。各大厂商利用android开源这一特性,对系统进行二次适配和开发,影响着我们生活中的方方面面。那么作为一名android开发人员,我们有必要去接触去学习去了解android的源码。
----------------------------OpenJdk1.8安装--------------------------
启动终端,ctrl+alt + t可以打开一个终端
1. Ctrl+Alt+T 打开终端执行以下命令:
sudo add-apt-repository ppa:openjdk-r/ppa
输入你的sudo密码继续
2. 升级系统资源包并安装openjdk1.8:
sudo apt-get update sudo apt-get install openjdk-8-jdk
3. 在多个JDK版本中切换JDK
sudo update-alternatives --config java
选择你需要的JDK版本:
选择模式:2
设置一个默认JAVA:
sudo update-alternatives --config javac
4. 检查JDK版本:
java -version
输出以下信息表示成功
openjdk version "1.8.0_01-internal" OpenJDK Runtime Environment (build 1.8.0_01-internal-b04) OpenJDK 64-Bit Server VM (build 25.40-b08, mixed mode)
----Ubuntu14.04 系统环境搭建,软件安装
2、安装ccache
sudo apt-get install ccache
source ~/.bashrc
3、安装编译源码所需要的工具集
这些工具集务必要提前安装好,否则会编译出错,且难以排查,导致浪费时间。你可以依次安装软件也可以一次性安装(建议依次安装,这样抱错的话能够及时有针对性的排除)。
sudo apt-get install git-core
sudo apt-get install git
sudo apt-get install gnupg
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install build-essential
sudo apt-get install build-essential
sudo apt-get install zip
sudo apt-get install curl
sudo apt-get install libc6-dev
sudo apt-get install libncurses5-dev:i386
sudo apt-get install x11proto-core-dev
sudo apt-get install libx11-dev:i386
sudo apt-get install libreadline6-dev:i386
sudo apt-get install libgl1-mesa-dev
sudo apt-get install g++-multilib
sudo apt-get install mingw32
sudo apt-get install tofrodos
sudo apt-get install python-markdown
sudo apt-get install libxml2-utils
sudo apt-get install xsltproc
sudo apt-get install zlib1g-dev:i386
sudo apt-get install dpkg-dev
sudo apt-get install phablet-tools
(方案二:便捷替代指令:
安装依赖
ubuntu14.04LTS必须安装以下依赖。
sudo apt-get install git-core \
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 \
如果要使用 SELinux 工具进行政策分析,还需要安装 python-networkx 软件包。
sudo apt-get install python-networkx
如果使用 LDAP 并且希望运行 ART 主机测试,还需要安装 libnss-sss:i386 软件包。
sudo apt-get install libnss-sss:i386
)
----repo下载源码树,编译操作指令
5、我们在用户的home目录下新建bin目录并下载repo
mkdir ~/bin
PATH=~/bin:$PATH
下载repo工具并让它具有可执行权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x~/bin/repo
由于国内上网限制还可以
git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git
cp git-repo/repo ~/bin/ //将上一个步骤中得到的git-repo中的repo文件拷贝到bin目录
sudo gedit ~/bin/repo
REPO_URL = 'git://aosp.tuna.tsinghua.edu.cn/android/git-repo'
6、在用户的home目录下新建WORKING_DIRECTORY目录,并用repo初始化指定android某个版本的分支
mkdir ~/WORKING_DIRECTORY //新建目录
cd ~/WORKING_DIRECTORY //进入目录
配置git的用户信息
$ git config--globaluser.name"Your Name"
$ git config--globaluser.email"[email protected]"
repo关联android源码
$ repo init-u https://android.googlesource.com/platform/manifest //会关联最新的android版本
如果要指定某个版本
repo init-u https://android.googlesource.com/platform/manifest -b android-5.1.0_r2 // -b设置分支,android-5.1.0_r2分支名
注:如果要查看所有的分支名,请转到(https://source.android.com/source/build-numbers.html#source-code-tags-and-builds)
由于国内限制,可以执行
repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-5.0.2_r1
7、开始执行下载
repo sync //就开始下载了。我当时是的,大概一个晚上搞定了。如果中途断了,重新执行repo sync即可。
8、待所有的代码下载下来之后,将驱动.sh文件拷贝到WORKING_DIRECTORY依次执行并agree后,就会得到verdor。那现在开始执行编译吧!
----设备驱动下载
4、下载硬件驱动程序
注意:因为国内的限制,该网站并不可访问,我只贴出部分截图给大家。
下载某系统版本源码,以及对应该手机的驱动版本,这个版本和源码的版本和手机型号相关;
使用:
1.把huawei-angler-opr5.170623.007-dea9770b.tgz,qcom-angler-opr5.170623.007-11fa6c2b.tgz两个文件全部下载了,
2.解压得到sh文件并放到源码根目录下。
3.执行在终端中分别执行上述两个sh文件,
./extract-huawei-angler.sh
./extract-qcom-angler.sh
首先是要同意用户使用协议,看到协议的第8项的e小项之后,记得回车键不要按过了,否则协议内容又要重新来一遍,这时输入I ACCEPT即可在源码根目录下的vendor文件夹下自动释放相应文件。
系统编译:(注意:jack-admin start-server未正常开启,因为我下载编译使用的lsh账户,它初始不支持多用户使用,所以根据配置用户使用)
清理
为了确保新安装的二进制文件在解压后会被适当考虑在内,请使用以下命令删除所有以前编译操作的已有输出:
make clobber
1、进入WORKING_DIRECTORY目录加载环境变量
source build/envsetup.sh
2、执行lunch选项
lunch //执行完了之后会出现一个列表,里面包含了各个平台的选项,模拟器的、开发者模式等等。我们只需要针对自己的需求输入对应的数字即可
3、根据测试机器Nexus6P,也就是angler,找到angler对应的数字,输入回车即可。
设置jack_server服务:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
编译过程出错:
未使用正确的用户登入,把root账户更改
使用下方截图的步骤,就是out里面的jack-admin
4、执行make -j8开始编译,-j4是指多个线程同时编译。如果设备性能比较好,-16等也是可以的。系统会根据现有的情况进行处理的,不用担心。
编译成功的显示:
9、烧写到手机里面
编译完成后,在我们的根目录下会生成个out目录,层层目录下有个system.img文件,这就是您忙活一大堆的结晶。最后用数据线连接手机,烧写进去就行了。
---------------------------------首次编译报错--------------------------
注意:额为添加环境配置
[ 85% 69760/81611] Building with Jack:...k_intermediates/with-local/classes.dex
FAILED: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
/bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.3-rc6 'Douarn' (441800 22a11d4b264ae70e366aed3025ef47362d1522bb by [email protected])).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx
Warning: This may have produced partial or corrupted output.
[ 85% 69767/81611] Compiling SDK Stubs...ubs_current_intermediates/classes.jack
ninja: build stopped: subcommand failed.
11:59:51 ninja failed with: exit status 1
make: *** [run_soong_ui] Error 1
解决方案:
lsh@ubuntu:~/bin/WORKING_DIRECTORY$ export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
lsh@ubuntu:~/bin/WORKING_DIRECTORY$ out/host/linux-x86/bin/jack-admin kill-server
Killing background server
lsh@ubuntu:~/bin/WORKING_DIRECTORY$ out/host/linux-x86/bin/jack-admin start-server
Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m -cp /home/lsh/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher
重新处理方案:
./prebuilts/sdk/tools/jack-admin start-server
./prebuilts/sdk/tools/jack-admin kill-server
修复开机弹窗system error
There is an internal problem with your device, and it might be unstable until you factory data reset.”
root@ubuntu:/home/lsh/bin/WORKING_DIRECTORY# out/host/linux-x86/bin/jack-admin jack-diagnose
Usage : out/host/linux-x86/bin/jack-admin [ install-server
root@ubuntu:/home/lsh/bin/WORKING_DIRECTORY# out/host/linux-x86/bin/jack-admin start-server
Communication error with Jack server (60), try 'jack-diagnose' or see Jack server log