Permission 调试笔记

d97cb89c3bd5ab5f233b93f6a5990e36.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、安全架构设计

二、应用签名

三、用户ID 和文件访问

四、使用权限

五、正常权限和危险权限

六、自定义权限

七、动态申请权限案例

Android 是一个权限分隔的操作系统,其中每个应用都有其独特的系统标识(Linux 用户ID 和组 ID)。系统各部分也分隔为不同的标识。Linux据此将不同的应用以及应用与系统分隔开来。

其他更详细的安全功能通过“权限”机制提供,此机制会限制特定进程可以执行的具体操作,并且根据URI权限授权临时访问特定的数据段。

一、 安全架构设计

Android安全架构的中心设计点是:
在默认情况下任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读取或写入用户的私有数据(例如联系人或电子邮件)、读取或写入其他应用程序的文件、执行网络访问、使设备保持唤醒状态等。

由于每个 Android 应用都是在进程沙盒中运行,因此应用必须显式共享资源和数据。它们的方法是声明需要哪些权限来获取基本沙盒未提供的额外功能。应用以静态方式声明它们需要的权限,然后Android 系统提示用户同意。

二、应用签名

所有APK(.apk 文件)都必须使用证书签署,其私钥由开发者持有。此证书用于识别应用的作者。证书不需要由证书颁发机构签署;Android应用在理想情况下可以而且通常也是使用自签名证书。证书在 Android 中的作用是识别应用的作者。这允许系统授予或拒绝应用对签名级权限的访问,以及授予或拒绝应用获得与另一应用相同的 Linux身份的请求。

比如:
声明一个安全权限,可用于限制对此或其他应用程序的特定组件或功能的访问。

5de2c3c864d243337277a7d269cdce66.jpeg

权限声明

三、用户ID 和文件访问

在安装时,Android为每个软件包提供唯一的 Linux 用户 ID。此ID 在软件包在该设备上的使用寿命期间保持不变。在不同设备上,相同软件包可能有不同的 UID;重要的是每个软件包在指定设备上的UID是唯一的。

由于在进程级实施安全性,因此任何两个软件包的代码通常都不能在同一进程中运行,因为它们需要作为不同的 Linux用户运行。您可以在每个软件包的 AndroidManifest.xml 的 manifest 标记中使用 sharedUserId 属性,为它们分配相同的用户ID。这样做以后,出于安全目的,两个软件包将被视为同一个应用,具有相同的用户ID 和文件权限。

为保持安全性,只有两个签署了相同签名(并且请求相同的 sharedUserId)的应用才被分配同一用户ID

应用存储的任何数据都会被分配该应用的用户ID,并且其他软件包通常无法访问这些数据。使用 getSharedPreferences(String, int)、openFileOutput(String, int)或 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)

