Linux 下的安卓开发环境配置

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 用户组中:

    bash 复制代码
    sudo usermod -aG plugdev $LOGNAME
  • 添加由社区维护的 Android 设备的默认 udev 规则: 安装 android-sdk-platform-tools-common 软件包中即可,里面包含了一组适用于 Android 设备并由社区维护的默认 udev 规则。

    bash 复制代码
    sudo 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 initrepo sync,第一次同步时候需要预先下载体积非常大的内容,一旦失败又得重来,因此可以下载清华源提供的初始化好的仓库:

bash 复制代码
curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar

解压后 cd 到项目根目录下执行 repo sync 即可。

如果需要切换 tag,则在项目根目录下使用前面的 repo init <url> -b <tag>,然后再重新同步即可。

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui