https://blog.csdn.net/ouyang_peng/article/details/50370786

首先弄懂怎么设置adb wifi无线调试的功能,如下所示。

1. 手机端开启adb tcp连接端口

:/$setprop service.adb.tcp.port 5555
:/$stop adbd
:/$start adbd

其中setprop是用来设置系统属性的,这里不需要root权限,su即可。可通过adb shell设置,亦可通过手机上安装的Android terminal设置。

2. 电脑端的设置和使用

连接adb,其中phone_ipaddress和portnumber是指手机的ip和前面设置的监听端口号(如5555)

adb connect phone_ipaddress:portnumber

直接adb shell或adb -s 设备shell连接设备

如若要断开则如下:

adb disconnect phone_ipaddress:port

但是每次这样的去设置很繁琐,所以直接在设置中做一个开关就把手机端的设置做好,如下所示:

一、打开开关,并连接Wifi

二、打开开关,没有连接Wifi

三、未打开开关

这样就可以直接进行adb wifi调试了,手机端就不用每次都先用USB调试去设置修改的属性,才能激活adb wifi调试。

======================================================================================================

下面来具体说说实现的思路:

第一步:在【设置】-->【开发者选项】中做一个类似于【USB调试】的开关【Wifi调试】

第二步:【Wifi调试】开关打开就激活监听5555端口,用来进行adb wifi调试,【Wifi调试】开关关闭就不监听5555端口,这样就不能进行adb wifi调试

第三步:在第二步中打开关闭【Wifi调试】开关的时候,调用相应的接口进行设置

第四步:将第三步中要调用的接口写好

1、先在布局中加入该开关

首先找到布局文件,packages/apps/Settings/res/xml/development_prefs.xml,找到【USB调试】开关的相应代码,然后再里面加一个【Wifi调试】开关,代码如下:

  1. <SwitchPreference
  2. android:key="enable_adb"
  3. android:title="@string/enable_adb"
  4. android:summary="@string/enable_adb_summary"/>
  5. <!-- added by ouyang start -->
  6. <SwitchPreference
  7. android:key="enable_wifi_adb"
  8. android:title="@string/enable_wifi_adb"
  9. android:summary="@string/enable_wifi_adb_summary"/>
  10. - added by ouyang end -->

上面代码中,第一个代码是【USB调试】开关的代码,第二个是我加的【Wifi调试】开关的代码,然后为什么的字符串做相应的国际化操作,代码如下:

packages/apps/Settings/res/values-zh-rCN/strings.xml 中加入:

  1. <!-- added by ouyang start 2015-12-17 -->
  2. <string name="enable_wifi_adb">Wifi调试</string>
  3. <string name="enable_wifi_adb_openwifi">Wifi没连接,请连接wifi</string>
  4. <string name="enable_wifi_adb_summary">连接Wifi后启用调试模式</string>
  5. <string name="enable_wifi_adb_connected_summary">Wifi调试已打开,在电脑端你可以输入以下命令进行调试:\n
  6. adb connect <xliff:g id="ip_address">%1$s</xliff:g>:5555</string>
  7. <!-- added by ouyang end 2015-12-17 -->

packages/apps/Settings/res/values/strings.xml 中加入:

  1. <!-- added by ouyang start 2015-12-17 -->
  2. <string name="enable_wifi_adb">Wifi debugging</string>
  3. <string name="enable_wifi_adb_openwifi">Wifi is not connected,please turn wifi on and connect it</string>
  4. <string name="enable_wifi_adb_summary">Debug mode when Wifi is connected</string>
  5. <string name="enable_wifi_adb_connected_summary">adb wifi is on,from your computer run:\n
  6. adb connect <xliff:g id="ip_address">%1$s</xliff:g>:5555</string>
  7. <!-- added by ouyang end 2015-12-17 -->

2、在packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java文件中,对刚才加入的【Wifi调试】开关进行相关的逻辑处理。

