Ubuntu 16.04 配置android 源码开发/编译环境
原文是基于Ubuntu 14.04的,更新后基于64位的Ubuntu16.06。
一、安装必须的软件包
首先构建编译环境需要安装下列软件包
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
上面一段摘自MoKee,你也可以从LineageOS或者Google官方获得,他们各自都差别几个,没关系,这个编译的时候缺什么补什么。
二、安装repo工具
因为android源码是由repo管理的,所以你还需要安装repo。
给repo建立一个文件夹 ,下载repo之后更改权限
$ mkdir -p ~/bin$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo$ chmod a+x ~/bin/repo
三、下载源码
以下载MoKee代码为例
初始化代码仓库
创建文件夹
$ mkdir -p ~/mokee
进入到代码所要下载的文件夹中后
$ repo init -u https://github.com/MoKee/android -b mkn-mr1
下载代码
$ repo sync
至于下载中可能遇到的“网络”问题,可以将代码原改成清华的镜像
.repo/manifests/default.xml文件中aops下的https://android.googlesource.com地址改为https://aosp.tuna.tsinghua.edu.cn
加速编译
添加下面内容到~/.bashrc文件
$ export USE_CCACHE=1
如果你需要指定一个特殊的缓存目录,也需要在.bashrc中加入,不指定则为你当前用户目录下的.ccache。
$ export CCACHE_DIR=/home/mokee/.ccache
然后为缓存指定一块磁盘大小
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
四、配置adb
可以手动配置SDK路径。
把下面的内容添加到~/.profile 里然后注销一次系统
if [ -d "/platform-tools" ] ; then PATH="/platform-tools:$PATH" fi
也可以直接在终端里用命令安装(推荐):
$ sudo apt-get install android-tools-adb$ sudo apt-get install android-tools-fastboot(这是fastboot,如果有需要的话也可以安装)
推荐下面这个方法,即使你移动了sdk的位置adb命令也不会收到影响。
五、访问USB设备
在GNU / Linux系统下(特别是在Ubuntu系统下),普通用户默认情况下不能直接访问USB设备。 系统需要配置为允许此类访问。
建议的方法是创建一个文件/etc/udev/rules.d/51-android.rules(作为root用户)。
运行以下命令下载51-android.rules文件(科学上网),
$ wget -S -O - http://source.android.com/source/51-android.txt | sed "s//$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
估计很多人不能科学上网,我把之前在google 官网下载的配置贴一下
#Acer SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0664", GROUP="plugdev" #ASUS SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0664", GROUP="plugdev" #Dell SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0664", GROUP="plugdev" #Foxconn SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0664", GROUP="plugdev" #Fujitsu & Fujitsu Toshiba SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", MODE="0664", GROUP="plugdev" #Garmin-Asus SUBSYSTEM=="usb", ATTR{idVendor}=="091e", MODE="0664", GROUP="plugdev" #Google SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0664", GROUP="plugdev" #Haier SUBSYSTEM=="usb", ATTR{idVendor}=="201e", MODE="0664", GROUP="plugdev" #Hisense SUBSYSTEM=="usb", ATTR{idVendor}=="109b", MODE="0664", GROUP="plugdev" #HTC SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0664", GROUP="plugdev" #Huawei SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0664", GROUP="plugdev" #K-Touch SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", MODE="0664", GROUP="plugdev" #KT Tech SUBSYSTEM=="usb", ATTR{idVendor}=="2116", MODE="0664", GROUP="plugdev" #Kyocera SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0664", GROUP="plugdev" #Lenovo SUBSYSTEM=="usb", ATTR{idVendor}=="17ef", MODE="0664", GROUP="plugdev" #LG SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0664", GROUP="plugdev" #Motorola SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0664", GROUP="plugdev" #MTK SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0664", GROUP="plugdev" #NEC SUBSYSTEM=="usb", ATTR{idVendor}=="0409", MODE="0664", GROUP="plugdev" #Nook SUBSYSTEM=="usb", ATTR{idVendor}=="2080", MODE="0664", GROUP="plugdev" #Nvidia SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0664", GROUP="plugdev" #OTGV SUBSYSTEM=="usb", ATTR{idVendor}=="2257", MODE="0664", GROUP="plugdev" #Pantech SUBSYSTEM=="usb", ATTR{idVendor}=="10a9", MODE="0664", GROUP="plugdev" #Pegatron SUBSYSTEM=="usb", ATTR{idVendor}=="1d4d", MODE="0664", GROUP="plugdev" #Philips SUBSYSTEM=="usb", ATTR{idVendor}=="0471", MODE="0664", GROUP="plugdev" #PMC-Sierra SUBSYSTEM=="usb", ATTR{idVendor}=="04da", MODE="0664", GROUP="plugdev" #Qualcomm SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0664", GROUP="plugdev" #SK Telesys SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", MODE="0664", GROUP="plugdev" #Samsung SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0664", GROUP="plugdev" #Sharp SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0664", GROUP="plugdev" #Sony SUBSYSTEM=="usb", ATTR{idVendor}=="054c", MODE="0664", GROUP="plugdev" #Sony Ericsson SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0664", GROUP="plugdev" #Teleepoch SUBSYSTEM=="usb", ATTR{idVendor}=="2340", MODE="0664", GROUP="plugdev" #Toshiba SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0664", GROUP="plugdev" #ZTE SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0664", GROUP="plugdev"
之后重启udev 服务,命令:
sudo /etc/init.d/udev restart
PS:这里面包含了大多数厂商的设备信息,如果你的设备不在其中,请自行修改添加。执行lsusb然后添加对应信息。
六、安装中文输入法(可选)
推荐搜狗拼音输入法,具体方法可百度(按照搜狗官方的步骤可能出现安装但是没有启用搜狗输入的情况)。
七、后续可参考我的其他博客
- 使用Android Studio开发/调试整个Android系统源码
- 使用Android Studio内置Version Control工具对android源码进行版本管理/查看
PS,装了多个版本的java的话可以用 sudo update-alternatives --config java 来选择默认java版本
更多相关文章
- Android一些常用知识和代码(不断更新)
- Android 源码里packages里面的结构
- [android]寫一個system/bin 下的可執行文件
- 使用Git下载Google Android源代码
- 【30篇突击 android】源码统计 十二
- Android mediaScanner 删除U盘上的文件
- 短视频带货源码,解决Dialog 不铺满屏幕问题
- Android中用代码设置ImageView的src和background