ubuntu 18.04编译Android 7.1源码

一、提前安装软件

1.安装openjdk

1) 编译的时候使用的是openjdk,跟我们平时使用的jdk并不一样,可以到 http://openjdk.java.net/ 下载安装,也可以通过下面的指令安装。

sudo apt-get update
sudo apt-get install openjdk-8-jre
sudo apt-get install openjdk-8-jdk

2) 配置jdk环境变量

目前ubuntu中由三四种配置环境变量的方式,今天只说通过profile文件来配置。

sudo vim /etc/profile

通过上面的指令打开/etc/profile文件。并且加上下面的内容,路径要根据自己系统的jdk位置做修改。

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH

3) 当有多套代码需要不同的jdk编译是,可以在指令窗口直接输入下面的命令进行切换,注意,切换只对当前终端有效。(记得路径要根据自己jdk路径修改)

export JAVA_HOME=/usr/lib/jvm/jdk1.6;export PATH=/usr/lib/jvm/jdk1.6/bin:$PATH

2.安装其他,每个是干嘛的,感兴趣的自己去了解。

sudo apt-get install m4
sudo apt-get install  g++-multilib gcc-multilib lib32ncurses5-dev lib32readline6-dev lib32z1-dev
sudo apt-get install flex
sudo apt-get install curl
sudo apt-get install bison
sudo apt-get update
 
 

3.如果android 6.0~8.1的,还的到源码根目录配置jack-admin

1)查看病并且开启jack服务

./prebuilts/sdk/tools/jack-admin list-server
 prebuilts/sdk/tools/jack-admin start -server
 prebuilts/sdk/tools/jack-admin stop -server

2)如果命令不存在。则需要安装,如下命令;

cd prebuilts/sdk/tools/
./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar

安装完成后,重新开启。

二、下载源码,由于我并没有使用repo,而是直接在百度云下载下来,通过下面的命令进行解压源码。

7za x android-7.1.1_r1.7z -r -o./

三、开始编译

1)到源码根目录source源代码

source build/envsetup.sh 

2)选择要运行的设备

lunch

3)打开线程,编译代码。

make -j8

四、正常情况编译可能会出现很多问题,下面列举几个比较常见的。

1.问题一

[  1% 601/35623] Lex: aidl <= system/tools/aidl/aidl_language_l.ll
FAILED: /bin/bash -c "prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/host/linux-x86/obj/STATIC_LIBRARIES/libaidl-common_intermediates/aidl_language_l.cpp system/tools/aidl/aidl_language_l.ll"
flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
Aborted (core dumped)
[  1% 601/35623] host Java: guavalib (out/host/common/obj/JAVA_LIBRARIES/guavalib_intermediates/classes)
warning: [options] bootstrap class path not set in conjunction with -source 1.7
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 warning
[  1% 601/35623] target Java: core-all (out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/classes)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1

解决方法:

检查jack是否已经安装并启动。

./prebuilts/sdk/tools/jack-admin    list-server
 prebuilts/sdk/tools/jack-admin  start -server
 prebuilts/sdk/tools/jack-admin  stop -server
 
 cd prebuilts/sdk/tools/
 ./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar

换不行的话,运行西面的

export LC_ALL=C

2.问题二

[ 34% 17174/49182] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by [email protected])).
Java heap space.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
[ 34% 17174/49182] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/libprotobuf-java-micro_intermediates/classes.jack
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1
#### make failed to build some targets (01:28:46 (hh:mm:ss)) ####

解决方案:

对prebuilts/sdk/tools/jack-admin文件进行修改:

1.在jack-admin找到如下语句:

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"

在-cp前添加了-Xmx4096m参数,重启jack-admin服务:

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

3.问题三:

[ 38% 18985/49182] target thumb C++: libskia_static_32 <= external/skia/src/gpu/gl/builders/GrGLSLPrettyPrint.cppninja: fatal: fork: Cannot allocate memory
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1

解决方法:

可能一:线程数不够

1)查看当前最大线程数

sysctl kernel.pid_max

2)重新设定线程上限为1000000

 echo 1000000 > /proc/sys/kernel/pid_max

3)将新的设定写入配置文件

echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf

4)更新状态

sysctl –p

可能二:Swap缓存不够

fuge@fuge2008:/newdisk/android-7.1.1_r1$ free -m

total used free shared buff/cache available
Mem: 5926 5188 259 85 478 484
Swap: 7167 1594 5573

1)停止交换分区

swapoff -a

2)给Swap增加5G内存

dd if=/dev/zero of=/home/swapfile bs=1M count=5120

3)设置交换区文件

mkswap /home/swapfile 

4)立即启用交换区文件

swapon /home/swapfile

5)到/etc/fstab文件配合如下,即配置开机即自动配置Swap。

/home/swapfile swap swap defaults 0 0

五、编译成功。

[ 99% 49079/49182] host Java: android-icu4j-tests-host (out/host/common/obj/JAVA_LIBRARIES/android-icu4j-tests-host_intermediates/classes)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[100% 49182/49182] host Executable: primitives_tests_32 (out/host/linux-x86/obj32/EXECUTABLES/primitives_tests_intermediates/primitives_tests32)
 
#### make completed successfully (03:53:27 (hh:mm:ss)) ####

猜你喜欢

转载自blog.csdn.net/qq_35460159/article/details/82557365