• 在ubuntu下真机调试android程序出现设备没有访问权限


        今天把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来修改访问权限就好了。

  • 相关阅读:
    jdk1.8安装教程
    实现负载均衡的两种方式
    Java中ArrayList和LinkedList区别
    做一个英译中的命令行工具
    在 IDEA 中运行 Spark 程序报错:Multiple sources found for text.......please specify the fully qualified class name
    Android消息处理:EventBus、BroadCast和Handler-优缺点比较(转)
    C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter、转载)
    Android相关知识
    物联网相关知识
    Mqtt相关知识
  • 原文地址:https://www.cnblogs.com/lzl-sml/p/3664576.html
Copyright © 2020-2023  润新知