<think>我们正在讨论在Ubuntu笔记本上使用chip-tool调试BLE Dongle的安装和配置方法。根据用户提供的信息,用户希望使用chip-tool来调试BLE设备,并且引用中提到了在Ubuntu上使用BLE和WiFi进行调试,以及可能遇到的扫描失败问题。 用户的问题背景: - 用户有一台运行Ubuntu的笔记本,想要连接一个蓝牙dongle(适配器)来使用chip-tool进行BLE调试。 - 引用[1]提到,在Ubuntu服务器映像中默认启用了BLE,但用户可能是在桌面版Ubuntu上操作。 - 引用[2]提到了使用chip-tool时可能出现的BLE扫描失败问题及其原因(蓝牙广播问题、BlueZ缓存、设备标识冲突)和解决办法。 因此,我们需要指导用户完成以下步骤: 1. 确保蓝牙适配器在Ubuntu上正常工作。 2. 安装和配置chip-tool。 3. 使用chip-tool通过BLE调试设备(如照明设备)。 注意:用户提到“在笔记本上使用chip-tool调试BLE Dongle”,这里可能有两层意思: a) 调试蓝牙dongle本身(即确保dongle工作正常) b) 使用蓝牙dongle通过chip-tool调试其他BLE设备(如智能灯泡等) 根据引用[1]中的描述,chip-tool应用程序将设置BLE以发现其他设备(例如AVH RPi上的照明设备)。因此,我们假设用户是想用笔记本上的蓝牙dongle作为chip-tool的控制端,去发现和控制其他BLE设备。 步骤规划: 一、硬件准备 1. 确认蓝牙dongle的兼容性(参考之前的回答,推荐使用CSR8510或RTL8761B等芯片的dongle) 2. 插入dongle,检查系统识别情况。 二、软件准备 1. 确保蓝牙服务运行正常(使用bluez)。 2. 安装chip-tool(参考Matter SDK的官方文档)。 3. 配置环境(可能需要设置Python环境、编译chip-tool等)。 三、运行和调试 1. 使用chip-tool进行BLE扫描。 2. 如果遇到扫描失败(如引用[2]中的问题),提供解决方法。 四、测试 1. 尝试发现并控制一个BLE设备(如照明设备)。 详细步骤: 一、硬件准备 1. 选择兼容的蓝牙dongle(如之前推荐的型号)。 2. 插入笔记本USB口,检查是否被识别: ```bash lsusb ``` 例如,如果使用CSR8510,应该能看到类似“Cambridge Silicon Radio, Ltd Bluetooth Radio”的设备。 3. 检查蓝牙服务状态: ```bash systemctl status bluetooth ``` 如果未运行,则启动服务: ```bash sudo systemctl start bluetooth ``` 4. 使用`hciconfig`命令检查蓝牙适配器: ```bash hciconfig -a ``` 确保设备状态为`UP`(如果不是,使用`sudo hciconfig hci0 up`启用,其中`hci0`是设备名)。 二、安装和配置chip-tool chip-tool是Matter SDK的一部分,用于调试Matter设备。根据Matter官方文档(https://github.com/project-chip/connectedhomeip),安装步骤大致如下: 1. 安装依赖: ```bash sudo apt-get install git gcc g++ pkg-config libssl-dev libdbus-1-dev libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev ``` 2. 克隆Matter仓库: ```bash git clone --recurse-submodules https://github.com/project-chip/connectedhomeip.git cd connectedhomeip ``` 3. 激活环境并安装依赖(使用脚本): ```bash source scripts/bootstrap.sh ``` 4. 激活环境(每次新开终端需要): ```bash source scripts/activate.sh ``` 5. 编译chip-tool: ```bash cd examples/chip-tool gn gen out/debug ninja -C out/debug ``` 编译完成后,可执行文件位于`out/debug/chip-tool`。 三、运行和调试 1. 使用chip-tool进行BLE扫描(扫描持续10秒): ```bash ./out/debug/chip-tool pairing ble-wifi 1234 ${SSID} ${PASSWORD} 20202021 3840 ``` 注意:上述命令中的参数需要根据实际情况替换: - ${SSID}: 目标设备连接的WiFi网络名称 - ${PASSWORD}: WiFi密码 - 1234: 目标设备的discriminator(鉴别器) - 20202021: 设置引脚代码(setup PIN code) - 3840: 目标设备的设备标识符(node ID) 但是,根据引用[1]中提到的,用户可能只需要通过BLE发现设备,然后通过WiFi控制。因此,这里使用的是`ble-wifi`选项。 2. 如果遇到扫描失败(如引用[2]中的问题): - 问题1:目标设备的蓝牙广播问题 * 确保目标设备在广播状态,且距离笔记本足够近。 - 问题2:BlueZ缓存了之前失败的扫描 * 重启蓝牙服务清除缓存: ```bash sudo systemctl restart bluetooth ``` - 问题3:设备标识冲突 * 确保要添加的设备没有被重复添加,可以尝试重置chip-tool的数据库(删除`/tmp/chip_*`文件)或重启系统。 3. 另外,确保蓝牙适配器没有被其他进程占用。可以使用: ```bash sudo hciconfig hci0 down sudo hciconfig hci0 up ``` 四、测试 如果扫描成功,chip-tool会尝试通过BLE与设备配对,然后通过WiFi进行控制。用户可以使用编译好的chip-tool发送命令,例如控制照明设备的开关。 例如,打开照明设备(假设设备ID为3840): ```bash ./out/debug/chip-tool onoff on 3840 1 ``` 注意事项: - 确保目标设备处于配对模式(例如,照明设备需要处于可被发现的模式)。 - 如果目标设备是Raspberry Pi上模拟的AVH设备,确保其已正确配置并运行。 引用[2]中提到的FAQ1解决方案,我们已经在步骤三中涵盖。 总结回答结构: 1. 硬件准备(蓝牙dongle的选择和检查) 2. 软件安装(Matter SDK和chip-tool的编译) 3. 运行chip-tool进行BLE扫描和配对 4. 常见问题解决(扫描失败) 最后,生成相关问题。</think>### 在Ubuntu笔记本上配置BLE Dongle使用chip-tool的完整指南 #### 一、硬件准备与兼容性验证 1. **推荐蓝牙适配器**: - 必须支持BLE 5.0+(如TP-Link UB500/绿联CM576) - 验证芯片组(终端执行): ```bash lsusb | grep -E "Cambridge|Realtek" # 检查CSR/RTL芯片 dmesg | grep -i bluetooth # 查看内核识别记录 ``` 2. **关键兼容性检查**: ```bash hciconfig -a # 确认状态为`UP RUNNING` bluetoothctl list # 检查控制器可见性 ``` #### 二、软件环境配置 1. **安装BlueZ与依赖**: ```bash sudo apt update sudo apt install bluez bluez-tools libbluetooth-dev sudo systemctl enable bluetooth ``` 2. **编译chip-tool**: ```bash git clone --depth 1 https://github.com/project-chip/connectedhomeip cd connectedhomeip source scripts/bootstrap.sh # 安装编译依赖 source scripts/activate.sh # 激活环境 cd examples/chip-tool gn gen out/debug && ninja -C out/debug ``` #### 三、BLE扫描与设备配对 1. **启动BLE扫描**: ```bash sudo ./out/debug/chip-tool pairing ble-wifi 1234 ${SSID} ${PASSWORD} 20202021 3840 ``` - `1234`: 目标设备鉴别器 - `3840`: 设备标识符(引脚代码) - `ble-wifi`: BLE发现后通过WiFi控制[^1] 2. **解决扫描失败**: ```bash sudo systemctl restart bluetooth # 清除BlueZ缓存[^2] sudo rm /var/lib/bluetooth/* # 删除冲突设备标识 hcitool lescan --duplicates # 手动验证广播 ``` #### 四、典型问题解决方案 | 问题现象 | 解决方案 | |----------|----------| | `Fail to start BLE scan` | 重启蓝牙服务+检查设备广播强度[^2] | | `Device not found` | 确认目标设备处于配对模式 | | `Connection timeout` | 禁用笔记本内置蓝牙(避免干扰) | | `Permission denied` | 将用户加入`bluetooth`组:`sudo usermod -aG bluetooth $USER` | #### 五、验证与控制示例 ```bash # 查看已配对设备 ./out/debug/chip-tool pairing list-pairings # 控制照明设备(需设备ID) ./out/debug/chip-tool onoff on 3840 1 ``` > ⚠️ **关键提示**: > 1. 使用USB 2.0接口避免2.4GHz干扰 > 2. 开发期间保持`bluetoothctl monitor`运行实时观察状态 > 3. 测试距离<3米确保信号稳定 --- ### 相关问题 1. 如何为chip-tool编译自定义cluster控制器? 2. Ubuntu下如何调试BLE数据包(抓取HCI日志)? 3. 多个BLE设备同时连接时的资源分配策略? 4. 如何为Matter设备生成新的QR配对码? [^1]: 通过`ble-wifi`选项指定BLE发现后WiFi控制流程 [^^2]: 清除BlueZ缓存可解决90%的扫描失败问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值