android P 开启无线adb调试

android源码默认没有开启无线adb调试功能,因此我们需要手动修改源码以打开它

首先,可以sys.prop文件中添加 service.adb.tcp.port = 5555

此文件一般位于device/产品目录下,如果不想添加控制功能,那么单独写入如上属性便可实现开机启动

无线adb调试功能

若想增加开发者选项中控制功能,继续修改源码

system\core\rootdir\init.rc中添加属性代码

on property:sys.connect.adb.wiress=1
   setprop service.adb.tcp.port 5555
   restart adbd
   
on property:sys.connect.adb.wiress=0
   setprop service.adb.tcp.port 0
   restart adbd

在/packages/apps/Settings/res/xml/development_settings.xml中增加无线adb调试开关选项

<SwitchPreference
        android:key="enable_wiress_adb"
        android:title="@string/enable_wiress_adb"
        android:summary="@string/enable_wiress_adb_summary"/>

在/frameworks/base/packages/SettingsLib/res/values-zh-rCN/中增加中文字串

在/frameworks/base/packages/SettingsLib/res/values/中增加英文字串

<string name="enable_wiress_adb" >"无线调试"</string>
<string name="enable_wiress_adb_summary" >"连接IP后启用调试模式"</string>

<string name="enable_wiress_adb" >"Wiress Debuging"</string>
<string name="enable_wiress_adb_summary" >"Debug mode when IP is connected"</string>

接下来修改逻辑代码

/frameworks/base/packages/SettingsLib/src/com/android/settingslib/development/AbstractEnableAdbPreferenceController.java

public abstract class AbstractEnableAdbPreferenceController extends
        DeveloperOptionsPreferenceController implements ConfirmationDialogController {
    private static final String KEY_ENABLE_ADB = "enable_adb";
    private static final String KEY_ENABLE_WIRE_ADB = "enable_wiress_adb";
    public static final String ACTION_ENABLE_ADB_STATE_CHANGED =
            "com.android.settingslib.development.AbstractEnableAdbController."
                    + "ENABLE_ADB_STATE_CHANGED";

    public static final int ADB_SETTING_ON = 1;
    public static final int ADB_SETTING_OFF = 0;


    protected SwitchPreference mPreference;
    protected SwitchPreference wirePreference;

    public AbstractEnableAdbPreferenceController(Context context) {
        super(context);
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        if (isAvailable()) {
            mPreference = (SwitchPreference) screen.findPreference(KEY_ENABLE_ADB);
            wirePreference = (SwitchPreference) screen.findPreference(KEY_ENABLE_WIRE_ADB);
            wirePreference.setChecked(isWireAdbEnabled());
        }
    }

    @Override
    public boolean isAvailable() {
        final UserManager um = mContext.getSystemService(UserManager.class);
        return um != null && (um.isAdminUser() || um.isDemoUser());
    }

    @Override
    public String getPreferenceKey() {
        return KEY_ENABLE_ADB;
    }

    private boolean isAdbEnabled() {
        final ContentResolver cr = mContext.getContentResolver();
        return Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, ADB_SETTING_OFF)
                != ADB_SETTING_OFF;
    }

    private boolean isWireAdbEnabled(){
        final ContentResolver cr = mContext.getContentResolver();
        return Settings.Global.getInt(cr, Settings.Global.WIREADB_ENABLED,ADB_SETTING_OFF)
                != ADB_SETTING_OFF;
    }
    @Override
    public void updateState(Preference preference) {
        Log.i("Alex","enter updataState");
        if (TextUtils.equals(KEY_ENABLE_ADB, preference.getKey()))
        {
            ((TwoStatePreference) preference).setChecked(isAdbEnabled());
        }
        else if(TextUtils.equals(KEY_ENABLE_WIRE_ADB, preference.getKey()))
        {
            Log.i("Alex","enter update_wiress");
            ((TwoStatePreference) preference).setChecked(isWireAdbEnabled());
        }
    }

    public void enablePreference(boolean enabled) {
        if (isAvailable()) {
            mPreference.setEnabled(enabled);
        }
    }

    public void resetPreference() {
        if (mPreference.isChecked()) {
            mPreference.setChecked(false);
            handlePreferenceTreeClick(mPreference);
        }
    }

    public boolean haveDebugSettings() {
        return isAdbEnabled();
    }

    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (isUserAMonkey()) {
            return false;
        }

        if (TextUtils.equals(KEY_ENABLE_ADB, preference.getKey())) {
            if (!isAdbEnabled()) {
                showConfirmationDialog(preference);
            } else {
                writeAdbSetting(false);
            }
            return true;
        }else if(TextUtils.equals(KEY_ENABLE_WIRE_ADB, preference.getKey()))
        {
            if(wirePreference.isChecked())
            {
                SystemProperties.set("sys.connect.adb.wiress","1");
                Settings.Global.putInt(mContext.getContentResolver(),
                        Settings.Global.WIREADB_ENABLED, ADB_SETTING_ON);
            }
            else
            {
                SystemProperties.set("sys.connect.adb.wiress","0");
                Settings.Global.putInt(mContext.getContentResolver(),
                        Settings.Global.WIREADB_ENABLED, ADB_SETTING_OFF);
            }
            return true;
        }else {
            return false;
        }
    }

    protected void writeAdbSetting(boolean enabled) {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.ADB_ENABLED, enabled ? ADB_SETTING_ON : ADB_SETTING_OFF);
        notifyStateChanged();
    }

    private void notifyStateChanged() {
        LocalBroadcastManager.getInstance(mContext)
                .sendBroadcast(new Intent(ACTION_ENABLE_ADB_STATE_CHANGED));
    }

    @VisibleForTesting
    boolean isUserAMonkey() {
        return ActivityManager.isUserAMonkey();
    }
}

修改setting设置,使全局变量可以存储

/frameworks/base/core/java/android/provider/Settings.java

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值