本文转载自:http://www.wxtlife.com/2015/11/24/Android-set-adb-status/

想第一时间获取我的最新文章,请关注公众号: 技术特工队

在整机系统开发中,一般系统默认的adb开发是打开的,那么在对外发布的系统中,肯定是不希望默认打开adb的,但是在开发的过程中,肯定希望能够通过某种操作打开adb,便于调试,这就需要在系统的某个部位做一个开关了。那么这篇文章就是说说这边是如何做到在系统中增加一个adb开关。

    1. 在系统中有一个usb deubg的开关,此开关是打开usb调试的对adb 但是通过默认设置的开发者模式都可以将其打开。
    1. adb 启动肯定会启动了一个adbd服务,那么手动将该服务kill掉就可以关闭adb服务了.当然这样是在adbd启动后可以这么做,但是还是直接默认就不启动服务吧,需要的时候在打开吧。

开启adbd服务实际是再系统启动中 init.rc文件中启动的,里面有很很多部分有调用start adbd或者restart adbd这部分是Android启动流程中zygote(受精卵)启动的,这部分涉及整个安卓的启动流程,以及init.rc文件的定义和使用大家可以查看网上资料。
首先要将所有系统中start adbdrestart adbd的部分将其注释掉,不使用系统默认启动方式。一般都是在init.rc文件中,在使用find . -iname "init*.rc" | xargs grep "adbd" 将系统中所有有关adbd服务的都将其搜索出来,避免遗漏。
再开看看init.rc文件中的adbd服务是怎么定义的:

1
2
3
4
5
6
# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd
class core
socket adbd stream 660 system system
disabled
seclabel u:r:adbd:s0

实际上它是定义了一个sbin/adbd文件为adbd服务,在init.rc文件中定义服务,那我们就使用init.rc文件中的触发器来控制adbd服务的打开与关闭。定义一个属性persist.sys.adbd.on来标记adb的开关状态,定义触发器内容如下:

1
2
3
4
5
on property:persist.sys.adbd.on=1
start adbd
 
on property:persist.sys.adbd.on=0
stop adbd

看字面上的意思也可以大致看出来当property系统属性persist.sys.adbd.on改变的时候在init.rc中能够收到改变的消息。且当属性值为1的时候,则会调用start adbd,当为0的时候则会调用stop adbd,因为adbd是一个服务,通过start和stop即可控制,这样通过程序中设置property属性即可切换adb的状态了。

大致的实现过程就是这样了,口才文采不行,表达不好,见谅。
这里面需要了解一些Android启动过程,以及init文件定义等。

提示:要设置系统属性需要系统权限才行,所以这种也只是自己开发系统应用才起作用。

关于权限相关的文章参考http://blog.csdn.net/a345017062/article/details/6254402

Android系统设置Android adb 开关的方法【转】的更多相关文章

  1. Android系统设置— android.provider.Settings

    android.provider.Settings Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS); sta ...

  2. Android 网络调试 adb tcpip 开启方法

    查看ip地址:adb shell ifconfig 1.连接USB数据线,打开usb调试,使用windows的“运行”命令行方式:(此方法需配置adb环境变量,也可直接进入adb工具目录执行\andr ...

  3. Android无法连接adb的解决方法

    今天在折腾乐蛙时发现无法链接ADB了,但是手机却显示USB调试模式! 然后想起了大蛋曾经告诉我CM的解决方法,于是你懂得,俺差点就把菊花给卖了呢(/Д`)~゚。 adb shell rm -r /da ...

  4. Android 调试桥 (adb) 是 命令行命令--官方拷贝过来的,留作自己查看

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令 ...

  5. Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法:

    Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用: Activity的 onSaveInstan ...

  6. 【转】Android开发调试工具ADB的使用

    原文网址:http://www.cnblogs.com/meil/archive/2012/05/24/2516055.html ADB(Android Debug Bridge)是Android S ...

  7. Android 获取WIFI MAC地址的方法

    1. 经常用法,调用Android的API:WifiManager <uses-permission android:name="android.permission.ACCESS_W ...

  8. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

  9. Android注入事件的三种方法比较

    方法1:使用内部APIs 该方法和其他所有内部没有向外正式公布的APIs一样存在它自己的风险.原理是通过获得WindowManager的一个实例来访问injectKeyEvent/injectPoin ...

随机推荐

  1. HP-Unix安装Memcache问题

    安装环境 HP-UX 125RITEC B.11.31 U ia64 0942432495 gcc (GCC) 4.3.1 libevent-1.4.14b-stable.tar.gz memcach ...

  2. 软件包管理器(bzoj 4196)

    Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...

  3. spring boot--常用配置

    spring boot 需要引用的依赖项: spring-boot-starter-parent // 所有Spring Boot组件的基础引用 spring-boot-starter-web // ...

  4. 洛谷——P2690 接苹果

    P2690 接苹果 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果.奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果 从 ...

  5. UITableView性能的优化

    转载自http://hi.baidu.com/iosme/item/24e34c465b8b1636fb896075 1.使用不透明视图.
 不透明的视图可以极大地提高渲染的速度.因此如非必要,可以将 ...

  6. zabbix之Low-level discovery(自动发现)

    功能: 自动发现挂载点并自动监控 自动发现网卡并自动监控 创建自动发现挂载点并监控 功能 假如要在monitor_linux模板中创建自动发现挂载点的功能 配置-->模板-->选择模板-- ...

  7. LeetCode 3_Longest Substring Without Repeating Characters

    LeetCode 3_Longest Substring Without Repeating Characters 题目描写叙述: Given a string, find the length of ...

  8. 小老虎CSDN博客流量分析

    小老虎CSDN博客流量分析 一.分析的博客对象 http://blog.csdn.net/littletigerat 二.分析的时间节点 2014年7月10日星期四 三.PV.UV以及IP值   wa ...

  9. 关于结构体的具体解说,C、C++中的差别

    1. C.C++内置的类型分两种,一种是基本数据类型.一种是复合数据类型.此处我们要讲的结构体便是复合数据类型. 先来讨论一下结构体存在的意义吧.或许你觉得主要的数据类型就够了,为什么还要有结构题这样 ...

  10. 通过Java反射做实体查询

    我们在使用hibernate的时候,查询的时候都会和实体中的一些字段相结合去查询,当然字段少了,还算是比较简单,当字段多了,就不那么容易了,所以就自己写了个方法,根据实体中的字段信息去查询,废话不多说 ...