首先先定义开关的几个变量,如下:

  1. //add by ouyang 2015-12-17  start
  2. private static final String ENABLE_WIFI_ADB = "enable_wifi_adb";
  3. private static final String ADB_WIFI_ENABLED_KEY = "ADB_WIFI_ENABLED";
  4. private static SwitchPreference mEnableWifiAdb;
  5. //add by ouyang 2015-12-17  end

然后再onCreate()方法中初始化【Wifi调试】开关,如下:

  1. mEnableAdb = findAndInitSwitchPref(ENABLE_ADB);
  2. //add by ouyang 2015-12-17
  3. mEnableWifiAdb = findAndInitSwitchPref(ENABLE_WIFI_ADB);

然后在onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)方法中对【Wifi调试】开关的打开和关闭操作做逻辑处理。

  1. if (preference == mEnableAdb) {
  2. if (mEnableAdb.isChecked()) {
  3. mDialogClicked = false;
  4. if (mAdbDialog != null) dismissDialogs();
  5. mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
  6. getActivity().getResources().getString(R.string.adb_warning_message))
  7. .setTitle(R.string.adb_warning_title)
  8. .setPositiveButton(android.R.string.yes, this)
  9. .setNegativeButton(android.R.string.no, this)
  10. .show();
  11. mAdbDialog.setOnDismissListener(this);
  12. } else {
  13. Settings.Global.putInt(getActivity().getContentResolver(),
  14. Settings.Global.ADB_ENABLED, 0);
  15. mVerifyAppsOverUsb.setEnabled(false);
  16. mVerifyAppsOverUsb.setChecked(false);
  17. /// M: ALPS01256802, The "Developer options" status is opened.
  18. onPreferenceTreeClick(null, mVerifyAppsOverUsb);
  19. updateBugreportOptions();
  20. }
  21. }
  22. //add by ouyang 2015-12-17 start
  23. else if (preference == mEnableWifiAdb) {
  24. if (mEnableWifiAdb.isChecked()) {
  25. Settings.Global.putInt(getActivity().getContentResolver(),ADB_WIFI_ENABLED_KEY, 1);
  26. android.os.SystemProperties.set("sys.connect.adb.wifi","1");
  27. WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
  28. WifiInfo wifiInfo = wifiManager.getConnectionInfo();
  29. int ipAddress = wifiInfo.getIpAddress();
  30. String ipAddressString = (ipAddress & 0xFF ) + "." +((ipAddress >> 8 ) & 0xFF) + "." +
  31. ((ipAddress >> 16 ) & 0xFF) + "." +( ipAddress >> 24 & 0xFF) ;
  32. Log.i(TAG, "ipAddress="+ipAddress);
  33. Log.i(TAG, "ipAddressString="+ipAddressString);
  34. if ("0.0.0.0".equals(ipAddressString)) {
  35. mEnableWifiAdb.setSummary(getResources().getString(R.string.enable_wifi_adb_openwifi));
  36. }else{
  37. mEnableWifiAdb.setSummary(getResources().
  38. getString(R.string.enable_wifi_adb_connected_summary,ipAddressString));
  39. }
  40. } else {
  41. Settings.Global.putInt(getActivity().getContentResolver(),ADB_WIFI_ENABLED_KEY, 0);
  42. android.os.SystemProperties.set("sys.connect.adb.wifi","0");
  43. mEnableWifiAdb.setSummary(getResources().getString(R.string.enable_wifi_adb_summary));
  44. }
  45. }
  46. //add by ouyang 2015-12-17 end

上面的代码主要是,

当【Wifi调试】开关打开的时候,保存一个原来表示该【Wifi调试】开关打开关闭的状态的值为1,然后调用接口android.os.SystemProperties.set("sys.connect.adb.wifi","1");如果wifi这个时候打开就显示相应的adb wifi命令,如ip地址为192.168.107.201的时候就显示,"Wifi调试已打开,在电脑端你可以输入以下命令进行调试:adb connect 192.168.107.201:5555";如果wifi为打开,就提示“Wifi没连接,请连接wifi”

当【Wifi调试】开关关闭的时候,保存一个原来表示该【Wifi调试】开关打开关闭的状态的值为0,然后调用接口android.os.SystemProperties.set("sys.connect.adb.wifi","0");

ADB_WIFI_ENABLED_KEY这个状态值,在进入该Activity的时候,如果上次打开了【Wifi调试】开关,那么下次进来的时候就要显示【Wifi调试】开关是打开状态,否则是关闭状态。下面说说ADB_WIFI_ENABLED_KEY这个状态值的相关代码,如下:

在onResume()方法中,加入下面代码:

  1. //add by ouyang 2015-12-17 start
  2. IntentFilter filter = new IntentFilter();
  3. filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
  4. filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
  5. filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
  6. getActivity().registerReceiver(wifiBroadcastReceiver, filter);
  7. boolean isAdbWifiChecked = Settings.Global.getInt(getActivity().getContentResolver(),ADB_WIFI_ENABLED_KEY, 0) != 0;
  8. mEnableWifiAdb.setChecked(isAdbWifiChecked);
  9. Log.i(TAG, "isAdbWifiChecked:" + isAdbWifiChecked);
  10. //add by ouyang 2015-12-17 end

代码的意思是,进入该Activity就动态的注册一个广播,用来监听Wifi的状态改变的,然后来动态的显示Android手机获取的IP地址。然后根据ADB_WIFI_ENABLED_KEY这个状态值来显示【Wifi调试】开关的打开关闭状态。

在updateAllOptions()方法中,也要去做下处理,代码如下:

  1. /// M: CR ALPS00244115. Lock and unlock screen, the "USB debugging" is unchecked.
  2. boolean isChecked = (mAdbDialog != null && mAdbDialog.isShowing()) ? true :
  3. (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0);
  4. updateSwitchPreference(mEnableAdb, isChecked);
  5. //add by ouyang 2015-12-17 start
  6. boolean isAdbWifiChecked = Settings.Global.getInt(cr,ADB_WIFI_ENABLED_KEY, 0) != 0;
  7. updateSwitchPreference(mEnableWifiAdb, isAdbWifiChecked);
  8. //add by ouyang 2015-12-17 end
  9. /// M: update usb preference again
  10. mExt.customUSBPreference(mEnableAdb);
  11. //add by ouyang 2015-12-17
  12. mExt.customUSBPreference(mEnableWifiAdb);

下面来说说上面动态注册的广播,代码如下:

  1. BroadcastReceiver wifiBroadcastReceiver = new BroadcastReceiver() {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. String TAG = "wifiBroadcastReceiver";
  5. boolean isAdbWifiChecked = mEnableWifiAdb.isChecked();
  6. ConnectivityManager connectivityManager = (ConnectivityManager) context
  7. .getSystemService(Context.CONNECTIVITY_SERVICE);
  8. NetworkInfo net = connectivityManager.getActiveNetworkInfo();
  9. if (net == null) {
  10. Log.i(TAG, "No net type");
  11. if (isAdbWifiChecked) {
  12. mEnableWifiAdb.setSummary(getResources()
  13. .getString(R.string.enable_wifi_adb_openwifi));
  14. }
  15. } else {
  16. Log.i(TAG, "Net Type:" + net.getTypeName());
  17. }
  18. State wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
  19. if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
  20. Log.i(TAG, "wifi connected");
  21. WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
  22. WifiInfo wifiInfo = wifiManager.getConnectionInfo();
  23. int ipAddress = wifiInfo.getIpAddress();
  24. String ipAddressString = (ipAddress & 0xFF) + "." + ((ipAddress >> 8) & 0xFF) + "."
  25. + ((ipAddress >> 16) & 0xFF) + "." + (ipAddress >> 24 & 0xFF);
  26. if (isAdbWifiChecked) {
  27. mEnableWifiAdb.setSummary(
  28. getResources().getString(
  29. R.string.enable_wifi_adb_connected_summary, ipAddressString));
  30. }
  31. Log.i(TAG, getResources().getString(
  32. R.string.enable_wifi_adb_connected_summary, ipAddressString));
  33. } else if (wifi == State.DISCONNECTED || wifi == State.DISCONNECTING) {
  34. Log.i(TAG, "wifi disconnected");
  35. if (isAdbWifiChecked) {
  36. mEnableWifiAdb.setSummary(
  37. getResources().getString(R.string.enable_wifi_adb_openwifi));
  38. }
  39. Log.i(TAG, getResources().getString(
  40. R.string.enable_wifi_adb_connected_summary));
  41. }
  42. }
  43. };

