问题现象:
定制完系统后,客户可能已经装机不好通过数据线来实现PC端与设备端进行adb调试通信, 操作为了避免这种限制性的操作,则需要添加网络adb功能(在同一局域网中不通过数据线来进行adb调试通信)。
添加 网络adb功能 步骤
- frameworks/base下设置5555端口实现功能:
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
index 1764b26..dbc3efa 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
@@ -29,6 +29,7 @@ import android.content.IntentFilter;
import android.os.Bundle;
import java.io.RandomAccessFile;
+import android.os.SystemProperties;
public class SystemUIService extends Service {
@@ -45,6 +46,11 @@ public class SystemUIService extends Service {
public void onCreate() {
super.onCreate();
((SystemUIApplication) getApplication()).startServicesIfNeeded();
+ //add for network adb
+ boolean isEnabledNetAdb = android.provider.Settings.Global.getInt(getContentResolver(), "network_adb", 0) != 0;
+ if(isEnabledNetAdb){
+ setTcpPort("5555");
+ }
+
IntentFilter filter = new IntentFilter();
filter.addAction(CASH_BOX);
@@ -94,6 +100,32 @@ public class SystemUIService extends Service {
return null;
}
+ //add for network adb begin
+ private void setTcpPort(String port) {
+ SystemProperties.set("service.adb.tcp.port",port);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ execShellCmd("setprop persist.service.adb.enable 0");
+ Thread.sleep(3000);
+ execShellCmd("setprop persist.service.adb.enable 1");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+
+ private void execShellCmd(String command){
+ try {
+ Runtime.getRuntime().exec(command);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ //add for network adb end
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
SystemUI[] services = ((SystemUIApplication) getApplication()).getServices();
- packages/apps/Settings 设置中添加功能以及选项开关
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a602128890..05e90a196a 100755
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -3305,4 +3305,5 @@
<string name="confirm_dialog_message">将会取消</string>
<string name="color_temperature_mode_desc">色温调节</string>
<string name="select_color_temperature_dialog_title">选择色温模式 </string>
+ <string name="network_adb">网络adb</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cfab6b1..f0ed406 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7992,4 +7992,5 @@
<string name="color_temperature_mode_desc">Color temperature mode</string>
<!-- temperature of the color for the display [CHAR LIMIT=60] -->
<string name="select_color_temperature_dialog_title">Select Color temperature </string>
+ <string name="network_adb">network ADB</string>
</resources>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index e8fe377..561dd61 100755
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -121,6 +121,11 @@
android:title="@string/enable_adb"
android:summary="@string/enable_adb_summary"/>
+ <!-- add for show Keyboards -->
+ <SwitchPreference
+ android:key="network_adb"
+ android:title="@string/network_adb"/>
+
<Preference android:key="clear_adb_keys"
android:title="@string/clear_adb_keys" />
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index cd92212..5263b2d 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -97,6 +97,7 @@ import java.util.List;
import android.hardware.display.DisplayManager;
import android.view.Display;
import com.android.settings.utils.ReflectUtils;
+import java.io.OutputStream;
@@ -249,6 +250,10 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
private PersistentDataBlockManager mOemUnlockManager;
private TelephonyManager mTelephonyManager;
+ //add for network adb
+ public static final String NETWORK_ADB = "network_adb";
+ private SwitchPreference networkAdbSwt;
+
private SwitchBar mSwitchBar;
private boolean mLastEnabledState;
private boolean mHaveDebugSettings;
@@ -407,6 +412,11 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
mEnableOemUnlock = null;
}
+ //add for network adb
+ networkAdbSwt = findAndInitSwitchPref(NETWORK_ADB);
+ boolean isEnabledNetAdb = Settings.Global.getInt(getContentResolver(), "network_adb", 0) != 0;
+ networkAdbSwt.setChecked(isEnabledNetAdb);
+
mDebugViewAttributes = findAndInitSwitchPref(DEBUG_VIEW_ATTRIBUTES);
mForceAllowOnExternal = findAndInitSwitchPref(FORCE_ALLOW_ON_EXTERNAL_KEY);
mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
@@ -2163,6 +2173,15 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
writeWebViewMultiprocessOptions();
} else if (SHORTCUT_MANAGER_RESET_KEY.equals(preference.getKey())) {
resetShortcutManagerThrottling();
+ } else if (preference == networkAdbSwt ) {
+ networkAdbSwt.setEnabled(false);
+ if (networkAdbSwt.isChecked()) {
+ Settings.Global.putInt(getActivity().getContentResolver(),"network_adb",1);//show
+ setTcpPort("5555");
+ }else {
+ Settings.Global.putInt(getContentResolver(),"network_adb",0);//hiden
+ setTcpPort("0");
+ }
+
} else {
return super.onPreferenceTreeClick(preference);
}
@@ -2170,6 +2189,38 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
return false;
}
+ //add for network adb
+ private void setTcpPort(String port) {
+ SystemProperties.set("service.adb.tcp.port",port);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ execShellCmd("setprop persist.service.adb.enable 0");
+ Thread.sleep(3000);
+ execShellCmd("setprop persist.service.adb.enable 1");
+ getActivity().runOnUiThread(new java.lang.Runnable() {
+ @Override
+ public void run() {
+ networkAdbSwt.setEnabled(true);
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+
+ //add for network adb
+ private void execShellCmd(String command){
+ try {
+ Runtime.getRuntime().exec(command);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
private void startInactiveAppsFragment() {
((SettingsActivity) getActivity()).startPreferencePanel(
InactiveApps.class.getName(),
- system/core下启动adbd服务:
diff --git a/rootdir/init.usb.rc b/rootdir/init.usb.rc
index 915d159..7ae4697 100644
--- a/rootdir/init.usb.rc
+++ b/rootdir/init.usb.rc
@@ -22,6 +22,14 @@ service adbd /sbin/adbd --root_seclabel=u:r:su:s0
on property:ro.kernel.qemu=1
start adbd
+on property:persist.service.adb.enable=1
+
+ start adbd
+
+on property:persist.service.adb.enable=0
+
+ stop adbd
+
on boot
setprop sys.usb.configfs 0
- system/sepolicy下添加selinux允许规则:
diff --git a/system_app.te b/system_app.te
index 50320c5c..61e1f037 100644
--- a/system_app.te
+++ b/system_app.te
@@ -74,4 +74,7 @@ allow system_app keystore:keystore_key {
allow system_app sysfs_zram:dir search;
allow system_app sysfs_zram:file r_file_perms;
+#for network adb
+allow system_app shell_prop:property_service set;
control_logd(system_app)
添加如上补丁后进行整体编译烧录进系统。本地实测功能正常!
具体如何使用网络adb功能,可参考之前的文章介绍:
adb 通过WiFi连接Android设备