Linux 下的安卓开发环境配置
Android Studio 安装
安卓应用层开发使用 Android Studio 即可,下载链接: developer.android.google.cn/studio
系统开发可使用 Android Studio Platform,下载链接: developer.android.google.cn/studio/plat...
都是解压后直接运行软件内的 bin 目录下的 studio.sh
。
Linux 相关内核参数更改
修改 /etc/sysctl.conf
,追加如下内容:
toml
fs.inotify.max_user_watches = 524288
vm.swappiness = 10
fs.inotify.max_user_watches
: 用于限制每个用户对 inotify 实例的监视数目,适当增大这个值能提升 IDEA 和 Android Studio 的索引速度vm.swappiness
: 用于控制内存不足时对交换空间的使用倾向,取值为[0, 100]
,取值越小表示尽可能避免交换交换空间,可以提高内存的利用率。
然后使用命令 sudo sysctl -p
重新加载 sysctl 参数。
SDK 相关环境变量
参考官方文档: developer.android.google.cn/tools/varia...
默认情况下,一般只需要把 adb 等工具的路径添加到 PATH 中。考虑到 sdk 默认存放目录,整体环境变量配置如下:
bash
export ANDROID_HOME="$HOME/Android/Sdk"
export PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools"
adb 检测不到设备问题
参考官方文档: developer.android.google.cn/studio/run/...
Linux 的配置主要如下:
-
把当前用户添加到
plugdev
用户组中:bashsudo usermod -aG plugdev $LOGNAME
-
添加由社区维护的 Android 设备的默认 udev 规则: 安装
android-sdk-platform-tools-common
软件包中即可,里面包含了一组适用于 Android 设备并由社区维护的默认udev
规则。bashsudo apt-get install android-sdk-platform-tools-common
按厂商配置 udev 规则
我们可以自己根据厂商 id 维护一份 udev 规则。修改文件 /etc/udev/rules.d/51-android.rules
,添加如下内容:
toml
# https://developer.android.com/studio/run/device
# Google
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
# Huawei
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev"
# Lenovo
SUBSYSTEM=="usb", ATTR{idVendor}=="17ef", MODE="0666", GROUP="plugdev"
# Meizu
SUBSYSTEM=="usb", ATTR{idVendor}=="2a45", MODE="0666", GROUP="plugdev"
# Motorola
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666", GROUP="plugdev"
# MTK
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666", GROUP="plugdev"
# OnePlus
SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", MODE="0666", GROUP="plugdev"
# OPPO
SUBSYSTEM=="usb", ATTR{idVendor}=="22d9", MODE="0666", GROUP="plugdev"
# Qualcomm
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
# Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
# Smartisan
SUBSYSTEM=="usb", ATTR{idVendor}=="29a9", MODE="0666", GROUP="plugdev"
# Sony
SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666", GROUP="plugdev"
# VIVO
SUBSYSTEM=="usb", ATTR{idVendor}=="2d95", MODE="0666", GROUP="plugdev"
# Xiaomi
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", MODE="0666", GROUP="plugdev"
# ZTE
SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", GROUP="plugdev"
# 360
SUBSYSTEM=="usb", ATTR{idVendor}=="2c73", MODE="0666", GROUP="plugdev"
然后使用命令 sudo udevadm control --reload-rules
应用该 udev 规则。
遇到新厂商的设备时,只需要添加使用 lsusb
查看对应的厂商 id,然后添加到上面那个文件即可。比如 lsusb 的对应设备的那行输出为:
txt
Bus 002 Device 003: ID 18d1:4ee7 Google Inc. Pixel 4 / 4 XL
那厂商 id 就是 18d1
,也就是对应 udev 规则里面的 idVendor 应该写 18d1
。
AOSP 源码编译环境搭建
安装 repo
aosp 源码使用 repo 来管理,repo 是个 python3 的脚本,用于整合管理多个 git 仓库。repo 可以根据清单文件去拉取和管理配置的所有代码库。repo 可以下载到 $HOME/bin
下:
bash
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo
此外,得把 $HOME/bin
追加到到环境变量 PATH 中。
repo 在同步的时候会检查更新,gerrit.googlesource.com
可能会访问不到,因此需要更换更新源,配置 REPO_URL
环境变量,使其指向清华源:
bash
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
代码的获取
直接使用 repo 初始化代码库
使用如下命令创建 ~/aosp
目录,并用 repo init
初始化为 aosp 项目根目录,然后用 repo sync
拉取代码:
bash
mkdir ~/aosp
cd ~/aosp
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
repo sync
初始化代码库的时候也可以指定某个具体的 build tag,比如 pixel 4 最新的 Android 13 的 build id 是 TP1A.221005.002.B2
对应的 tag 是 android-13.0.0_r31
,所以可以使用 -b
参数来指定这个 tag:
bash
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r31
具体的 build tag 参考官方文档: 源代码标记和 build 号
使用初始化包
直接 repo init
再 repo sync
,第一次同步时候需要预先下载体积非常大的内容,一旦失败又得重来,因此可以下载清华源提供的初始化好的仓库:
bash
curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
解压后 cd 到项目根目录下执行 repo sync
即可。
如果需要切换 tag,则在项目根目录下使用前面的 repo init <url> -b <tag>
,然后再重新同步即可。