一、提前安装软件

1.安装openjdk

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

sudo apt-get updatesudo apt-get install openjdk-8-jresudo 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-amd64export 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 m4sudo apt-get install  g++-multilib gcc-multilib lib32ncurses5-dev lib32readline6-dev lib32z1-devsudo apt-get install flexsudo apt-get install curlsudo apt-get install bisonsudo 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.llFAILED: /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.7Note: 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' failedmake: *** [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.dexFAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rspOut of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).Java heap space.Try increasing heap size with java option '-Xmx'.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.jackninja: build stopped: subcommand failed.build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failedmake: *** [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 memorybuild/core/ninja.mk:148: recipe for target 'ninja_wrapper' failedmake: *** [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 -mtotal used free shared buff/cache availableMem: 5926 5188 259 85 478 484Swap: 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)) ####

 

 

 

 

 

 

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. gen already exists but is not a source folder
  6. 查看远程android设备数据库
  7. Android(安卓)如何使用tcpdump抓包
  8. Handler的使用,如何使得handler处理的线程是开启的新线程
  9. Android(安卓)Studio: “Error initializing ADB: Android(安卓)

随机推荐

  1. 各种Layout用到的一些重要的属性
  2. layout_alignParentBottom失效
  3. Android纠正Activity横竖屏切换的生命周
  4. 转:Android(安卓)发送短信的方法
  5. Android界面布局开发使用的标签介绍
  6. android ScrollView边界阴影方法
  7. android 开发对gif解码(适配android 4.2、
  8. RealtiveLayout(相对布局属性)
  9. ListView 常用属性 详解
  10. Android(安卓)Studio apk系统签名和版本