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