上面的代码主要是当【Wifi调试】开关打开的时候,来用动态表示Android手机的Wifi连接状态,如果wifi未连接,就提示“Wifi没连接,请连接wifi”,如果Wifi连接了,就动态的将从DHCP服务器获取的IP地址显示出来,如ip地址为192.168.107.201的时候就显示,"Wifi调试已打开,在电脑端你可以输入以下命令进行调试:adb connect 192.168.107.201:5555"

======================================================================================================

好吧,在packages/apps/Settings/,即Settings APP层面的代码写完了,下面来说说调用的两个接口怎么实现。

android.os.SystemProperties.set("sys.connect.adb.wifi", "1");

android.os.SystemProperties.set("sys.connect.adb.wifi", "0");

首先找到frameworks/base/core/java/android/os/SystemProperties.java文件,找到set(String
key, String val)方法,代码如下,发现调用了native_set(key, val)方法。

  1. /**
  2. * Set the value for the given key.
  3. * @throws IllegalArgumentException if the key exceeds 32 characters
  4. * @throws IllegalArgumentException if the value exceeds 92 characters
  5. */
  6. public static void set(String key, String val) {
  7. if (key.length() > PROP_NAME_MAX) {
  8. throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
  9. }
  10. if (val != null && val.length() > PROP_VALUE_MAX) {
  11. throw new IllegalArgumentException("val.length > " +
  12. PROP_VALUE_MAX);
  13. }
  14. native_set(key, val);
  15. }

native_set(key, val)方法定义如下:

  1. private static native void native_set(String key, String def);

该接口类在初始化运行环境中注册对应的cpp接口android_os_SystemProperties.cpp,实际操作通过JNI调用的是cpp文件对应的接口:

frameworks/base/core/jni/AndroidRuntime.cpp

  1. namespace android {
  2. extern int register_android_os_SystemProperties(JNIEnv *env);
  3. }

frameworks/base/core/jni/android_os_SystemProperties.cpp

  1. static void SystemProperties_set(JNIEnv *env, jobject clazz,
  2. jstring keyJ, jstring valJ)
  3. {
  4. int err;
  5. const char* key;
  6. const char* val;
  7. if (keyJ == NULL) {
  8. jniThrowNullPointerException(env, "key must not be null.");
  9. return ;
  10. }
  11. key = env->GetStringUTFChars(keyJ, NULL);
  12. if (valJ == NULL) {
  13. val = "";       /* NULL pointer not allowed here */
  14. } else {
  15. val = env->GetStringUTFChars(valJ, NULL);
  16. }
  17. err = property_set(key, val);
  18. env->ReleaseStringUTFChars(keyJ, key);
  19. if (valJ != NULL) {
  20. env->ReleaseStringUTFChars(valJ, val);
  21. }
  22. if (err < 0) {
  23. ALOGE("setproperty key=%s value=%s err=%d\n", key, val, err);
  24. jniThrowException(env, "java/lang/RuntimeException",
  25. "failed to set system property");
  26. }
  27. }

