场景
手机环境比较特殊,需要长期充电,无法使用USB口进行调试,需要重启手机之后,自动进入WIFI调试
修改mIsAdbUsbEnabled为1
路径:frameworks/base/services/core/java/com/android/server/adb/AdbService.java
主要查看左侧角标判断是否需要删除新增
/**
* Called in response to {@code SystemService.PHASE_ACTIVITY_MANAGER_READY} from {@code
* SystemServer}.
*/
public void systemReady() {
if (DEBUG) Slog.d(TAG, "systemReady");
// make sure the ADB_ENABLED setting value matches the current state
// 修改mIsAdbWifiEnabled ? 1 : 0的判断条件为1,强制生效ADB
try {
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_ENABLED, mIsAdbUsbEnabled ? 1 : 0);
- Settings.Global.putInt(mContentResolver,
- Settings.Global.ADB_WIFI_ENABLED, mIsAdbWifiEnabled ? 1 : 0);
+ Settings.Global.putInt(mContentResolver,
+ Settings.Global.ADB_WIFI_ENABLED, 1);
} catch (SecurityException e) {
// If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't be changed.
Slog.d(TAG, "ADB_ENABLED is restricted.");
}
}
自动同意ADB(即插即用)
路径:frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
主要查看左侧角标判断是否需要删除新增
@Override
public void onCreate(Bundle icicle) {
Window window = getWindow();
window.addSystemFlags(
WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
super.onCreate(icicle);
// Emulator does not support reseating the usb cable to reshow the dialog.
boolean isEmulator = SystemProperties.get("ro.boot.qemu").equals("1");
if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0 && !isEmulator) {
mDisconnectedReceiver = new UsbDisconnectedReceiver(this);
IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE);
mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter);
}
Intent intent = getIntent();
String fingerprints = intent.getStringExtra("fingerprints");
mKey = intent.getStringExtra("key");
if (fingerprints == null || mKey == null) {
finish();
return;
}
+ // 在这里添加代码,自动同意ADB授权
+ try {
+ IBinder b = ServiceManager.getService(ADB_SERVICE);
+ IAdbManager service = IAdbManager.Stub.asInterface(b);
+ service.allowDebugging(true, mKey);
+ finish();
+ } catch (Exception e) {
+ Log.e(TAG, "Unable to notify Usb service", e);
+ }
+ // 在这里添加代码,自动同意ADB授权
final AlertController.AlertParams ap = mAlertParams;
ap.mTitle = getString(R.string.usb_debugging_title);
ap.mMessage = getString(R.string.usb_debugging_message, fingerprints);
ap.mPositiveButtonText = getString(R.string.usb_debugging_allow);
ap.mNegativeButtonText = getString(android.R.string.cancel);
ap.mPositiveButtonListener = this;
ap.mNegativeButtonListener = this;
// add "always allow" checkbox
LayoutInflater inflater = LayoutInflater.from(ap.mContext);
View checkbox = inflater.inflate(com.android.internal.R.layout.always_use_checkbox, null);
mAlwaysAllow = (CheckBox)checkbox.findViewById(com.android.internal.R.id.alwaysUse);
mAlwaysAllow.setText(getString(R.string.usb_debugging_always));
ap.mView = checkbox;
window.setCloseOnTouchOutside(false);
setupAlert();
}
修改device设备配置文件
路径-1:device/google/coral/device-coral.mk
路径-2:device/google/coral/device-flame.mk
这两个文本文件下,添加以下内容到文件最底部,同时两个文件都要加
persist.adb.tls_server.enable=1
修改AdbDebuggingManger.java
主要是屏蔽相关的判断规则,实现断开wifi或者关闭wifi都保留调试状态,可能就是比较耗电一些。
路径:frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManger.java
case MSG_ADBDWIFI_ENABLE: {
if (mAdbWifiEnabled) {
break;
}
// not to check network state ,change by liwenzhi //(1)去除下面一大段判断网络和监听网络的代码
+ /* AdbConnectionInfo currentInfo = getCurrentWifiApInfo();
if (currentInfo == null) {
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_WIFI_ENABLED, 0);
break;
}
if (!verifyWifiNetwork(currentInfo.getBSSID(),
currentInfo.getSSID())) {
// This means that the network is not in the list of trusted networks.
// We'll give user a prompt on whether to allow wireless debugging on
// the current wifi network.
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_WIFI_ENABLED, 0);
break;
}
setAdbConnectionInfo(currentInfo);
+ */
+ /*
IntentFilter intentFilter =
new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter);*/
SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");
mConnectionPortPoller =
new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener);
mConnectionPortPoller.start();
startAdbDebuggingThread();
mAdbWifiEnabled = true;
if (DEBUG) Slog.i(TAG, "adb start wireless adb");
break;
}
case MSG_ADBDWIFI_DISABLE:
if (!mAdbWifiEnabled) {
break;
}
mAdbWifiEnabled = false;
setAdbConnectionInfo(null);
+ /*
注释掉监听
mContext.unregisterReceiver(mBroadcastReceiver);
if (mThread != null) {
mThread.sendResponse(MSG_DISABLE_ADBDWIFI);
}
onAdbdWifiServerDisconnected(-1);
stopAdbDebuggingThread();
+ */
break;
case MSG_ADBWIFI_ALLOW:
if (mAdbWifiEnabled) {
break;
}
String bssid = (String) msg.obj;
boolean alwaysAllow = msg.arg1 == 1;
if (alwaysAllow) {
mAdbKeyStore.addTrustedNetwork(bssid);
}
// Let's check again to make sure we didn't switch networks while verifying
// the wifi bssid.
+ /**
AdbConnectionInfo newInfo = getCurrentWifiApInfo();
if (newInfo == null || !bssid.equals(newInfo.getBSSID())) {
break;
}
setAdbConnectionInfo(newInfo);
+ **/
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_WIFI_ENABLED, 1);
+ /**
IntentFilter intentFilter =
new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mContext.registerReceiver(mBroadcastReceiver, intentFilter);
+ **/
SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");
mConnectionPortPoller =
new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener);
mConnectionPortPoller.start();
startAdbDebuggingThread();
mAdbWifiEnabled = true;
if (DEBUG) Slog.i(TAG, "adb start wireless adb");
break;
case MSG_ADBWIFI_DENY:
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_WIFI_ENABLED, 0);
sendServerConnectionState(false, -1);
break;
修改完之后,就可以开始编译,查看是否生效了。