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>,然后再重新同步即可。

相关推荐
晨曦_子画4 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
孤客网络科技工作室26 分钟前
AJAX 全面教程:从基础到高级
android·ajax·okhttp
Mr Lee_2 小时前
android 配置鼠标右键快捷对apk进行反编译
android
顾北川_野2 小时前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
&岁月不待人&2 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
Winston Wood4 小时前
Android Parcelable和Serializable的区别与联系
android·序列化
清风徐来辽4 小时前
Android 项目模型配置管理
android
帅得不敢出门5 小时前
Gradle命令编译Android Studio工程项目并签名
android·ide·android studio·gradlew
problc5 小时前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter
帅得不敢出门16 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