好了,关于该android.os.SystemProperties.set()方法的分析,可以参考

http://blog.csdn.net/ameyume/article/details/8056492

http://www.blogjava.net/anymobile/articles/301989.html

下面直接写下面两个接口的实现

android.os.SystemProperties.set("sys.connect.adb.wifi", "1");

android.os.SystemProperties.set("sys.connect.adb.wifi", "0");

在device/lentek/lentk6735_66t_l1/E580/init.rc文件中加入下面的代码,其中E580是项目的名称。

  1. #added by ouyang start connect adb with wifi
  2. on property:sys.connect.adb.wifi=1
  3. setprop service.adb.tcp.port 5555
  4. stop adbd
  5. start adbd
  6. on property:sys.connect.adb.wifi=0
  7. setprop service.adb.tcp.port ""
  8. stop adbd
  9. start adbd
  10. #added by ouyang end connect adb with wifi

上面代码就是当调用

android.os.SystemProperties.set("sys.connect.adb.wifi", "1");和sys.connect.adb.wifiandroid.os.SystemProperties.set("sys.connect.adb.wifi", "0");接口的时候的具体实现,

即"sys.connect.adb.wifi"属性设置为1的时候,监听5555端口,

"sys.connect.adb.wifi"属性设置为0的时候,不监听任何端口

====================================================================================

好了,下面来再一次测一测该功能怎么样,重新打开wifi,重新打开【Wifi调试】开关,显示如下:

