您的位置:首页

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

2018-01-01 14:38 691 查看
本文转载自:http://blog.csdn.net/thinkinwm/article/details/24865933

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 来设置。您可以看到类似如代码:

[java] view plain copy

// 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

ENABLED),false, new AdbSettingsObserver());

而这个persist.service.adb.enable 默认是放在在default.prop 中,在编译的时候在
build/core/main.mk 中确认,

[java] view plain copy

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 中,您也可以
看到类似的代码如:

[java] view plain copy

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

[java] view plain copy

## 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

[java] view plain copy

# 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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: