最近整理了一下关于系统源码编译的笔记,并且迁移到csdn.方便以后自己编译使用.

-----代码编辑小工具:

//安装代码文件管理软件

sudo add-apt-repository ppa:webupd8team/sublime-text-3

sudo apt-get update

sudo apt-get install sublime-text-installer

使用方法:

android 源码编译出so 源码编译apk_framework

 

 

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版本:

android 源码编译出so 源码编译apk_framework_02

选择模式: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"you@example.com"

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文件并放到源码根目录下。

android 源码编译出so 源码编译apk_git_03

 

android 源码编译出so 源码编译apk_android 源码编译出so_04

 

android 源码编译出so 源码编译apk_android_05

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

编译过程出错:

android 源码编译出so 源码编译apk_git_06

未使用正确的用户登入,把root账户更改

使用下方截图的步骤,就是out里面的jack-admin

 

4、执行make -j8开始编译,-j4是指多个线程同时编译。如果设备性能比较好,-16等也是可以的。系统会根据现有的情况进行处理的,不用担心。

编译成功的显示:

android 源码编译出so 源码编译apk_framework_07

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 android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
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

android 源码编译出so 源码编译apk_Android_08

 

重新处理方案:

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

 

android 源码编译出so 源码编译apk_Android_09

 

修复开机弹窗system error

There is an internal problem with your device, and it might be unstable until you factory data reset.”

android 源码编译出so 源码编译apk_framework_10

android 源码编译出so 源码编译apk_android 源码编译出so_11

 

 

 

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 <launcher.jar> <server.jar> | uninstall-server | list <program> | update <program> <program.jar> | start-server | stop-server | kill-server | list-server | server-stat | server-stat-reset | server-log | server-gc | cleanup-server | dump-report]
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