配置ububtu22.04 安装过程参考以下文章:
VMware虚拟机安装Ubuntu详细教程_vmvare安装ubuto-CSDN博客
安装curl工具
sudo apt-get install curl
更换软件下载源
使用命令行方式时,要先对原来的配置文件进行备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo rm -rf /etc/apt/sources.list
然后从清华大学镜像站获得url:
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
然后使用nano编辑器进行编辑:
sudo nano /etc/apt/sources.list
安装源码下载 前置知识 aosp源码、对应的Linux内核、对应的手机驱动
这里的对应指的是要跟aosp系统版本对应,要与手机型号对应
源码下载 北方用清华镜像源:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
南方用中科大镜像源:
http://mirrors.ustc.edu.cn/help/aosp.html
下载初始化包并解压 mkdir ~/bin cd ~/bin wget -c https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar md5sum aosp-latest.tar tar xvf aosp-latest.tar
核心区别:是否处理压缩
命令
处理的文件类型
典型文件扩展名
tar xvf
未压缩的 tar 归档文件
.tar
tar -zxvf
经过 gzip 压缩的 tar 文件
.tar.gz
, .tgz
配置git sudo apt-get install git git config --global user.email 24358757@qq.com git config --global user.name "xiaojianbang" git config --global http.sslVerify false
下载repo echo "PATH=~/bin:\$PATH" >> ~/.bashrc source ~/.bashrc sudo apt-get install curl curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo chmod a+x ~/bin/repo export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'
修改默认Python 首先查看python路径:
若原先有软连接,先删除:
创建软连接:
sudo ln -s /usr/bin/python3.8 /usr/bin/python
同步指定版本源码 cd aosp repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r17 repo sync
代号和细分版本号可查看以下链接
https://source.android.com/setup/start/build-numbers?hl=zh_cn
选个有驱动的,支持机型多的分支
谷歌手机设备驱动下载地址
https://developers.google.com/android/drivers
同步之前先打个虚拟机快照
repo sync的时候有可能会遇到的问题 fatal: unable to access 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/': server certificate verification failed. CAfile: none CRLfile: none 解决方案:设置跳过SSL证书验证: git config --global http.sslVerify false 再次repo sync
info: A new version of repo is available repo: Updating release signing keys to keyset ver 2.3 warning: repo is not tracking a remote branch, so it will not receive updates repo reset: error: Entry '.github/workflows/test-ci.yml' not uptodate. Cannot merge. fatal: 不能重置索引文件至版本 'v2.16^0'。 解决方案: cd ~/bin/aosp/.repo/repo git pull cd ~/bin/aosp 再次repo init 和 repo sync
安装JDK8 sudo apt-get update sudo apt-get install openjdk-8-jdk
安装所需依赖 (Ubuntu 20.04) sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig 参考以下地址 https://source.android.com/setup/build/initializing?hl=zh-cn
设备驱动的准备 谷歌手机设备驱动下载地址
https://developers.google.com/android/drivers
将驱动文件放入虚拟机解压并运行
查看内核是否存在 源码下载完后最好看下里面有没有你手机对应的设备内核
如果没有,需要另外下载或者编译
https://source.android.google.cn/setup/build/building-kernels#id-version
编译源码 编译参考以下链接 https://source.android.com/setup/build/building source build/envsetup.sh lunch # 选择设备内核和编译版本 userdebug # 增加编译产品选项 修改aosp/device/google/marlin/AndroidProducts.mk make -j4 # 数字代表开启的线程数量,内存小的设备,不要给的过大
编译补充 编译报错或者修改系统文件以后,都可以直接make,已经编译的部分会跳过
make clean 会清除已经编译的,全部重来,在编译不同lunch选项时使用
AOSP源码导入到AndroidStudio 先成功编译一次,再使用以下方法导入
在源码根目录运行如下命令, 会在 out/host/linux-x86/framework 目录下生成 idegen.jar:
source build/envsetup.sh mmm development/tools/idegen/
在源码根目录运行如下命令,会在根目录下生成 android.iml 和 android.ipr ,这两个文件是as的工程配置文件
development/tools/idegen/idegen.sh
安装并打开as,选择Open an existing Android Studio project,找到源码根目录,点击Android.ipr
具体参考:https://wuxiaolong.me/2018/08/15/AOSP3/
android studio的IDEA max heap size记得设置成4096MB
基本设置 去除WIFI叉号 packages/modules/NetworkStack/res/values/config.xml 13行 修改 <!-- HTTP URL for network validation, to use for detecting captive portals. --> <string name="default_captive_portal_http_url" translatable="false">http://connect.rom.miui.com/generate_204</string> <!-- HTTPS URL for network validation, to use for confirming internet connectivity. --> <string name="default_captive_portal_https_url" translatable="false">https://connect.rom.miui.com/generate_204</string> <!-- List of fallback URLs to use for detecting captive portals. --> <string-array name="default_captive_portal_fallback_urls" translatable="false"> <item>http://connect.rom.miui.com/generate_204</item> <item>http://connect.rom.miui.com/generate_204</item> </string-array> 原链接: http://play.googleapis.com/generate_204
联网自动更新时间 frameworks/base/core/java/android/util/NtpTrustedTime.java 53行 增加 private String[] mNtpServers = { "cn.ntp.org.cn", "edu.ntp.org.cn", "ntp1.aliyun.com", "ntp2.aliyun.com", "cn.pool.ntp.org" }; 128行 增加 for(String ntpServer : mNtpServers) { if(client.requestTime(ntpServer, (int) mTimeout, network)) { mHasCache = true; mCachedNtpTime = client.getNtpTime(); mCachedNtpElapsedRealtime = client.getNtpTimeReference(); mCachedNtpCertainty = client.getRoundTripTime() / 2; return true; } }
设置默认中文 build/tools/buildinfo.sh 注释45-47行 增加48行 echo "ro.product.locale=zh-CN" 设置默认时区 59行 增加 echo "persist.sys.timezone=Asia/Shanghai"
设置默认息屏时间 frameworks/base/packages/SettingsProvider/res/values/defaults.xml device/google/marlin/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml <bool name="def_screen_brightness_automatic_mode">true</bool> 自动亮度调节 <integer name="def_screen_off_timeout">1800000</integer> 默认息屏时间 <bool name="def_notification_pulse">false</bool> 关闭震动提醒 <bool name="def_bluetooth_on">false</bool> 关闭蓝牙 <bool name="def_install_non_market_apps">true</bool> 允许安装非市场apk <bool name="def_stay_on_while_plugged_in">true</bool> 连接电源时不休眠 <bool name="def_dim_screen">false</bool>
进行编译测试 make update-api source build/envsetup.sh lunch make -j4
编译注意事项
修改java代码以后,最好先make update-api,再进行增量编译
通常情况下,安卓会对修改的那部分源码进行增量编译,但有时不是很靠谱
如果你确定改的没有问题,但是刷机以后,功能不生效,可以考虑make clean以后重新全量编译
建议每次都是全量编译,不要使用make snod,打包system.img
Pixel3 不能make snod等打包一部分镜像
Pixel1 可以make snod等打包一部分镜像
建议每次都是编译出来的镜像全刷,不要只刷其中几个
Pixel3 刷机不能只刷一部分镜像,全刷,才能刷成功
Pixel1 可以只刷一部分镜像
配置好ANDROID_PRODUCT_OUT环境变量后,使用:
超级adbd 1. 超级adbd system/core/adb/daemon/main.cpp 75行 增加 static bool should_drop_privileges() { return false; 217行 增加 auth_required = false; adbd_auth_init(); 2. 去除编译出来的su、strace等 build/make/target/product/base_system.mk 366行 删除 su \ strace \ adb disable-verity verity cannot be disabled/enabled - USER build 全局搜索报错提示,找到以下文件中的相关代码注释即可 system/core/adb/daemon/set_verity_enable_state_service.cpp //=========================================================== adb remount E only functions on userdebug or eng builds /system/bin/remount exited with status 1 remount failed 全局搜索报错提示,找到以下文件中的相关代码注释即可 system/core/fs_mgr/fs_mgr_remount.cpp remount_service.cpp
selinux 1. user版本还需要设置selinux宽容模式 system/core/init/selinux.cpp 100行 增加 bool IsEnforcing() { return false; 2. selinux有三种运作模式: 强制模式:Enforcing 宽容模式:Permissive 关闭:Disabled 3. 将selinux在Enforcing与permissive之间切换与查看 setenforce 0 getenforce //Permissive setenforce 1 getenforce //Enforcing