LineageOS中编译user模式的系统(Android10)
The following article is from 卓码空间 Author QDroid88888
一、安卓系统编译选项简介
android编译的时候可以选择编译选项 eng、user 和 userdebug。
1.eng编译选项
(1). 系统编译的时候安装标签LOCAL_MODULE_TAGS为 user、debug、eng 的模块
(2). 设定属性 ro.secure=0,关闭安全检查功能
(3). 设定属性 ro.debuggable=1,启用应用调试功能
(4). 默认打开 adb 功能,adb拥有root权限
2.userdebug编译选项
(1). 系统编译的时候安装标签LOCAL_MODULE_TAGS为 user、debug 的模块
(2). 设定属性 ro.secure=1,打开安全检查功能
(3). 设定属性 ro.debuggable=1,启用应用调试功能
(4). 默认打开 adb 功能,adb拥有root权限
(5). userdebug与“user”类似,但具有 root 权限和调试功能;是进行调试时的首选编译类型
3.user编译选项
(1). 系统编译的时候安装标签LOCAL_MODULE_TAGS为 user的模块
(2). 设定属性 ro.secure=1,打开安全检查功能
(3). 设定属性 ro.debuggable=0,关闭应用调试功能
(4). 默认关闭 adb 功能,adb无root权限
(5). 权限受限,适用于生产环境
综上总结:
eng就是工程师用的开发测试环境,方便开发调试各种软硬件之间的交互、性能等等。
userdebug就是user版本发布之前的开发调试版本
user就是生产环境用的版本,平时我们正规渠道买的手机都是user版本的。
目前很多App检测运行环境是否正常的检测点之一就是检测当前运行的系统属于哪个编译选项。eng、userdebug都是属于风险设备考虑范畴。
二、lineageOs中编译user选项系统
lineageOs源码中,官方提供的编译方式命令如下(oneplus3说明):
source build/envsetup.sh
breakfast oneplus3
brunch oneplus3
通过以上命令编译出来的是userdebug选项的刷机包。通过"breakfast/brunch"关键字搜索源码找到实现的地方,breakfast、brunch命令实现文件路径如下:
vendor/lineage/build/envsetup.sh
从以上路径可以看出这个是lineage自己增加的编译命令。查看breakfast和brunch的实现代码:
# brunch命令实现,会调用breakfast
function brunch()
{
breakfast $*
if [ $? -eq 0 ]; then
mka bacon
else
echo "No such item in brunch menu. Try 'breakfast'"
return 1
fi
return $?
}
# breakfast实现,代码中可以看到可以传入编译的设备代码和编译选项
# 如果没有指定编译选项,默认使用"userdebug"
function breakfast()
{
target=$1
local variant=$2
if [ $# -eq 0 ]; then
# No arguments, so let's have the full menu
lunch
else
echo "z$target" | grep -q "-"
if [ $? -eq 0 ]; then
# A buildtype was specified, assume a full device name
lunch $target
else
# This is probably just the Lineage model name
if [ -z "$variant" ]; then
variant="userdebug"
fi
lunch lineage_$target-$variant
fi
fi
return $?
}
从以上编译命令的实现分析,需要编译user版本的系统只需要将编译命令改成如下:
source build/envsetup.sh
breakfast oneplus3 user
brunch oneplus3 user
三、新增编译user选项命令makeuser
为了方便编译user版本的,完全可以按照自己的想法增加属于自己的编译命令。比如增加一个makeuser命令,传入设备代码就编译对应手机的lineageOs刷机包。实现方式如下:
(1)、在vendor/lineage/build/envsetup.sh文件中添加makeuser命令,具体实现如下
# ///ADD START
# 只需要传入设备代码号就可以进行user版本系统编译,参考breakfast命令实现
function makeuser()
{
if [ $# != 1 ]; then
# No arguments, so let's have the full menu
printf "Error:arguments must be one,please input device codename\n"
return
fi
breakfast $1 user
if [ $? -eq 0 ]; then
mka bacon
else
echo "No such item in brunch menu. Try 'breakfast'"
return 1
fi
return $?
}
# ///ADD END
(2)、使用source命令使新增的命令生效
source build/envsetup.sh
(3)、使用新命令:makeuser编译
makeuser oneplus3
如下是我修改之后的执行效果图:
关于"user"编译选项下如何配置adb的root权限,后面文章会分享,可以关注我的公众号不定时更新。
[上一篇]玩转Android10源码开发定制(15)实现跳过开机向导、插电源线不休眠等默认配置
大佬们留个关注再走呗,后续精彩文章不断