可以看出来,此时Android手机的IP地址是192.168.107.168,因此下面在PC端测试看是否可以用adb
wifi无线调试,使用命令adb connect 192.168.107.168连接,adb disconnect
192.168.107.168断开连接,如下图所示:

  1. C:\Documents and Settings\Administrator>adb connect 192.168.107.168
  2. connected to 192.168.107.168:5555
  3. C:\Documents and Settings\Administrator>adb shell
  4. shell@lentk6735_66t_l1:/ $ ll
  5. drwxr-xr-x root     root              2015-12-21 10:15 acct
  6. drwxrwx--- system   cache             2015-12-17 19:01 cache
  7. lrwxrwxrwx root     root              1970-01-01 08:00 charger -> /sbin/healthd
  8. dr-x------ root     root              2015-12-21 10:15 config
  9. drwxr-xr-x root     root              2015-12-21 10:15 custom
  10. lrwxrwxrwx root     root              2015-12-21 10:15 d -> /sys/kernel/debug
  11. drwxrwx--x system   system            2015-12-21 10:16 data
  12. -rw-r--r-- root     root          385 1970-01-01 08:00 default.prop
  13. drwxr-xr-x root     root              2015-12-21 10:15 dev
  14. -rw-r--r-- root     root          127 1970-01-01 08:00 enableswap.sh
  15. lrwxrwxrwx root     root              2015-12-21 10:15 etc -> /system/etc
  16. -rw-r--r-- root     root         1851 1970-01-01 08:00 factory_init.project.rc
  17. -rw-r--r-- root     root        18861 1970-01-01 08:00 factory_init.rc
  18. -rw-r--r-- root     root        31413 1970-01-01 08:00 file_contexts
  19. -rw-r----- root     root         1980 1970-01-01 08:00 fstab.mt6735
  20. -rwxr-x--- root     root       543928 1970-01-01 08:00 init
  21. -rwxr-x--- root     root          605 1970-01-01 08:00 init.aee.rc
  22. -rwxr-x--- root     root         2065 1970-01-01 08:00 init.c2k.rc
  23. -rwxr-x--- root     root         1071 1970-01-01 08:00 init.environ.rc
  24. -rwxr-x--- root     root         3548 1970-01-01 08:00 init.modem.rc
  25. -rwxr-x--- root     root        45152 1970-01-01 08:00 init.mt6735.rc
  26. -rwxr-x--- root     root        32013 1970-01-01 08:00 init.mt6735.usb.rc
  27. -rwxr-x--- root     root          963 1970-01-01 08:00 init.no_ssd.rc
  28. -rwxr-x--- root     root         4411 1970-01-01 08:00 init.project.rc
  29. -rwxr-x--- root     root        22787 1970-01-01 08:00 init.rc
  30. -rwxr-x--- root     root          972 1970-01-01 08:00 init.recovery.mt6735.rc
  31. -rwxr-x--- root     root         2288 1970-01-01 08:00 init.trace.rc
  32. -rwxr-x--- root     root         3885 1970-01-01 08:00 init.usb.rc
  33. -rwxr-x--- root     root          583 1970-01-01 08:00 init.xlog.rc
  34. -rwxr-x--- root     root          301 1970-01-01 08:00 init.zygote32.rc
  35. -rwxr-x--- root     root          531 1970-01-01 08:00 init.zygote64_32.rc
  36. -rw-r--r-- root     root         1004 1970-01-01 08:00 meta_init.c2k.rc
  37. -rw-r--r-- root     root         1062 1970-01-01 08:00 meta_init.modem.rc
  38. -rw-r--r-- root     root         1655 1970-01-01 08:00 meta_init.project.rc
  39. -rw-r--r-- root     root        14464 1970-01-01 08:00 meta_init.rc
  40. drwxrwxr-x root     system            2015-12-21 10:15 mnt
  41. drwxrws--- root     system            2015-12-17 18:59 nvdata
  42. drwxrwx--x system   system            2015-12-21 10:15 persist
  43. dr-xr-xr-x root     root              1970-01-01 08:00 proc
  44. -rw-r--r-- root     root         9326 1970-01-01 08:00 property_contexts
  45. drwxrwx--- system   system            2015-12-17 18:59 protect_f
  46. drwxrwx--- system   system            2015-12-17 18:59 protect_s
  47. drwx------ root     root              2015-12-05 18:05 root
  48. drwxr-x--- root     root              1970-01-01 08:00 sbin
  49. lrwxrwxrwx root     root              2015-12-21 10:15 sdcard -> /storage/sdcard0
  50. -rw-r--r-- root     root          471 1970-01-01 08:00 seapp_contexts
  51. -rw-r--r-- root     root           80 1970-01-01 08:00 selinux_version
  52. -rw-r--r-- root     root       258377 1970-01-01 08:00 sepolicy
  53. -rw-r--r-- root     root        11419 1970-01-01 08:00 service_contexts
  54. drwxr-x--x root     sdcard_r          2015-12-21 10:15 storage
  55. dr-xr-xr-x root     root              2015-12-21 10:15 sys
  56. drwxr-xr-x root     root              1970-01-01 08:00 system
  57. -rw-r--r-- root     root         8642 1970-01-01 08:00 ueventd.rc
  58. lrwxrwxrwx root     root              2015-12-21 10:15 vendor -> /system/vendor
  59. shell@lentk6735_66t_l1:/ $ exit
  60. C:\Documents and Settings\Administrator>adb disconnect 192.168.107.168

发现可以正常的进行adb wifi 无线调试了。将【Wifi调试】开关【Wifi调试】开关关闭,再去连接的话,就会无法连接了。如下所示:

    1. C:\Documents and Settings\Administrator>adb connect 192.168.107.168
    2. unable to connect to 192.168.107.168:5555
    3. C:\Documents and Settings\Administrator>

