rk3288_android 7.1 添加网络adb功能

问题现象:

定制完系统后,客户可能已经装机不好通过数据线来实现PC端与设备端进行adb调试通信, 操作为了避免这种限制性的操作,则需要添加网络adb功能(在同一局域网中不通过数据线来进行adb调试通信)。

添加 网络adb功能 步骤

  1. 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();
  1. 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(),
  1. 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
  1. 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设备

猜你喜欢

转载自blog.csdn.net/weixin_45639314/article/details/130153686