本质上要解决两个问题:
设置默认ADB Enable为真,android的user版本中也默认为真
文件 AOSP/frameworks/base/services/core/java/com/android/server/adb/AdbService.java
在该文件的systemReady中修改
- /**
- * 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
- try {
- //这里不管mIsAdbUsbEnabled是否为真,强制设定属性Settings.Global.ADB_ENABLED为1
- Settings.Global.putInt(mContentResolver,
- - Settings.Global.ADB_ENABLED, mIsAdbUsbEnabled ? 1 : 0);
- + Settings.Global.ADB_ENABLED, 1);
-
- Settings.Global.putInt(mContentResolver,
- Settings.Global.ADB_WIFI_ENABLED, mIsAdbWifiEnabled ? 1 : 0);
- } catch (SecurityException e) {
- // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't be changed.
- Slog.d(TAG, "ADB_ENABLED is restricted.");
- }
- }
修改文件AOSP/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java,一般android设备连接电脑PC后会出现USB连接的弹框,这里的修改主要是不弹框并直接连接成功,代码修改如下:
- public class UsbDebuggingActivity extends AlertActivity
- implements DialogInterface.OnClickListener {
- //...
- @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;
- }
-
- + 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);
- + }
-
- 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();
- }
- //...
- }