查看原文
其他

LineageOS中编译user模式的系统(Android10)

哆啦安全 2022-08-17

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)实现跳过开机向导、插电源线不休眠等默认配置


大佬们留个关注再走呗,后续精彩文章不断

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存