android7.0 编译问题及解决

蹉跎莫遣韶光老,人生唯有读书好。这篇文章主要讲述android7.0 编译问题及解决相关的知识,希望能为你提供帮助。
本文转载自:http://blog.csdn.net/zhangmingbao2016/article/details/52699182
注意:Linux操作系统上编译Android  7.0必须使用open-jdk,mac os才可以使用Oraclejdk,我的是ubuntu16.04,下面我将我遇到的问题及解决办法做一个陈述,仅供参考:
            1、正常的编译三部曲:
                      1)source build/envsetup.sh
                      2)lunch 1
                      3)make -j32(-j32表示是开启32个线程同时编译,视个人电脑配置而定,我的笔记本8G内存,i5的处理器,256G的固态硬盘一般开10个线程,即make -j10,线程数是2的倍数)
注:android  7.0编译不需要执行make update-api,当然执行了也不会错
 
              我遇到的问题:
                        1)问题:电脑安装的open-jdk 1.7,但是没有配置环境变量,编译源码时检测不到
                        原因:在build/envsetup.sh文件中,函数set_java_home()是这样的:
 
 
[plain]  view plain  copy     print?

  1. function  set_java_home()  {   
  2.         #  Clear  the  existing  JAVA_HOME  value  if  we  set  it  ourselves,  so  that   
  3.         #  we  can  reset  it  later,  depending  on  the  version  of  java  the  build   
  4.         #  system  needs.   
  5.         #   
  6.         #  If  we  don‘t  do  this,  the  JAVA_HOME  value  set  by  the  first  call  to   
  7.         #  build/envsetup.sh  will  persist  forever.   
  8.                 #export  LEGACY_USE_JAVA7=1   
  9.         if  [  -n  "$android_SET_JAVA_HOME"  ];   then   
  10.   export  JAVA_HOME=""   
  11.         fi   
  12.    
  13.         if  [  !  "$JAVA_HOME"  ];   then   
  14.             < span  style="color:#FF0000; "> if  [  -n  "$LEGACY_USE_JAVA7"  ];   then  < /span>    
  15.                 echo  Warning:  Support  for  JDK  7  will  be  dropped.  Switch  to  JDK  8.   
  16.                 case  `uname  -s`  in   
  17.                         Darwin)   
  18.                                 export  JAVA_HOME=$(/usr/libexec/java_home  -v  1.7)   
  19.                                 ; ;    
  20.                         *)   
  21.                                 export  JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64   
  22.                                 ; ;    
  23.                 esac   
  24.             else   
  25.                 case  `uname  -s`  in   
  26.                         Darwin)   
  27.                                 export  JAVA_HOME=$(/usr/libexec/java_home  -v  1.8)   
  28.                                 ; ;    
  29.                         *)   
  30.                                 export  JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64   
  31.                                 ; ;    
  32.                 esac   
  33.    
  34.             fi   
  35.             #  Keep  track  of  the  fact  that  we  set  JAVA_HOME  ourselves,  so  that   
  36.             #  we  can  change  it  on  the  next  envsetup.sh,  if  required.   
  37.             export  ANDROID_SET_JAVA_HOME=true   
  38.         fi   
  39. }   
红色代码的意思是:如果LEGACY_USE_JAVA7不为空,JAVA_HOME就设置为java7的路径,由于LEGACY_USE_JAVA7我们没有赋值,所以编译时系统只会去找java8的路径,解决办法就是在判断之前加上:exportLEGACY_USE_JAVA7:=1(为何申明成export,因为在build/core/main.mk中进行编译环境检测时也会用到这个变量,有兴趣可以去看看)
,这样就可以通过编译环境检测环节,我在后边还遇到一个错误:javac:invalide source release:1.8(希望你没遇到),至今未解决(如果你解决了,欢迎分享,在set_java_home()中有一个警告:warning:Support for JDK 7 will be dropped.Switch to JDK 8,不知是否是这个原因),我就老老实实的安装了open-jdk 1.8,之后还是遇到了问题,见2)。
 
 
2)问题:locale: Cannot set LC_ALL to default locale: No such file or directory
原因:系统bug,在终端输入locale然后回车,输出如下:
 
locale: Cannot set LC_ALL to default locale: No such file or directory LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE=UTF-8 LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=

【android7.0 编译问题及解决】解决办法:编译之前,在终端输入export LC_ALL ="en_US.UTF-8"即可,当然以可以在envsetup.sh中添加(已经证明使可以的)。

    推荐阅读