Ubuntu系统编译Android源码准备工作

Ubuntu系统编译Android源码准备工作:

一、先安装依赖环境:

sudo apt-get -ym -qq install binutils
sudo apt-get -ym -qq install gperf
sudo apt-get -ym -qq install build-essential
sudo apt-get -ym -qq install curl
sudo apt-get -ym -qq install libxml2-utils
sudo apt-get -ym -qq install bison
sudo apt-get -ym -qq install flex
sudo apt-get -ym -qq install git
sudo apt-get -ym -qq install zip
sudo apt-get -ym -qq install valgrind
sudo apt-get -ym -qq install texinfo
sudo apt-get -ym -qq install gcc-multilib
sudo apt-get -ym -qq install g+±multilib
sudo apt-get -ym -qq install u-boot-tools
sudo apt-get -ym -qq install lzop
sudo apt-get -ym -qq install lib32z1-dev
sudo apt-get install python-mako
(如还是编译不过可往下看问题总结第三条,补充了一些)

二、安装openJDK

sudo apt-get update

sudo apt-get install openjdk-8-jdk

根据源码编译要求JDK版本灵活安装,可同时安装多了版本通过命令切换
sudo update-alternatives --config java
sudo update-alternatives --config javac

三、问题总结

1、关于JDK版本问题。
编译源码必须用openJDK,千万不要装oracle JDK。如果装了多个JDK 可以用以下命令切换JDK版本:
sudo update-alternatives —config java
sudo update-alternatives —config javac
因为不同的源码要求用到的JDK版本不一样。在编译源码过程中可以根据编译时的报错信息来切换到对应的JDK版本。但是即使这样也可能会遇到一个问题,你明明已经切换到了要求的JDK版本,但是编译的时候还是会报错提示你JDK版本不正确,这是因为源码的编译脚本里面直接去引用了环境变量中配置的JDK版本。没有用到你自己手动切换的JDK版本(一般没有安装oracle JDK是不会遇到这个问题的),当遇到这个问题之后很难找到好方法去解决,我采用的方法是删掉整个机器中跟Java有关的内容(一定要彻底删除),然后重新安装openJDK。
相关的命令如下:
卸载JDK

$ sudo apt-get update

$ sudo apt-cachesearch java | awk ‘{print($1)}’ | grep E -e ‘^(ia32)?(sun|oracle)-java’ e’^openjdk‘ e ‘^icedtea’ -e ‘^(default|gcj)-j(re|dk)’ -e ‘^gcj(.*)-j(re|dk)’-e ‘java-common’ | xargs sudo apt-get -y remove

$ sudo apt-get -yautoremove

清除配置信息:

$ dpkg -l | grep ^rc | awk ‘{print($2)}’ |xargs

$ sudo apt-get -y purge

清除java配置及缓存:

$ bash -c ‘ls -d /home/*/.java’ | xargs

$ sudo rm -rf

手动清除JVMs:

$ rm -rf /usr/lib/jvm/*

2、关于代码编译dex版本(其他源码可参照)
南山默认是编译odex版本,这样会导致替换APK以及JAR包不生效的问题,所以我们必须切换成dex版本。
1): 禁止apk生成odex: 修改…/build/core/package.mk 156
LOCAL_DEX_PREOPT := ture -> LOCAL_DEX_PREOPT := false //由生成改成不生成
2): 禁止jar包生成odex: 修改/build/core/java_library.mk
LOCAL_DEX_PREOPT := ture -> LOCAL_DEX_PREOPT := false //由生成改成不生成

3、关于编译user以及eng等版本
基本上如果源码根目录有编译脚本的话编译脚本中会有相关信息
脚本中很明确提供了方法来编译各种版本。
如果没有编译脚本的话那么通用的方法是
source build/envsetup.sh 编译环境配置

执行lunch可以看到所有可以编译的版本,选择对应版本进行编译即可。

4、关于编译源码前需要准备的运行库,不然编译报错,说缺少指定的库, flex,bison等
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev
sudo apt-get install -y git flex bison gperf build-essential
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

5、关于编译时出现Jack-server出错:out of memory error,try increasing heap size
进入out/host/linux-x86/bin/目录下
export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m”
jack-admin kill-server
jack-admin start-server

6、 关于导入的android源码不能在Android Studio中进行编辑的问题
不要使用root用户,去生成android.ipr文件, 即便后续使用chown方式手动调整用户权限也不行, 删除后重新执行sudo ./development/tools/idegen/idegen.sh; 即可.

7、关于git管理文件权限问题
git版本控制会将文件权限也算作文件差异的一部分,所以替换后即便文件二进制内容一致,但文件权限已经改变,存在差异后就需要上传, 一旦上传后,文件权限已改,对于普通文件来说,问题不大,但对于系统文件来说,就存在隐患. 这里可以控制git忽略文件权限
vim .git/config
[core]
repositoryformatversion = 0
filemode = true
默认值filemode = true; 此处设置filemode = false; 即忽略文件权限差异追踪

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值