Android编译选项中eng、user、user-debug主要区别
reference:
使用编译类型
在针对特定产品进行编译时,如果能在最终发布版本的基础上进行细微修改,通常会非常有用。
在模块定义中,模块可以通过 LOCAL_MODULE_TAGS
指定标记,这些标记可以是以下一个或多个值:optional
(默认)、debug
、eng
。
1、如果某个模块通过 LOCAL_MODULE_TAGS
指定标记,标记默认为 eng。仅当编译选项为eng时,系统才会安装该模块。
2、如果某个模块通过 LOCAL_MODULE_TAGS
指定标记,标记默认为 debug。仅当编译选项为eng/user-debug时,系统才会安装该模块。
3、如果某个模块没有通过 LOCAL_MODULE_TAGS
指定标记,则其标记默认为 optional
。仅当 PRODUCT_PACKAGES
的产品配置需要可选模块时,系统才会安装可选模块。
已定义的编译类型
类型 | 意义 |
---|---|
eng |
这是默认的编译类型。安装带有 eng 和/或 debug 标记的模块。除了带有标记的模块之外,还会根据产品定义文件安装相应模块。ro.secure=0 、ro.debuggable=1 、ro.kernel.android.checkjni=1 、adb 默认处于启用状态。 |
user |
这是旨在用作最终版本配置步骤的编译类型。 安装带有 user 标记的模块。除了带有标记的模块之外,还会根据产品定义文件安装相应模块。ro.secure=1 、ro.debuggable=0 、adb 默认处于停用状态。 |
userdebug |
除了以下几点之外,其余均与 user 相同: 还会安装带有 debug 标记的模块。ro.debuggable=1 、adb 默认处于启用状态。 |
详细情况为:
user | userdebug | eng |
---|---|---|
仅安装标签为 user 的模块 | 安装标签为 user、debug 的模块 | 安装标签为 user、debug、eng 的模块 |
设定属性 ro.secure=1,打开安全检查功能 | 设定属性 ro.secure=1,打开安全检查功能 | 设定属性 ro.secure=0,关闭安全检查功能 |
设定属性 ro.debuggable=0,关闭应用调试功能 | 设定属性 ro.debuggable=1,启用应用调试功能 | 设定属性 ro.debuggable=1,启用应用调试功能 设定属性 ro.kernel.android.checkjni=1,启用 JNI 调用检查 |
默认关闭 adb 功能 | 默认打开 adb 功能 | 默认打开 adb 功能 |
打开 Proguard 混淆器 | 打开 Proguard 混淆器 | 关闭 Proguard 混淆器 |
打开 DEXPREOPT 预先编译优化 | 打开 DEXPREOPT 预先编译优化 | 关闭 DEXPREOPT 预先编译优化 |
注意:如果目标构建变体为 user,则 adb 无法获取 root 权限。