[FAQ04776]如何默认打开user版本 debug 选项, 默认打开adb 连接

[Description]

如何默认打开user 版本的USB debug 选项, 默认打开adb 连接


[Keyword]

量产版本 user usb debug root adb 连接


[Solution]
1. 在android 4.0 之前,这个设置是在frameworks/base/service/..../SystemServer.java 里面
设置会根据system property 的persist.service.adb.enable 来设置。您可以看到类似如代码:
       // make sure the ADB_ENABLED setting value matches the secure property value
       Settings.Secure.putInt(mContentResolver, Settings.Secure.ADB_ENABLED,
               "1".equals(SystemProperties.get("persist.service.adb.enable")) ? 1 : 0);
       // register observer to listen for settings changes
       mContentResolver.registerContentObserver(Settings.Secure.getUriFor(Settings.Secu
re.ADB_ENABLED),false, new AdbSettingsObserver());

   
而这个persist.service.adb.enable 默认是放在在default.prop 中,在编译的时候在
build/core/main.mk 中确认,
ifeq (true,$(strip $(enable_target_debugging)))
  # Target is more debuggable and adbd is on by default
  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1
  # Include the debugging/testing OTA keys in this build.
  INCLUDE_TEST_OTA_KEYS := true
else # !enable_target_debugging
  # Target is less debuggable and adbd is off by default
  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 persist.service.adb.enable=0
endif # !enable_target_debugging


您需要将: ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
persist.service.adb.enable=0  改成

ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1


2. 在android 4.0 之后,因为adb 的控制,统一使用了persist.sys.usb.config 来控制,于是对
应的设置点也改到了frameworks/base/service/...../usb/UsbDeviceManager.java 中,您也可以
看到类似的代码如:
public  UsbHandler(Looper looper) {
       // persist.sys.usb.config should never be unset.  But if it is, set it to "adb"
       // so we have a chance of debugging what happened.
        mDefaultFunctions = SystemProperties.get("persist.sys.usb.config", "adb");
       // sanity check the sys.usb.config system property
       // this may be necessary if we crashed while switching USB configurations
       String config = SystemProperties.get("sys.usb.config", "none");
       if (!config.equals(mDefaultFunctions)) {
           Slog.w(TAG, "resetting config to persistent property: " + mDefaultFunctions);
           SystemProperties.set("sys.usb.config", mDefaultFunctions);
       }
       mCurrentFunctions = mDefaultFunctions;
       String state = FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim();
       updateState(state);
       mAdbEnabled = containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_ADB);
