阅读 233

ubuntu/mac android源码编译踩坑

兵马未动粮草先行 先熟悉你要准备的东西

// 源码下载地址,使用官方的下载就好。我司网络自带梯子,没梯子的可以用国内镜像,我喜欢官方的方式,比较直接少走弯路 https://source.android.com/source/downloading?hl=zh-cn //源代码标记和细分版本 根据设备查看支持的android版本分支有哪些 https://source.android.google.cn/source/build-numbers#source-code-tags-and-builds //选择设备编译系统 根据设备选择  "编译配置" lunch 那一步会用到 https://source.android.google.cn/source/running#selecting-device-build //下载驱动 解压到源码根目录 (对应驱动查看请参考下边的 lunch 这一步) //执行下载的sh驱动脚本,同意授权 最后输入 "I ACCEPT" https://developers.google.cn/android/drivers 复制代码

正常的编译流程(一路绿灯的情况下,可惜我的每个步骤都不顺利,踩了不少坑。。。如果一切顺利的话也就不会有这篇文章了/(ㄒoㄒ)/~~)

1: make clobber //清除缓存 2: source build/envsetup.sh  //添加依赖 3: lunch     //选择序号,我的nexus6p选择24 ,这个时候看下BUILD_ID 下载驱动 解压到源码根目录 4: make -j12 //开12个线程,查看逻辑cpu个数 cat /proc/cpuinfo |grep "processor"|wc -l                   复制代码

安装一些所需的环境(非必须)

//这一步骤 是安装所需的一些环境,可以先不用安装 如果出问题了,再安装,避免安装一些用不到的软件,放在这里的目的是有备无患 sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 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 sudo apt-get install libssl-dev 复制代码

错误问题整理

一、BFD: libncurses.so.5: cannot open shared object file: No such file or directory

 1.sudo apt install apt-file  2.sudo apt-file update 3.sudo apt-file find libncurses.so.5 4.sudo apt install libncurses5 复制代码

二、build/core/main.mk:21: recipe for target 'run_soong_ui' failed make:[run_soong_ui] Error 1

或者

ninja: build stopped: subcommand failed.ninja failed with: exit status 1

 # 步骤1 setopt shwordsplit  export LC_ALL=C //去除所有本地化的设置,让命令能正确执行 ## 如果不行,继续下一步问题排查 # 步骤2 1:查看端口是否被占用  netstat -ap | grep 8076 //默认是8076和8077,检查这两个 //如果占用直接修改 $HOME/.jack-setting  $HOME/.jack-server/config.properties  源码dir/build/envsetup.sh  ***修改后保证这三个文件里边的端口保持一致*** ## 如果还不行,看看报错信息是不是,继续下一步 # 步骤3 Jack server already installed in "$HOME/.jack-server" Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/wujing/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log No Jack server running. Try 'jack-admin start-server' No Jack server running. Try 'jack-admin start-server' [ 18% 11296/61548] cc out/soong/.intermediates/external/vixl/libvixl-arm/linux_x86_static/obj/external/vixl/src/aarch32/disasm-aarch32.o ninja: build stopped: subcommand failed. 11:25:40 ninja failed with: exit status 1 make: *** [build/core/main.mk:21: run_soong_ui] Error 1 # 如果是这个错误,就按照提示做 1.jack-diagnose //查看有没报错信息 # 然后是编译停 继续编译 ,服务停了,继续开启服务,如此反复好几次(本以为每次中断重新开启,每次都是增量编译,来个几次又何妨,结果到90%左右这个方式就不好使了,无奈找新的解决方案) 2.jack-admin start-server //手动开启服务,我是单开一个窗口开启服务的 复制代码

如果反复还是不行,就另辟蹊径使用终极方案吧

终极方案一

vim 打开/etc/java-8-openjdk/security/java.security  全局搜索找到TLSv1这行,把TLSv1, TLSv1.1,这两个变量删除后保存 jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA,    重新打开服务即可 jack-admin kill-serve jack-admin start-serve 复制代码

如果终极方案一还不行,算了,别太为难自己,把电脑摔了吧(开玩笑啦。。。)

终极方案二 终结者

//禁用jack 编译方式,编译速度稍微慢一些,总比不能编译好 make ANDROID_COMPILE_WITH_JACK=false -j12  //PS:本人终极方案一 解决了,这个没有尝试。不过理论上是可以的,因为肯定不会报make相关的编译问题了。(可能会有其他的小坑)


作者:xiaolongwuhpu
链接:https://juejin.cn/post/7046958318547369991


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