第一次编译Android源码及碰到的问题
一、安装Ubuntu
1、在虚拟机里安装ubuntu-16.04-desktop-amd64.iso
2、安装VMware Tools

如果是未安装应该显示为 “安装VMware Tools”,点下去。
稍等一会会弹出界面

主要就是那份.gz的安装包。 复制到tmp,解压
cp VMwareTools-10.1.6-5214329.tar.gz /tmp
cd /tmp
tar -xzvf VMwareTools-10.1.6-5214329.tar.gz
解压后会多出一个名为vmware-tools-distrib的文件夹,进去,执行vmware-install.pl进行安装
cd vmware-tools-distrib
./vmware-install.pl
有提示就按回车,安装完重启就ok了,这时Windows下的复制粘贴在Ubuntu里应能使用了
Windows 下
Ctrl+C,Ctrl+V
linux 下
Ctrl+shift+C,Ctrl+shift+V
二、 安装编译环境
参考http://blog.****.net/aaa111/article/details/46897889
1、安装必要的软件包
sudo apt-get install git ccache automake lzop bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven bc pngquant imagemagick yasm libssl-dev
2、安装repo 工具
在工作目录下
$ mkdir -p ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
三、下载源码
1、这里用的源码是提前下载好的x3288_lollipop_v12.tar.bz2
tar -zxvf x3288_lollipop_v12.tar.bz2
2、编译源码./mk
四、编译问题
1、在服务器上编译时: Your version is: java version "1.8.0_131" ,The required version is: "1.7.x"
原因是和要求的jdk 版本不符。
解决方法直接安装1.7.x 版本,下载1.7.x版本并解压安装
sudo tar -zxvf jdk-7u60-linux-x64.gz -C /usr/lib/jvm
修改环境变量
sudo vim ~/.bashrc
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
立刻生效
source ~/.bashrc
更改配置
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 1
sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_79/bin/javaws 1
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_79/bin/jar 1
sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.7.0_79/bin/javadoc 1
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.7.0_79/bin/javap 1
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/jar /bin/jar
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/java /bin/java
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/javac /bin/javac
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/javah /bin/javah
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/javadoc /bin/javadoc
2、问题
libnativehelper/JniConstants.cpp:103: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:104: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:105: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:106: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:107: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:108: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:109: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:110: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:111: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:112: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:113: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:114: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:115: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:116: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:117: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:118: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:119: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:120: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:121: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:122: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:123: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:124: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:125: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:126: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:127: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:128: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:129: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:130: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:131: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:132: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:133: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:134: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:135: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:136: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:137: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:138: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:139: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:140: error: unsupported reloc 43
libnativehelper/toStringArray.cpp:21: error: unsupported reloc 43
libnativehelper/toStringArray.cpp:21: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:40: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:45: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
clang: error: linker command failed with exit code 1 (use -v to see invocation)
host C++: libc++ <= external/libcxx/src/algorithm.cpp
host C++: libc++ <= external/libcxx/src/bind.cpp
build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libnativehelper.so' failed
make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] Error 1
解决方法
http://blog.****.net/u014770862/article/details/52624851
source_android代表你的android源码根目录
cd <source_android>/art/build/
vim Android.common_build.mk //修改第119行
修改前:
# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif
修改后:
# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),false)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif
cp/usr/bin/ld.gold <source_android>/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
修改过上述代码后,最好执行一次make update-api,在make
3、主要是没有设置linux 的交换区swap.
/home/juner/mokee/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld.gold: warning: hidden symbol 'SkBitmap::notifyPixelsChanged() const' in out/target/product/rk3288/obj/STATIC_LIBRARIES/skia_skia_library_gyp_intermediates/skia_skia_library_gyp.a(SkBitmap.o) is referenced by DSO out/target/product/rk3288/obj/lib/libjnigraphics.so
build/core/shared_library_internal.mk:68: recipe for target 'out/target/product/rk3288/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so' failed
make: *** [out/target/product/rk3288/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] Error 1
make: *** Deleting file 'out/target/product/rk3288/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so'
#### make failed to build some targets (07:00:17 (hh:mm:ss)) ####