public void  systemReady() {
// make sure the ADB_ENABLED setting value matches the current state
   Settings.Secure.putInt(mContentResolver, Settings.Secure.ADB_ENABLED, mAdbEnabled ?
1 : 0);


而这个persist.sys.usb.config 中adb 的配置是在alps/build/tools/post_process_props.py 中
根据ro.debuggable = 1 or 0 来设置,1 就是开启adb, 0 即关闭adb debug. 而这个
ro.debuggable 也是在alps/build/core/main.mk 中设置,和2.3 修改类似
不过您这样打开之后,对于user 版本adb shell 开启的还是shell 权限,而不是root 权限,如果
您需要root 权限,需要再改一下system/core/adb/adb.c 里面的should_drop_privileges() 这个

函数,在#ifndef ALLOW_ADBD_ROOT 时return 0; 而不是return 1; 即可。


---------------------------------------------------------------------------------------


1. 根据编译命令确定ro.debuggable

build/core/main.mk

## user/userdebug ##

user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
enable_target_debugging := true
tags_to_install :=
ifneq (,$(user_variant))
  # Target is secure in user builds.
  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1

  ifeq ($(user_variant),userdebug)
    # Pick up some extra useful tools
    tags_to_install += debug

    # Enable Dalvik lock contention logging for userdebug builds.
    ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
  else
    # Disable debugging in plain user builds.
    enable_target_debugging :=
  endif

  # enable dex pre-optimization for all TARGET projects in default to 
  # speed up device first boot-up
  #add by yanqi.liu for costomization @{
  ifneq ($(JRD_IS_GOAL_PERSO),true)
     WITH_DEXPREOPT := true
  endif
#}
  # Turn on Dalvik preoptimization for user builds, but only if not
  # explicitly disabled and the build is running on Linux (since host
  # Dalvik isn't built for non-Linux hosts).
  ifneq (true,$(DISABLE_DEXPREOPT))
    ifeq ($(user_variant),user)
      ifeq ($(HOST_OS),linux)
        ifneq ($(JRD_IS_GOAL_PERSO),true)
           WITH_DEXPREOPT := true
        endif
      endif
    endif
  endif

  # Disallow mock locations by default for user builds
  ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=0

else # !user_variant
  # Turn on checkjni for non-user builds.
  # Kirby: turn off it temporarily to gain performance {
  # ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1
#  ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=0
  # } Kirby
  # Set device insecure for non-user builds.
  ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
  # Allow mock locations by default for non user builds
  ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1
endif # !user_variant


# always enable aed
ADDITIONAL_DEFAULT_PROPERTIES += persist.mtk.aee.aed=on

# Turn on Jazz AOT by default if not explicitly disabled and the build
# is running on Linux (since host Dalvik isn't built for non-Linux hosts).
ifneq (true,$(DISABLE_JAZZ))
  ifeq ($(strip $(MTK_JAZZ)),yes)
    ifeq ($(HOST_OS),linux)
      # Build host dalvikvm which Jazz AOT relies on.
      WITH_HOST_DALVIK := true
      WITH_JAZZ := true
    endif
  endif
endif

ifeq (true,$(strip $(enable_target_debugging)))
  # Target is more debuggable and adbd is on by default
  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
  ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0
  # Include the debugging/testing OTA keys in this build.
  INCLUDE_TEST_OTA_KEYS := true
else # !enable_target_debugging
  # Target is less debuggable and adbd is off by default
  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
  ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1
endif # !enable_target_debugging



2. 确定默认的usb功能

build/tools/post_process_props.py

# Put the modifications that you need to make into the /system/build.prop into this
# function. The prop object has get(name) and put(name,value) methods.
def mangle_build_prop(prop):
  #pass
  #If ro.mmitest is true, then disable MTP, add mass_storage for default
  if prop.get("ro.mmitest") == "true":
    prop.put("persist.sys.usb.config", "mass_storage")

  # If ro.debuggable is 1, then enable adb on USB by default
  # (this is for userdebug builds)
  if prop.get("ro.build.type") == "eng":
    val = prop.get("persist.sys.usb.config").strip('\r\n')
    if val == "":
      val = "adb"
    else:
      val = val + ",adb"
    prop.put("persist.sys.usb.config", val)
  # UsbDeviceManager expects a value here.  If it doesn't get it, it will
  # default to "adb". That might not the right policy there, but it's better
  # to be explicit.
  if not prop.get("persist.sys.usb.config"):
    prop.put("persist.sys.usb.config", "none");


# Put the modifications that you need to make into the /system/build.prop into this
# function. The prop object has get(name) and put(name,value) methods.
def mangle_default_prop(prop):
  # If ro.debuggable is 1, then enable adb on USB by default
  # (this is for userdebug builds)
  if prop.get("ro.debuggable") == "1":
    val = prop.get("persist.sys.usb.config")
    if val == "":
      val = "adb"
    else:
      val = val + ",adb"
    prop.put("persist.sys.usb.config", val)
  # UsbDeviceManager expects a value here.  If it doesn't get it, it will
  # default to "adb". That might not the right policy there, but it's better
  # to be explicit.
  if not prop.get("persist.sys.usb.config"):
    prop.put("persist.sys.usb.config", "none");



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值