Common Issues and Solutions When Compiling Android Source Code

Sep 7, 2017 · 453 words

Due to research requirements, I have recently been compiling the Android source code. I am documenting the issues encountered during this process for future reference.

Android 6

Installing OpenJDK 7

AOSP only accepts OpenJDK 7 as the compiling Java version. No HotSpot (Oracle JDK).

http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=477645

Install via PPA.

bash
sudo add-apt-repository ppa:openjdk-r/ppa  
sudo apt-get update   
sudo apt-get install openjdk-7-jre

bison: No such file or directory

Error message:

text
/bin/bash: prebuilts/misc/linux-x86/bison/bison: No such file or directory

Solution:

bash
sudo apt-get install bison
sudo apt-get install  g++-multilib gcc-multilib

Error message:

text
clang: error: linker command failed with exit code 1 (use -v to see invocation)
build/core/host_shared_library_internal.mk:51: recipe for target 'out/host/linux-x86/obj/lib/libart.so' failed

Solution: Modify the file art/build/Android.common_build.mk

diff
diff --git a/build/Android.common_build.mk b/build/Android.common_build.mk
index b84154b..8cf41c0 100644
--- a/build/Android.common_build.mk
+++ b/build/Android.common_build.mk
@@ -74,7 +74,7 @@ ART_TARGET_CFLAGS :=
 ART_HOST_CLANG := false
 ifneq ($(WITHOUT_HOST_CLANG),true)
   # By default, host builds use clang for better warnings.
-  ART_HOST_CLANG := true
+  ART_HOST_CLANG := false
 endif

Alternative solution: Modify the file art/build/Android.common_build.mk

diff
diff --git a/build/Android.common_build.mk b/build/Android.common_build.mk
index b84154b..187ede8 100644
--- a/build/Android.common_build.mk
+++ b/build/Android.common_build.mk
@@ -72,7 +72,7 @@ ART_TARGET_CFLAGS :=

 # Host.
 ART_HOST_CLANG := false
-ifneq ($(WITHOUT_HOST_CLANG),true)
+ifeq ($(WITHOUT_HOST_CLANG),false)
   # By default, host builds use clang for better warnings.
   ART_HOST_CLANG := true
 endif

Source: https://blog.csdn.net/cnliwy/article/details/52189349

Android 7

OpenJDK 8

Remove openjdk-7-jre and install openjdk-8-jre.

Out of memory

Error message:

text
[ 34% 12315/35670] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by [email protected])).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed

Solution:

diff
diff --git prebuilts/sdk/tools/jack-admin prebuilts/sdk/tools/jack-admin
index ee193fc..3c9178a 100755
--- a/prebuilts/sdk/tools/jack-admin
+++ b/prebuilts/sdk/tools/jack-admin
@@ -451,7 +451,7 @@ case $COMMAND in
     if [ "$RUNNING" = 0 ]; then
       echo "Server is already running"
     else
-      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"
       echo "Launching Jack server" $JACK_SERVER_COMMAND
       (
         trap "" SIGHUP

Restart jack-admin:

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