解决方法:
http://jileniao.net/ubunt-add-swap-to-build-libwebviewchromium.html
(1).#dd if=/dev/zero of=/opt/swap1 bs=1024 count=1024000
(count的值等于1024 x 你想要的文件大小, 4096000是4G,1024000是1G)
(2).#mkswap /opt/swap1
(把这个文件变成swap文件)
(3).#swapon /opt/swap1
(启用这个swap文件)
(4).为了使每次开机时都能正常使用swap文件,所以这里需要把swap文件增加到fstab文件中
#sudo vi /etc/fstab
在最后一行增加如下内容
/opt/swap1 swap swap defaults 0 0
重复上述4步,再次增加一个/opt/swap2的文件。
4、解决Ubuntu 硬盘空间不够的扩容问题
http://blog.****.net/u011345885/article/details/73060897
http://blog.****.net/MENGHUANBEIKE/article/details/70169870
1、在虚拟机里安装ubuntu-16.04-desktop-amd64.iso
2、安装VMware Tools
如果是未安装应该显示为 “安装VMware Tools”,点下去。
稍等一会会弹出界面
主要就是那份.gz的安装包。 复制到tmp,解压
cp VMwareTools-10.1.6-5214329.tar.gz /tmp
cd /tmp
tar -xzvf VMwareTools-10.1.6-5214329.tar.gz
解压后会多出一个名为vmware-tools-distrib的文件夹,进去,执行vmware-install.pl进行安装
cd vmware-tools-distrib
./vmware-install.pl
有提示就按回车,安装完重启就ok了,这时Windows下的复制粘贴在Ubuntu里应能使用了
Windows 下
Ctrl+C,Ctrl+V
linux 下
Ctrl+shift+C,Ctrl+shift+V
二、 安装编译环境
参考http://blog.****.net/aaa111/article/details/46897889
1、安装必要的软件包
sudo apt-get install git ccache automake lzop bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven bc pngquant imagemagick yasm libssl-dev
2、安装repo 工具
在工作目录下
$ mkdir -p ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
三、下载源码
1、这里用的源码是提前下载好的x3288_lollipop_v12.tar.bz2
tar -zxvf x3288_lollipop_v12.tar.bz2
2、编译源码./mk
四、编译问题
1、在服务器上编译时: Your version is: java version "1.8.0_131" ,The required version is: "1.7.x"
原因是和要求的jdk 版本不符。
解决方法直接安装1.7.x 版本,下载1.7.x版本并解压安装
sudo tar -zxvf jdk-7u60-linux-x64.gz -C /usr/lib/jvm
修改环境变量
sudo vim ~/.bashrc
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
立刻生效
source ~/.bashrc
更改配置
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 1
sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.7.0_79/bin/javaws 1
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_79/bin/jar 1
sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.7.0_79/bin/javadoc 1
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.7.0_79/bin/javap 1
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/jar /bin/jar
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/java /bin/java
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/javac /bin/javac
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/javah /bin/javah
sudo ln -s /usr/lib/jvm/1.7.0_79/bin/javadoc /bin/javadoc
2、问题
libnativehelper/JniConstants.cpp:103: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:104: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:105: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:106: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:107: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:108: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:109: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:110: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:111: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:112: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:113: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:114: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:115: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:116: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:117: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:118: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:119: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:120: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:121: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:122: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:123: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:124: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:125: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:126: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:127: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:128: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:129: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:130: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:131: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:132: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:133: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:134: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:135: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:136: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:137: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:138: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:139: error: unsupported reloc 43
libnativehelper/JniConstants.cpp:140: error: unsupported reloc 43
libnativehelper/toStringArray.cpp:21: error: unsupported reloc 43
libnativehelper/toStringArray.cpp:21: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:40: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:45: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
libnativehelper/JniInvocation.cpp:165: error: unsupported reloc 43
clang: error: linker command failed with exit code 1 (use -v to see invocation)
host C++: libc++ <= external/libcxx/src/algorithm.cpp
host C++: libc++ <= external/libcxx/src/bind.cpp
build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libnativehelper.so' failed
make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] Error 1
解决方法
http://blog.****.net/u014770862/article/details/52624851
source_android代表你的android源码根目录
cd <source_android>/art/build/
vim Android.common_build.mk //修改第119行
修改前:
# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif
修改后:
# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),false)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif
cp/usr/bin/ld.gold <source_android>/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
修改过上述代码后,最好执行一次make update-api,在make
3、主要是没有设置linux 的交换区swap.
/home/juner/mokee/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld.gold: warning: hidden symbol 'SkBitmap::notifyPixelsChanged() const' in out/target/product/rk3288/obj/STATIC_LIBRARIES/skia_skia_library_gyp_intermediates/skia_skia_library_gyp.a(SkBitmap.o) is referenced by DSO out/target/product/rk3288/obj/lib/libjnigraphics.so
build/core/shared_library_internal.mk:68: recipe for target 'out/target/product/rk3288/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so' failed
make: *** [out/target/product/rk3288/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] Error 1
make: *** Deleting file 'out/target/product/rk3288/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so'
#### make failed to build some targets (07:00:17 (hh:mm:ss)) ####
解决方法:
http://jileniao.net/ubunt-add-swap-to-build-libwebviewchromium.html
(1).#dd if=/dev/zero of=/opt/swap1 bs=1024 count=1024000
(count的值等于1024 x 你想要的文件大小, 4096000是4G,1024000是1G)
(2).#mkswap /opt/swap1
(把这个文件变成swap文件)
(3).#swapon /opt/swap1
(启用这个swap文件)
(4).为了使每次开机时都能正常使用swap文件,所以这里需要把swap文件增加到fstab文件中
#sudo vi /etc/fstab
在最后一行增加如下内容
/opt/swap1 swap swap defaults 0 0
重复上述4步,再次增加一个/opt/swap2的文件。
4、解决Ubuntu 硬盘空间不够的扩容问题
http://blog.****.net/u011345885/article/details/73060897
http://blog.****.net/MENGHUANBEIKE/article/details/70169870