Android编译环境搭建

添加root: sudo passwd root
samba配置:
apt-get install samba
sudo smbpasswd -a zhangzhihao
vim /etc/samba/smb.conf

[zhangzhihao]
comment=zhangzhihao
path = /home/zhangzhihao
browseable = yes
writeable = yes
guest ok = no
sudo /etc/init.d/smbd restart

修改/etc/apt/sources.list,添加源

deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse

阿里源

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

sudo apt-get update
ubuntu12.04:

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g+±multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

ubuntu14.04:

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g+±multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

#sudo apt-get install gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 lib32ncurses5 x11proto-core-dev libx11-dev libreadline-gplv2-dev lib32z1-dev libgl1-mesa-dev binutils-mingw-w64 tofrodos python-markdown libxml2-utils xsltproc genisoimage python-imaging bc libxml-libxml-perl python-imaging git lib32stdc++6 git-core gcc-multilib g+±multilib libc6-dev-i386 lib32z-dev ccache unzip u-boot-tools gawk

ubuntu16.04:

sudo apt-get install libx11-dev libreadline6-dev libgl1-mesa-dev g+±multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g+±multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache bc

安装JDK

sudo apt-get install openjdk-7-jdk
有时候,我们需要编译不同版本的android系统,就可能使用不同的jdk版本.关于jdk版本切换,可以使用如下命令:
sudo update-alternatives --config java
sudo update-alternatives --config javac

安装好之后,查看版本号:
java -version

安装 openjdk-8-jdk

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
配置ssh
ssh-keygen -t rsa -C “your_email@example.com”

设置jdk环境变量
这里采用全局设置方法,它是是所有用户的共用的环境变量
$sudo gedit ~/.bashrc
添加以下代码:

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

切换JAVA软件版本:

update-alternatives --config java
update-alternatives --config javac

设置 ccach
请在源代码树的根目录下执行以下命令:

export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

或者将以下内容添加到 .bashrc(或/etc/profile)中:

export USE_CCACHE=1
export CCACHE_COMPRESS=1 //可选,压缩导致性能下降,但是减小所占磁盘存储
export CCACHE_DIR=/mnt/d/codes/.ccache
//查看ccache状态
#ccache -s
//清除/mnt/d/codes/.ccache下缓存
#ccache -c

错误解决

  1. 编译Android 7.0以上的源码时需要用到Jack Server,编译过程有可能出现一下错误

1 error generated.
[ 43% 29709/68905] build camscope-autogen
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target ‘ninja_wrapper’ failed
make: *** [ninja_wrapper] Error 1

这个错误如果是由于Java VM内存不足导致的(上面会有out fo memory提示),解决

export JACK_SERVER_VM_ARGUMENTS=“-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m”
prebuilts/sdk/tools/jack-admin kill-server
prebuilts/sdk/tools/jack-admin start-server

  1. Communication error with Jack server (58), try ‘jack-diagnose’ or see Jack server log

原因:Android7.0 JACK编译器不支持多用户同时编译,其他用户在编译,端口被占用
修改 H O M E / . j a c k − s e t t i n g s 和 HOME/.jack-settings和 HOME/.jacksettingsHOME/.jack-server/config.properties中的端口号(比如都改为8096/8097),方可支持多用户同时编译
注意:
两个文件中的端口号必须一致。
修改后的端口号必须是没有被使用的

export LC_ALL=C

转换为 .keystore文件

keytool下载地址

./keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

-k 表示要生成的 keystore 文件的名字,这里命名为 platform.keystore
-p 表示要生成的 keystore 的密码,这里是 android
-pk8 表示要导入的 platform.pk8 文件
-cert 表示要导入的platform.x509.pem
-alias 表示给生成的 platform.keystore 取一个别名,这是命名为 platform

WSL配置

应用商店安装或者离线下载地址

https://docs.microsoft.com/en-us/windows/wsl/install-manual#download-using-powershell

配置Win10中大小写敏感,打开wsl终端,配置完后重启PC

sudo vim /etc/wsl.conf
[automount]
enabled = true
options = “metadata,umask=0000,uid=0,gid=0,case=force”
mountFsTab = false
如果无效,执行
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1
参考:https://devblogs.microsoft.com/commandline/per-directory-case-sensitivity-and-wsl/
https://devblogs.microsoft.com/commandline/improved-per-directory-case-sensitivity-support-in-wsl/

WSL编译报错解决方法

报错<1>:bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file
报错原因:在x86 64位系统执行32位程序
sudo cp /usr/bin/bison prebuilts/misc/linux-x86/bison

报错<2>:system/tools/aidl/aidl_language_y.yy:17.1-12: error: %define variable ‘api.pure’ is not used
解决:vim system/tools/aidl/aidl_language_y.yy
将以下注释掉:
%pure-parser
修改后:
/*
%pure-parser
*/

报错<3>:*FAILED:/bin/bash -c "(rm -rf out/target/product/FJDEV061/signed )
报错原因:Ubuntu18.04的openssl1.1版本过高,更换为openssl1.02版本
1.下载地址
https://www.openssl.org/source/old/1.0.2/
2.编译安装
./config --prefix=/usr/local/openssl
sudo make
sudo make install
sudo cp app/openssl /usr/bin
OpenSSL 1.0.2s 28 May 2019

报错<4>:/bin/bash: line 1: 13460 Aborted (core dumped) ( out/host/linux-x86/bin/ijar out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/classes.jar out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/classes.jar.toc.tmp )
ninja: build stopped: subcommand failed.
解决:
vim build/tools/ijar/zip.cc #line 993
ZipBuilder* ZipBuilder::Create(const char* zip_file, u8 estimated_size) {
(u8) std::numeric_limits<size_t>::max())
void *zipdata_out = mmap(NULL, mmap_length, PROT_WRITE,
- MAP_SHARED, fd_out, 0);
+ MAP_SHARED | MAP_ANONYMOUS, fd_out, 0);

报错<5>:dex2oatd F 10522 10523 art/dex2oat/dex2oat.cc:450] dex2oat did not finish after 2850 seconds
#vim build/core/dex_preopt_libart_boot.mk line 53:
修改一53行:
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME):PRIVATE_2ND_ARCH_VA
R_PREFIX := $(my_2nd_arch_prefix)
添加
ifeq ($(HOST_OS_IS_WSL),true)
SINGLE_THREAD := “-j1”
endif
修改二66行:
#Use dex2oat debug version for better error reporting
$($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) : $(LIBART_TARGET_BOOT_DEX_FILES) $(DEX2OAT_DEPENDENCY)
@echo “target dex2oat: $@”
@@ -59,7 +60,7 @@ $($(my_2nd_arch_prefix)DEFAULT_DEX_PREOPT_BUILT_IMAGE_FILENAME) :
$(LIBART_TARGE
@rm -f $(dir $@)/.art $(dir $@)/.oat
@rm -f $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))/.art
@rm -f $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))/
.oat

-$(hide) ANDROID_LOG_TAGS=“:e" $(DEX2OAT) --runtime-arg -Xms$(DEX2OAT_IMAGE_XMS)
+$(hide) ANDROID_LOG_TAGS="
:e” $(DEX2OAT) $(SINGLE_THREAD) --runtime-arg -
Xms$(DEX2OAT_IMAGE_XMS) \

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值