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号2 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号2 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
ii_best7 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk7 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭12 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
aqi0013 小时前
FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg
android·ffmpeg·音视频·流媒体
androidwork15 小时前
深入解析内存抖动:定位与修复实战(Kotlin版)
android·kotlin
梦天201515 小时前
android核心技术摘要
android
szhangbiao17 小时前
“开发板”类APP如果做屏幕适配
android
高林雨露18 小时前
RecyclerView中跳转到最后一条item并确保它在可视区域内显示
android