最近整理了一下关于系统源码编译的笔记,并且迁移到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"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文件并放到源码根目录下。

 

 

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 android-jack-team@google.com)).

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 | uninstall-server | list | update | 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

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)studio项目配置的.gitignore文件
  6. Android(安卓)Ant 编译
  7. Android(安卓)安卓Unable to find method 'org.gradle.api...
  8. GestureDetector部分源码分析
  9. Android(安卓)PopupWindow的使用技巧

随机推荐

  1. Qt平台下OpenCV for Android库的顺序
  2. Android中定义数组与使用
  3. Android RelativeLayout属性介绍
  4. Android将多个视频文件拼接为一个文件
  5. android底层的学习
  6. Android加载SVG实现交互式地图绘制
  7. Windows下通过虚拟机搭建android的linux
  8. Android之实现点击波纹效果
  9. Android adb shell命令大全
  10. android数据库操作出现的 android.databa