【定制Android系统】Android 7.1 在 user 版本中默认关闭 开发者选项 的总开关

本文介绍如何根据不同的构建类型(user或eng)调整Android系统的开发者选项默认显示状态及总开关的开启状态。通过在DevelopmentSettings.java中增加判断逻辑实现需求。

需求:user 版本中,Settings 中的开发者选项默认隐藏,且总开关默认关闭。eng 版本默认存在且默认打开总开关。
源码位置:packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java
解决方案:
在 DevelopmentSettings.java 的 onResume() 函数中,做出如下修改。
源码是这么写的:

        final ContentResolver cr = getActivity().getContentResolver();
607        mLastEnabledState = Settings.Global.getInt(cr,
608                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
609        mSwitchBar.setChecked(mLastEnabledState);
610        setPrefsEnabledState(mLastEnabledState);
611
612        if (mHaveDebugSettings && !mLastEnabledState) {
613            // Overall debugging is disabled, but there are some debug
614            // settings that are enabled.  This is an invalid state.  Switch
615            // to debug settings being enabled, so the user knows there is
616            // stuff enabled and can turn it all off if they want.
617            Settings.Global.putInt(getActivity().getContentResolver(),
618                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
619            mLastEnabledState = true;
620            mSwitchBar.setChecked(mLastEnabledState);
621            setPrefsEnabledState(mLastEnabledState);
622        }
623        mSwitchBar.show();
624
625        if (mColorModePreference != null) {
626            mColorModePreference.startListening();
627            mColorModePreference.updateCurrentAndSupported();
628        }

在其中 的 第一个 if 语句中 加入 “eng”.equals(android.os.Build.TYPE) 即可。
修改后的源码如下:

        final ContentResolver cr = getActivity().getContentResolver();
607        mLastEnabledState = Settings.Global.getInt(cr,
608                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
609        mSwitchBar.setChecked(mLastEnabledState);
610        setPrefsEnabledState(mLastEnabledState);
611
612        if (mHaveDebugSettings && !mLastEnabledState && "eng".equals(android.os.Build.TYPE)) {
613            // Overall debugging is disabled, but there are some debug
614            // settings that are enabled.  This is an invalid state.  Switch
615            // to debug settings being enabled, so the user knows there is
616            // stuff enabled and can turn it all off if they want.
617            Settings.Global.putInt(getActivity().getContentResolver(),
618                    Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
619            mLastEnabledState = true;
620            mSwitchBar.setChecked(mLastEnabledState);
621            setPrefsEnabledState(mLastEnabledState);
622        }
623        mSwitchBar.show();
624
625        if (mColorModePreference != null) {
626            mColorModePreference.startListening();
627            mColorModePreference.updateCurrentAndSupported();
628        }

以上内容是我今天刚刚从网上查到并借鉴修改的。如果存在任何问题,请不吝赐教。

<think>首先,用户的问题是关于在RK3288 Android 7.1user版本关闭ADB调试功能。用户提到“编译user版本关闭ADB调试功能”,所以我需要专注于编译时的设置。 从系统级指令,我必须: - 使用$...$格式的行内数学表达式(但这里可能不涉及数学)。 - 使用$$...$$格式的独立公式(同样,可能不适用)。 - 确保LaTeX语法正确(但内容主要是文本)。 - 使用中文回答。 - 生成相关问题。 - 在引用的段落末尾自然地添加引用标识。 - 回答结构清晰,逐步解决问题。 - 参考提供的引用:[^1], [^2], [^3]。 提供的引用: - [^1]: 关于Android 7.1编译和ADB设置,提到adb root, adb disable-verity等。 - [^2]: 关于USB权限和ADB调试。 - [^3]: 关于编译调试日志,提到ro.adb.secure属性。 关键点是关闭ADB调试功能。在Android中,ADB调试通常通过系统属性控制,特别是ro.adb.secure和persist.sys.usb.config。 在Android build中,user版本默认关闭ADB调试的,但用户指定了RK3288平台,所以可能有特定设置。 用户说:“在RK3288 Android 7.1user版本关闭ADB调试功能”,并提到“编译user版本时”。所以,我需要指导如何在编译时配置。 从引用[^3]中:“Also add support for disabling adbd entirely via ro.adb.secure.” 这表示ro.adb.secure属性控制ADB。 在Android中: - ro.adb.secure:如果设置为1,ADB需要授权;如果0,则不需要。 - 但关闭ADB调试功能可能意味着完全禁用ADB,或者至少限制它。 在user版本中,ADB调试通常默认是禁用的,但为了确保,我们需要设置系统属性。 编译时设置: - 在Android build系统中,属性通常在build.prop或设备特定的make文件中设置。 - 对于Rockchip平台(如RK3288),可能有特定的配置文件。 步骤: 1. **理解需求**:关闭ADB调试功能,意味着在user版本中,ADB连接时不应允许调试。 2. **默认行为**:在Android user版本中,ro.adb.secure通常设置为1,这要求授权。但用户可能想完全禁用。 3. **编译时配置**:通过设置系统属性来禁用ADB。 从引用[^3]:“Also add support for disabling adbd entirely via ro.adb.secure.” 这暗示ro.adb.secure可以控制ADB的启用。 实际上,在Android中: - ro.adb.secure=1:ADB需要授权。 - ro.adb.secure=0:ADB不需要授权(但可能仍然启用)。 - 要完全禁用ADB,可能需要设置persist.sys.usb.config或其他属性。 常见的做法是设置persist.sys.usb.config为none或仅充电模式。 但编译时,我们需要在build中设置默认值。 对于RK3288 Android 7.1,参考Rockchip的文档或代码。 从引用[^1]和[^3],似乎ro.adb.secure是关键。 在build系统中,属性可以在device/rockchip/rk3288/目录下的文件中设置。 具体步骤: - 找到设备特定的make文件。 - 设置PRODUCT_PROPERTY_OVERRIDES或类似变量来定义ro.adb.secure。 例如: 在device/rockchip/rk3288/system.prop或BoardConfig.mk中。 设置ro.adb.secure=0或1。但为了关闭ADB,可能需要设置为0,但0可能允许无授权连接。 完全禁用ADB:设置persist.sys.usb.config=none。 在Android中,USB配置通过persist.sys.usb.config控制。默认user版本中可能不同。 在user版本中,默认persist.sys.usb.config可能设置为mtp或adb,但adb部分可能被禁用。 为了确保ADB调试关闭1. 设置ro.adb.secure=1(这要求授权,但ADB仍启用)。 2. 或者,设置persist.sys.usb.config为不包含adb的模式,如mtp。 但编译时设置默认值。 在Rockchip的build中,参考引用[^3]:“export PATH /system/bin export TERM linux” – 这看起来是启动脚本的一部分。 关键行:“Also add support for disabling adbd entirely via ro.adb.secure.” 所以,设置ro.adb.secure=1应该启用安全模式,但可能不“禁用”ADB。 要完全禁用ADB,可能需要阻止adbd服务启动。 在init.rc文件中,adbd服务可能有条件启动。 在Android中,adbd的启动通常基于ro.debuggable属性。 - ro.debuggable:如果1,ADB默认启用;如果0,则禁用。 在user版本中,ro.debuggable默认为0,ADB调试默认禁用。 在eng版本中,ro.debuggable=1。 所以,在user版本编译时,ro.debuggable应该自动为0,ADB调试应该被禁用。 用户说“user版本”,所以可能默认已禁用,但用户想确保或显式关闭。 用户提到“关闭ADB调试功能”,在user版本中应该默认关闭。 但从引用中,[^1]提到在user版本中需要adb root等操作,这可能是因为ADB默认启用或需要额外步骤。 在引用[^1]:“使用 adb 时,需要先执行adb root ,adb disable-verity关闭 system 分区的 verity特性,重启后再执行 adb root, adb remount” – 这表示在user版本中ADB是启用的,但需要授权。 为了完全禁用ADB调试,我们需要设置ro.debuggable=0。 在build系统中,对于user版本,BUILD_TYPE应该是user,这设置ro.debuggable=0。 具体到RK3288,编译user版本时,通过选择lunch选项。 例如:lunch rk3288-user 这应该设置ro.debuggable=0。 然后,在启动时,adbd不会启动,除非有其他配置。 在init.rc中,adbd服务可能有条件: ``` service adbd /sbin/adbd --root_seclabel=u:r:su:s0 class core socket adbd stream 660 system system disabled seclabel u:r:adbd:s0 on property:ro.debuggable=1 start adbd on property:sys.usb.config=adb start adbd ``` 所以,如果ro.debuggable=0,adbd不会自动启动,除非sys.usb.config包含adb。 在user版本中,sys.usb.config默认可能不包含adb。 所以,在user版本编译时,ADB调试默认应该是禁用的。 但用户可能想确保,或者在编译时显式设置。 或许在RK3288上,有特定设置。 从引用[^3]:“Also add support for disabling adbd entirely via ro.adb.secure.” – 这暗示ro.adb.secure可以用于禁用ADB。 搜索Rockchip相关代码。 在frameworks/base/services/usb/中,有UsbDebuggingManager.java,但那是管理调试授权。 要禁用ADB,最好设置ro.debuggable=0。 在编译时,对于user版本,它应该自动设置。 如果用户想显式关闭,可以修改设备树文件。 步骤: 1. 确保编译user版本:使用lunch选择user变体。 2. 如果需要显式禁用,在设备make文件中设置PRODUCT_PROPERTY_OVERRIDES += ro.debuggable=0 但user版本默认就是0。 在BoardConfig.mk或device.mk中,可以覆盖。 例如,在device/rockchip/rk3288/device.mk中: ``` PRODUCT_PROPERTY_OVERRIDES += \ ro.debuggable=0 \ ro.adb.secure=1 ``` ro.adb.secure=1是额外的安全层。 但ro.debuggable=0应该足够禁用ADB调试。 在user版本中,默认ro.debuggable=0。 所以,可能不需要额外步骤。 但为了安全,设置ro.adb.secure=1。 用户指定“关闭ADB调试功能”,所以设置ro.debuggable=0应该有效。 在引用[^3]中,提到ro.adb.secure,所以或许在RK平台上,使用它。 建议: - 编译user版本:lunch rk3288-user - 在设备配置中,确保没有覆盖ro.debuggable。 - 或者显式设置。 回答结构: 1. 解释默认行为:在Android user版本中,ADB调试默认禁用。 2. 提供编译时步骤:如何确保ADB关闭。 3. 参考引用。 生成相关问题。 回答用中文。 最终步骤: - 在编译RK3288 Android 7.1 user版本时,ADB调试默认禁用。 - 如果需要显式确认,在设备树中设置属性。 例如,在device/rockchip/rk3288/system.prop中添加: ``` ro.debuggable=0 ro.adb.secure=1 ``` 或者类似。 在build.prop中设置。 但在编译时,通过PRODUCT_SYSTEM_PROPERTIES或类似。 在Android.mk或Makefile中。 具体路径:device/rockchip/common或rk3288-specific。 从引用[^3],似乎是框架代码,但属性可以在设备层设置。 建议修改device/rockchip/rk3288/system.prop文件,添加: ``` ro.debuggable=0 ro.adb.secure=1 persist.sys.usb.config=mtp ``` persist.sys.usb.config=mtp设置USB模式为MTP,不包含adb。 在user版本中,默认可能就是这样。 但为了确保,添加这些行。 然后,编译后,ADB调试应该被禁用。 在回答中,引用相关部分。 引用[^3]提到ro.adb.secure,所以可以引用它。 回答大纲: 1. 介绍:在RK3288 Android 7.1 user版本中,ADB调试功能可以通过编译时设置系统属性来关闭。 2. 步骤: a. 确保编译user版本。 b. 修改设备配置文件,添加属性。 c. 具体文件路径和内容。 3. 解释属性作用。 4. 生成相关问题。 相关问题: 1. 如何在Android中完全禁用ADB? 2. RK3288 Android 7.1编译的其他常见配置? 3. ADB调试安全最佳实践? 引用添加: 在提到属性时,引用[^3]。</think>### 如何在RK3288 Android 7.1 user版本编译时关闭ADB调试功能 在Android系统中,ADB(Android Debug Bridge)调试功能允许开发者通过USB连接进行设备调试和文件传输。在 **user版本**(生产环境版本)中,ADB调试默认是禁用的,但有时平台特定配置(如Rockchip RK3288)可能覆盖默认行为。为确保在RK3288 Android 7.1user版本中完全关闭ADB调试功能,需要在编译时通过修改系统属性来实现。以下是详细步骤,基于Android构建系统和Rockchip平台特性: #### 步骤1: 确认编译版本类型 - 在编译前,确保选择 **user版本** 的构建变体。user版本默认设置 `ro.debuggable=0`,这会禁用ADB调试。如果使用Rockchip的构建脚本,执行以下命令: ```bash source build/envsetup.sh lunch rk3288-user # 选择RK3288的user版本 make -j8 # 开始编译 ``` - 在user版本中,`ro.debuggable=0` 表示设备不可调试,ADB服务(adbd)不会自动启动,除非有额外配置覆盖[^3]。 #### 步骤2: 修改设备配置文件以显式关闭ADB 尽管user版本默认禁用ADB,但RK3288平台可能需要显式设置属性来确保关闭。关键属性包括: - `ro.debuggable=0`:完全禁用调试功能(包括ADB)。 - `ro.adb.secure=1`:启用ADB授权验证(即使ADB启用,也需要用户授权)。 - `persist.sys.usb.config=mtp`:设置USB默认模式为MTP(文件传输),不包含ADB模式。 具体修改文件:**`device/rockchip/rk3288/system.prop`**(如果文件不存在,创建它)。添加以下内容: ``` # 关闭ADB调试功能 ro.debuggable=0 ro.adb.secure=1 persist.sys.usb.config=mtp ``` 这些属性会编译到 `build.prop` 文件中,并在系统启动时生效。`ro.adb.secure=1` 提供了额外的安全层,确保即使USB配置错误,ADB也无法无授权连接[^3]。 #### 步骤3: 验证和编译 - **验证属性**:编译后,检查生成的 `out/target/product/rk3288/system/build.prop` 文件,确保包含上述属性。 - **编译并刷机**:完成修改后,重新编译并刷入设备: ```bash make -j8 fastboot flash system system.img # 使用fastboot刷入系统 ``` - **测试ADB状态**:设备启动后,连接USB并执行: ```bash adb devices ``` 如果ADB调试已关闭,设备不会出现在列表中(输出为空)。或者,在设备上检查 `getprop ro.debuggable` 的值应为 `0`。 #### 为什么需要显式设置? - 在RK3288 Android 7.1中,默认user版本可能因设备树配置而保留ADB功能(例如,某些调试日志功能)。引用[^3]提到:“Also add support for disabling adbd entirely via ro.adb.secure”,这表明 `ro.adb.secure` 是控制ADB的核心属性。显式设置可避免平台特定覆盖。 - 如果未关闭,ADB调试可能导致安全风险,如未授权访问(引用[^1]中提到的 `adb root` 和 `adb remount` 操作可能被利用)。 #### 注意事项 - **权限问题**:修改系统配置文件需要root权限或设备树访问权限。确保在编译环境中正确设置。 - **兼容性**:此方法适用于Android 7.1 (Nougat) 和Rockchip RK3288平台。其他Android版本或芯片平台可能需要调整属性路径。 - **备选方案**:如果无法修改 `system.prop`,可在 `BoardConfig.mk` 中添加: ```makefile PRODUCT_PROPERTY_OVERRIDES += ro.debuggable=0 PRODUCT_PROPERTY_OVERRIDES += ro.adb.secure=1 ``` 通过以上步骤,您可以在编译RK3288 Android 7.1 user版本时可靠地关闭ADB调试功能,提升设备安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海Enoch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值