Android12 禁用adb

这种做法没有删除任何adb相关的东西,只是设置persist.sys.usb.config中的adb相关属性时添加宏控制。
userdebug版本一样可以禁用

添加宏开关
  • device/mediatek/mt6761/BoardConfig.mk
# for adb
ADB_ENABLE:=false
添加ro.adb.enabled属性
  • build/make/core/main.mk
# for adb
ifeq (true,$(strip $(ADB_ENABLE)))
  ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.enabled=1
else
  ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.enabled=0
endif
根据ro.adb.enabled设置persist.sys.usb.config
  • system/core/init/property_service.cpp
static uint32_t PropertySet(const std::string& name, const std::string& value, std::string* error) {
   
   
	// for adb 
    if (name == "persist.sys.usb.config" /*|| name == "sys.usb.config"*/){
   
   
        LOG(INFO) << " name= " << name << " value= " << value;
        std::string adb_value = GetProperty("ro.adb.enabled", "0");
        if (adb_value == "0"){
   
   
            if (value.find("adb") != std::string::npos){
   
   
                
<think>好的,我现在需要在RK3588芯片的Android 12源码中找到禁用adb连接的方法。用户提到他们之前在device/common/目录下找到了相关代码,但因为冲突被禁用了。我需要先理解adbAndroid系统中的工作方式,以及如何通过修改源码来禁用adb connect功能。 首先,adbAndroid Debug Bridge)是Android开发工具包中的一个重要组件,允许开发者通过USB或网络与设备通信。禁用adb connect可能涉及阻止adb守护进程(adbd)的启动或修改其配置,使其不接受连接请求。 在Android系统中,adbd的启动通常由init进程控制,相关配置可能在init.rc文件里。我需要查找RK3588的init脚本,看看adbd的启动条件。如果能够注释掉或修改启动adbd的服务,可能就能禁用adb。不过这样可能会完全禁用adb,而不仅仅是adb connect。用户可能希望保留USB调试,但禁止网络连接?需要进一步确认需求,但用户的问题明确是禁用adb connect,也就是网络连接部分。 另外,adbd的源码位于system/core/adb目录下。可能需要修改adbd的代码,使其不监听网络端口。例如,在adbd_main函数中,可能有关于网络连接的部分,比如调用adb_listen_on_tcp_port的函数。如果注释掉这部分代码,或者添加条件编译,可能可以禁用TCP连接,只保留USB。 同时,查看用户提供的引用[1],提到在device/common/下有usb和uart的代码,但被禁用了。可能之前的修改涉及到这些部分,导致冲突。现在需要找到RK3588特定的device目录,比如device/rockchip/rk3588,或者类似的路径,查看其中的mk文件或rc文件,是否有控制adbd启动的配置。 另外,在系统属性中,adb默认的网络端口是5555。可以通过设置系统属性service.adb.tcp.port为0来禁用TCP连接。这可能在build.prop或system.prop中设置,或者在init脚本中通过setprop命令实现。但用户需要的是源码级别的修改,而不是运行时设置。 可能还需要修改adbd的编译配置,比如在Android.mk中添加宏定义,使得网络功能被禁用。例如,添加-DADB_TCP=0之类的编译选项,阻止TCP相关代码的编译。 需要逐步检查这些可能的修改点: 1. 检查init.rc文件,找到启动adbd的服务,并修改其触发条件,比如将on property:sys.usb.config=adb改为其他条件,或者直接移除该服务。但这样可能影响USB调试功能。 2. 修改adbd的源码,在system/core/adb/adbd_main.cpp中,找到启动TCP监听的代码部分。例如,函数调用setup_port(5555, &tcp_transport)之类的代码,将其注释掉或条件编译掉。 3. 在设备特定的makefile中,比如device.mk,添加系统属性设置,如persist.adb.tcp.port=0,或者在系统属性配置文件中设置。 4. 检查是否有SElinux策略阻止adb的网络连接,但用户的问题是需要通过源码修改来禁用,而不是配置SElinux。 接下来需要具体查找RK3588 Android 12源码中的相关文件路径。根据引用[1],之前是在device/common/下找到相关代码,但被禁用了。可能现在需要针对RK3588的平台代码进行修改,可能在device/rockchip/rk3588或类似的目录下。 可能的步骤: - 在device/rockchip/rk3588/目录下查找init.rc或类似的文件,查看adbd服务的启动配置。例如,在init.rk3588.rc中,可能有类似service adbd /system/bin/adbd的段落,可以设置disabled标志,或者修改其class属性,使其不自动启动。 - 如果adbd的启动依赖于某些属性,比如ro.debuggable,可能需要修改系统属性,使得ro.debuggable=0,这样adbd不会自动启动。但这样可能影响其他调试功能。 - 在系统构建时,通过PRODUCT_PROPERTY_OVERRIDES设置service.adb.tcp.port=0,禁止TCP监听。这可以在设备对应的product mk文件中设置。 - 修改adbd的源码,在system/core/adb/daemon/main.cpp中,找到函数start_device_log(),或者在adb_listen_on_tcp_port函数处,添加条件判断,使其返回而不监听TCP端口。 例如,在main函数中,可能有一段代码: if (usb || !should_drop_privileges()) { // 启动USB或TCP监听 } 可以在这里添加条件,或者直接注释掉TCP监听部分。 此外,还需要考虑用户是否需要完全禁用adb,还是仅禁用网络adb。如果是后者,可能需要保留USB adb,但禁用TCP连接。因此,修改TCP监听部分更合适。 另外,引用[4]中提到通过pm命令查看包路径,这可能与当前问题无关,但用户提供的引用可能提示其他可能的修改点,比如系统服务配置。 总结可能的源码修改步骤: 1. 修改adbd源码,禁止TCP监听:在system/core/adb/daemon/main.cpp中,注释掉或条件编译掉涉及adb_listen_on_tcp_port的部分。 2. 在设备特定的init配置中,禁止adbd服务启动,或者修改其启动条件。 3. 在系统属性中设置service.adb.tcp.port=0,禁止TCP端口监听。 需要验证这些方法中哪些在源码层面可行,并且适合RK3588平台。 例如,在RK3588的设备树中,可能有一个BoardConfig.mk文件,可以在这里添加编译选项,或者修改系统属性。 具体实现方式可能涉及: - 在device/rockchip/rk3588/目录下的某个mk文件中,添加PRODUCT_PROPERTY_OVERRIDES += service.adb.tcp.port=0 - 修改init.rc文件,将adbd服务设置为disabled,或者修改触发条件,比如只有在USB连接时才启动。 - 修改adbd的Android.mk文件,添加编译宏,例如LOCAL_CFLAGS += -DADB_TCP=0,从而在编译时禁用TCP相关代码。 需要进一步查阅adbd的源码,确认如何正确禁用TCP监听。例如,在system/core/adb/daemon/main.cpp中,有以下代码段: static void adbd_init() { ... int usb = 0; int tcp = 0; if (access(USB_ADB_PATH, F_OK) == 0 || access(USB_FFS_ADB_EP0, F_OK) == 0) { usb = 1; } if (access("/dev/android_adb_enable", F_OK) == 0) { tcp = 1; } ... if (tcp) { adbd_listen_on_tcp_port(); } } 如果可以将tcp设置为0,或者条件不满足,则不会监听TCP端口。可能可以通过修改设备配置,使得access("/dev/android_adb_enable", F_OK)返回失败,或者直接修改代码中的条件。 或者,在设备启动时,不创建/dev/android_adb_enable节点,从而使得tcp变量为0。 但这种方法可能需要修改内核或驱动代码,较为复杂。更直接的方法是在adbd的代码中直接注释掉tcp的处理部分。 另一种方法是在adbd的main函数中,直接跳过TCP监听部分。例如,修改: void adbd_main() { ... if (use_tcp) { setup_tcp(); } ... } 将use_tcp设置为false,或者直接注释掉setup_tcp()的调用。 需要找到具体的代码位置,例如在adbd_main函数中,可能调用了adb_listen_on_tcp_port(5555)之类的函数,可以将其注释掉。 或者,在system/core/adb/transport.cpp中,修改adb_listen_on_tcp_port函数,使其返回失败。 例如: int adb_listen_on_tcp_port(int port) { return -1; // 直接禁止TCP监听 } 这样可以确保任何尝试监听TCP端口的操作都会失败。 此外,还需要确保在adbd启动时,不会尝试监听TCP端口。这可能需要在编译时通过宏定义来控制,例如在Android.mk中添加: LOCAL_CFLAGS += -DADB_TCP=0 然后在代码中: #ifndef ADB_TCP #define ADB_TCP 1 #endif ... if (ADB_TCP) { // 启动TCP监听 } 这样,当编译时定义ADB_TCP为0时,相关代码不会被编译进去。 综上,具体的源码修改步骤可能包括: 1. 修改adbd的代码,禁用TCP监听功能,可以通过条件编译或直接注释代码。 2. 在设备特定的配置文件中,禁止adbd服务启动或修改其启动参数。 3. 设置系统属性,禁止TCP端口监听。 现在,需要将这些可能的步骤具体化到RK3588 Android 12的源码中。 例如,针对禁用adb connect(即TCP连接),可以在adbd的源码中禁用TCP监听,重新编译系统镜像。 具体步骤可能如下: - 修改system/core/adb/daemon/main.cpp中的相关代码,移除或注释掉TCP监听的代码。 - 在设备配置中确保adbd服务不会因为其他原因启动TCP监听。 - 编译并烧写系统镜像,测试adb connect是否被禁用。 同时,需要注意这些修改是否会影响USB调试功能。如果用户希望保留USB调试,则只需禁用TCP部分,而保留USB部分的代码。 因此,最安全的方法是仅修改TCP监听部分,而不是完全禁用adbd。 最后,需要验证修改后的系统是否仍然支持USB adb,但拒绝网络adb连接。</think>在RK3588的Android 12源码中禁用`adb connect`(即adb的TCP连接功能),需通过修改源码禁止adbd守护进程监听TCP端口。以下是具体步骤: --- ### **步骤1:修改adbd源码,禁用TCP监听** 1. **定位源码文件** adbd的源码位于`system/core/adb/daemon/main.cpp`。在该文件中找到TCP监听相关的代码段,例如: ```cpp // 示例代码段(具体行号可能因版本不同而变化) if (tcp_enabled) { adb_listen_on_tcp_port(5555); // 监听TCP端口5555 } ``` 将其注释或删除,或添加条件判断直接跳过该逻辑。 2. **强制禁用TCP监听** 修改`adb_listen_on_tcp_port`函数,使其直接返回失败: ```cpp int adb_listen_on_tcp_port(int port) { return -1; // 禁止TCP监听 } ``` 或通过宏定义全局禁用TCP功能(推荐): ```makefile # 在adbd的Android.mk或相关编译配置中添加宏定义 LOCAL_CFLAGS += -DADB_TCP=0 ``` --- ### **步骤2:修改设备初始化配置** 1. **禁止TCP端口的系统属性** 在设备特定的`system.prop`或`build.prop`文件中添加: ```properties service.adb.tcp.port=0 ``` 或在`device/rockchip/rk3588/device.mk`中通过`PRODUCT_PROPERTY_OVERRIDES`设置: ```makefile PRODUCT_PROPERTY_OVERRIDES += service.adb.tcp.port=0 ``` 2. **调整init.rc中的adbd服务配置** 在`init.rk3588.rc`或类似文件中,确保adbd服务仅在USB模式下启动: ```rc service adbd /system/bin/adbd class core socket adbd stream 660 system system disabled seclabel u:r:adbd:s0 # 仅当USB配置为adb时启动 on property:sys.usb.config=adb start adbd ``` --- ### **步骤3:重新编译并验证** 1. **编译系统镜像** 执行完整编译: ```bash source build/envsetup.sh lunch rk3588-userdebug # 根据实际配置选择 make -j$(nproc) ``` 2. **验证修改效果** - **USB调试**:通过USB连接设备,确认`adb devices`可识别设备。 - **TCP连接**:尝试`adb connect <设备IP>`,应提示连接失败。 --- ### **关键引用说明** - 引用[1]提到`device/common/`下的代码冲突,需注意RK3588的设备树路径可能为`device/rockchip/rk3588/`,修改时需优先检查该目录下的配置[^1]。 - 引用[4]的`pm list packages`命令与adb管理无关,但系统属性设置(如`service.adb.tcp.port`)是禁用TCP监听的核心[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值