阅读量:5
这种做法没有删除任何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){ LOG(ERROR) << " ro.adb.enabled is 0, adb is not allowed "; return PROP_SUCCESS; } } } // end size_t valuelen = value.size(); if (!IsLegalPropertyName(name)) { *error = "Illegal property name"; return PROP_ERROR_INVALID_NAME; } if (auto result = IsLegalPropertyValue(name, value); !result.ok()) { *error = result.error().message(); return PROP_ERROR_INVALID_VALUE; } #ifdef MTK_LOG SnapshotPropertyFlowTraceLog("_spf"); #endif prop_info* pi = (prop_info*) __system_property_find(name.c_str()); if (pi != nullptr) { // ro.* properties are actually "write-once". if (StartsWith(name, "ro.")) { *error = "Read-only property was already set"; return PROP_ERROR_READ_ONLY_PROPERTY; } #ifdef MTK_LOG SnapshotPropertyFlowTraceLog("_spu"); #endif __system_property_update(pi, value.c_str(), valuelen); } else { #ifdef MTK_LOG SnapshotPropertyFlowTraceLog("_spa"); #endif int rc = __system_property_add(name.c_str(), name.size(), value.c_str(), valuelen); if (rc < 0) { *error = "__system_property_add failed"; return PROP_ERROR_SET_FAILED; } } // Don't write properties to disk until after we have read all default // properties to prevent them from being overwritten by default values. if (persistent_properties_loaded && StartsWith(name, "persist.")) { WritePersistentProperty(name, value); } // If init hasn't started its main loop, then it won't be handling property changed messages // anyway, so there's no need to try to send them. auto lock = std::lock_guard{accept_messages_lock}; if (accept_messages) { #ifdef MTK_LOG SnapshotPropertyFlowTraceLog("SPC"); #endif PropertyChanged(name, value); } #ifdef MTK_LOG if (GetMTKLOGDISABLERATELIMIT()) // MTK add log PropSetLog(name, value, error); #endif return PROP_SUCCESS; }
相关UI及开发者模式控制
- frameworks/base/core/java/android/os/Build.java
/* * True if Adb is enabled */ public static final boolean IS_ADB_ENABLED = SystemProperties.getInt("ro.adb.enabled", 0) == 1;
- vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java
// True if Adb is enabled final boolean showDev = Build.IS_ADB_ENABLED/*DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(this) && !Utils.isMonkeyRunning()*/; somethingChanged = setTileEnabled(changedList, new ComponentName(packageName, Settings.DevelopmentSettingsDashboardActivity.class.getName()), showDev, isAdmin) || somethingChanged;
- vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/connecteddevice/usb/UsbDetailsFunctionsController.java
@Override public boolean isAvailable() { // for adb // True if Adb is enabled return Build.IS_ADB_ENABLED/*!Utils.isMonkeyRunning()*/; }
- vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@Override public boolean handlePreferenceTreeClick(Preference preference) { // for adb if (preference.getKey().equals("build_number")){ if (!Build.IS_ADB_ENABLED){ preference.setSelectable(false); } } // end if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { return false; } ... }
修改完后,连接USB不会显示功能选择列表,无法连点调出开发者模式。
测试
编译完成后,build.prop中显示
ro.adb.enabled=0 ... # Auto-added by post_process_props.py persist.sys.usb.config=adb # end of file
命令窗口显示
C:\Users\dell>adb devices List of devices attached C:\Users\dell>