今天把android的开发环境从windows平台切换到了ubuntu上。

java jdk android-adt android-ndk都下好,环境变量都配好之后,

在调试程序的时候,出现设备没有权限访问,在shell中输入adb devices

  出现 ?????    no permittion

一看这个,就蒙了。在网上谷歌百度了半天,

出现的答案,感觉大家都是copy过来的,不了解如何真正的去解决这个

问题,也许这些解决方法在某些情况下,有效,而我拿过来,在我这里

完全没有用。

没办法了,还是自己边查资料,边研究,到底怎么回事。

后来知道,这个是设备访问权限的问题。

知道了3种解决方法:

第一种:通过udev的rules文件来改变设备访问权限

在linux下,设备是以文件的形式出现的,对设备的访问,也就是对文件的访问。

linux内核加载的设备,会把设备的信息,放到用户空间sysfs。也就是在/sys中。

以供用户查询设备的信息。假如用户需要修改设备的一些属性,或者在系统加载

和移除设备的时候进行一下操作以及其他一些需求时,应该怎么办呢??

在linux内核版本2.6以后,使用udev来进行设备管理,之前是使用devfs。

udev提供了配置文件/etc/udev/udev.conf和规则文件在/etc/udev/rules.d下面的.rules文件

系统默认的一些规则文件在/lib/udev/rules.d下面。

我们可以通过编写规则文件来改变系统创建设备文件的规则

这里我们需要改变创建设备文件的访问权限。

.rules中的每一行都是一条规则

一条规则有key-values对构成。

键值对又分为匹配键值对和赋值键值对

一条规则至少包含一个匹配键值对和一个赋值键值对

通过匹配键值对去匹配设备,然后在对这个设备执行赋值键值对。

我的规则如下:

SUBSYSTEM=="usb",ATTR{devpath}=="1.1.1",ATTR{idVendor}=="0bb4",ATTR{idProduct}=="0cf0",MODE="0777",SYMLINK+="LZL_HTC"

SUBSYSTEM=="usb",ATTR{devpath}=="1.1.1",ATTR{idVendor}=="0bb4",ATTR{idProduct}=="0cf0"这一部分属于匹配键值对

MODE="0777"这里是赋值键值对,在修改设备的访问权限


在写匹配键值对的时候

可以通过udevadm info -a -n /dev/设备文件名

来查讯设备的信息。

如下所示:

KERNEL=="2-1.1.1"
SUBSYSTEM=="usb"
DRIVER=="usb"
ATTR{bDeviceSubClass}=="00"
ATTR{bDeviceProtocol}=="00"
ATTR{devpath}=="1.1.1"
ATTR{idVendor}=="0bb4"
ATTR{speed}=="480"
ATTR{bNumInterfaces}==" 2"
ATTR{bConfigurationValue}=="1"
ATTR{bMaxPacketSize0}=="64"
ATTR{busnum}=="2"
ATTR{devnum}=="10"

规则文件的命名要注意了

udev会通过文件名的assii码的升序来遍历规则文件

然后匹配上的规则文件都会生效。

所以会发生覆盖的现象。

所以假如要自己的规则生效一定要在后面执行规则。

添加了规则文件后,可以通过sudo udevadm trigger

人工触发udev,使规则文件生效。

udev 的知识可以参考:https://wiki.archlinux.org/index.php/Udev#Installation

第二种:用root用户去调试android程序或者用root用户去启动adb服务。

如:

sudo ./adb kill-server

sudo ./adb devices

第三种:手动修改设备文件的访问权限

我们知道linux会在/dev下面产生相应设备的设备文件

在这里找到相应的设备文件,通过chmod来修改访问权限就好了。

在ubuntu下真机调试android程序出现设备没有访问权限的更多相关文章

  1. mac 下真机调试 android 手机

    第一步: 查看usb设备信息 在 终端输入:system_profiler SPUSBDataType     可以查看连接的usb设备的信息 比如我的usb信息如下(部分内容): Spreadtru ...

  2. ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon

    在使用真机调试Android程序时,报错如下: could not read ok from ADB Server * failed to start daemon error: cannot con ...

  3. 【ionic】Mac IOS下真机调试

    模拟调试不能保证真机一定没问题,所以真机调试是非常必要的一步 IOS设备 启用设备调试 在IOS设备中(Iphone,Ipad)中开始web检测器 设备->safari->高级->w ...

  4. iPhone 真机调试应用程序

    原文:http://blog.sina.com.cn/s/blog_68e753f70100r3w5.html 真机调试iphone应用程序 1.真机调试流程概述 1)       真机调试应用程序, ...

  5. 使用未付费的账号真机调试 iOS 程序,过几天后程序一打开就会闪退

    使用未付费的苹果开发者账号真机调试 iOS 程序,过几天后程序一打开就会闪退.   解决办法: 删除 Provisioning Profile,重新配置一次. 终极解决办法:花钱购买苹果开发者账号. ...

  6. xcode7.1.1不能真机调试ios9.2系统设备的解决方法

    转载自:http://www.cocoachina.com/bbs/read.php?tid-331335.html 前些天手机升级到iOS9.2版本号  xcode7.1还能真机測试. 昨晚更新xc ...

  7. eclipse下使用Genymotion调试Android程序出现的问题

    一. The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse. ...

  8. 移动设备真机调试本地程序的Node.js【无需连wifi】

     前提: 在某些场景下,我们需要调试我们的Node.js,这很简单,很多编辑器都集成了debug模式,但是某些场景下,我们想在移动设备上运行,在本地debug,这也行,只需要链接在同一个内网,通过ip ...

  9. Android真机调试 Android.Util.AndroidRuntimeException: You cannot combine custom titles with other title features

    参考连接:http://blog.csdn.net/scyatcs/article/details/9003285 Android.Util.AndroidRuntimeException: You ...

随机推荐

  1. Date日期比对

    Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); calendar1. ...

  2. windows Android 开发环境

    步骤: 1)下载jdk,注意这是安装路径,不是目标路径,忘记了怎么看勒,安装路径的lib文件夹下面有个tools.jar 文件,这个也是等下需要的. 2) 在path 中添加 ;%JAVA_HOME% ...

  3. 我的android学习经历26

    ViewPager的使用 ViewPager就想微信或者qq的顶部的导航栏一样,滑动可以改变到不同的View或者Fragment 使用方法: 在布局文件中定义标签: android.support.v ...

  4. Linux链接库一(动态库,静态库,库放在什么路径下)

    http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http ...

  5. 业务对象和BAPI

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. [SAP ABAP开发技术总结]预定义(内置)数据类型

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. LTE Module User Documentation(翻译2)——配置LTE MAC 调度器

    LTE用户文档 (如有不当的地方,欢迎指正!) 5 配置 LTE MAC 调度器   这里有几种 LTE MAC 调度器用户可以选择.使用下面的代码定义调度器的类型: Ptr<LteHelper ...

  8. oracle的基本概念

    一·简介 1)数据库(DataBase) 用于存放数据,管理数据的存储仓库,是有效组织在一起的数据集合. 2)常用数据库软件 大型数据库:Oracle 中小型数据库:Mysql MySQL 3)RDB ...

  9. MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法

    打开所在的wordspace文件夹,在下面子文件夹 .metadata\.plugins\org.eclipse.core.runtime\.settings\com.genuitec.eclipse ...

  10. 06 SQL执行计划

    解释计划 与 执行计划的 区别 随着可以得到解释计划输出的开发工具, 比如 toad 的普遍使用, 生成解释计划就变的相当简单. 而不简单的是得到执行计划. 解释计划 EXPLAIN PLAN 用来显 ...