添加wifi adb的更多相关文章

  1. 添加网络ADB的方法(含以太网和无线)

    将下面代码添加至packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java 结合之前的添加wifi adb的博客 ...

  2. 如何手动添加 WIFI 网络步骤

    电脑手动添加WiFi网络步骤: 1.右键控制面板 2.进入控制面板 3.进入网络和Internet,点击设置新的连接或网络 4.点击手动连接到无线网络 5.输入网络SSID及秘钥 若需要自动连接请勾选 ...

  3. Android系统移植与调试之------->如何添加一个adb wifi无线调试的功能【开发者选项】-【Wifi调试】

    首先弄懂怎么设置adb wifi无线调试的功能,如下所示. 1. 手机端开启adb tcp连接端口 :/$setprop service.adb.tcp.port :/$stop adbd :/$st ...

  4. RK3288 添加WiFi&BT模块AP6212

    CPU:RK3288 系统:Android 5.1 注:系统中自带的模块没有AP6212,相近的只有AP6210,设置为AP6210,直接添加固件也可以正常使用. 此文是手动添加AP6212的例程. ...

  5. wifi adb 调试手机

    首先手机,PC都连上WIFI, 如果可以用USB操作,在PC端,输入ping 手机的ip 地址,看看是否成功, 在PC端输入下面命令adb tcpip 5555adb connect 192.168. ...

  6. Mac 下面,添加android adb命令(一般环境变量的添加方法)

    1. 在 用户目录下   ~/.bash_profile vim  ~/.bash_profile 2.加入我们需要添加的环境变量,这里是 添加 android   platform-tools 和 ...

  7. wifi adb 的常用命令

    Android 网络调试 adb tcpip 开启方法 2013年05月14日 10:01:03 阅读数:20529 1.连接USB数据线,打开usb调试,使用windows的“运行”命令行方式:(此 ...

  8. adb 设置安卓连接wifi

    一. 修改wpa_supplicant.conf文件 1.1. 获得root权限 adb root 1.2. 将wpa_supplicant.conf拷贝到你的电脑 adb pull /data/mi ...

  9. android 通过WiFi进行adb调试

    第一种方式: 1.把Android SDK的下的 platform-tools 目录 加入到系统的path变量中 打开cmd命令行 输入adb 显示如下图则为设置成功 2.打开手机 下载一个叫WiFi ...

随机推荐

  1. tableView与导航栏的偏移问题

    //方法1.关闭自动布局 self.automaticallyAdjustsScrollViewInsets = NO; //方法2.改变相对于scrollview的位置 //contentInset ...

  2. linux命令学习之:vim

    1. 关于Vim vim是我最喜欢的编辑器,也是linux下第二强大的编辑器. 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效. 如果是初学vi,运行一下vimtu ...

  3. Django TypeError: isinstance() arg 2 must be a type or tuple of types

    报错: TypeError: isinstance() arg must be a type or tuple of types from django.db import modelsfrom dj ...

  4. PHP开发——常见问题

    执行顺序 常见数据类型 字符乱码

  5. JVM 运行时数据区 (三)

    JVM运行时数据区 运行时数据区由 程序计数器.java虚拟机栈.本地方法栈.堆.方法区 组成: 1.程序计数器 每一个Java线程都有一个程序计数器,用于保存程序执行到当前方法的哪一个指令,它是线程 ...

  6. dpdk中文文档

    Linux平台上DPDK入门指南 1. 简介 1.1. 文档地图 2. 系统要求 2.1. X86 上预先设置 BIOS 2.2. 编译DPDK 2.3. 运行DPDK应用程序 3. 使用源码编译DP ...

  7. 搭建自己的代理服务 proxy nginx squid ss5 s(shadow)s(socks)

    标签: nginx / squid / 负载均衡 / ss 4090 1. nginx (forward) nginx自己熟悉,经常用来做负载均衡的反向代理, 这里搭建一个正向代理(forward) ...

  8. mysql官网

    https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

  9. Java的反射技术

    什么是反射机制 Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能调用它的任意属性和方法.这种动态获取信息以及动态调用对象属性和方法的即使称为J ...

  10. Koko Eating Bananas LT875

    Koko loves to eat bananas.  There are N piles of bananas, the i-th pile has piles[i] bananas.  The g ...