# yj_nearbyglasses
尝试检测附近的智能眼镜并向你发出警告。
# ⚠ 警告!⚠
*nearby-glasses-alert.pages.dev* 与我的项目**没有任何关系**。Play Store 和 App Store 中的许多应用看起来甚至名称都与 *Nearby Glasses* 非常相似。它们似乎盗用了这个名字,试图从中快速牟利。它们不遵守 AGPL 许可证,也不提供任何保障。我不认可这种行为。
---
<img width="135" height="300" align ="right" alt="Nearby Glasses 经典模式截图" src="https://assets.kitploit.com/production/public/readmes/12083/e76b27744afcd0893efe1992c440e28c6606e742fa390f1b2c9a79a34e5600d1.png" />
<img width="135" height="300" align ="right" alt="Nearby Glasses 金丝雀模式截图" src="https://assets.kitploit.com/production/public/readmes/12083/29c66ac6f3e7327f73700e7241c0ca93860a8f5cc3efdfdc619b8ee91873473a.png" />
# ⚠ 警告!⚠
**仅仅因为你认为某人佩戴了隐蔽的监控设备就骚扰对方,可能构成刑事犯罪。其严重程度甚至可能超过使用此类设备本身。请就此事咨询当地法律并寻求法律意见。**
---
## ⚠ 无论如何都不要骚扰任何人 ⚠
---
# Nearby Glasses
这款名为 *Nearby Glasses* 的应用只有一个目的:寻找附近的智能眼镜并向你发出警告。
<a href="https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses" target="_blank"><img width="239" height="71" alt="Get It On Google Play" src="https://assets.kitploit.com/production/public/readmes/12083/a7dbeba4623dd255798dd1159e543cdbeeb9e43faa6db7f859b0f9ed3699932c.png" /></a> <a href="https://apt.izzysoft.de/packages/ch.pocketpc.nearbyglasses" taget="_blank"><img height="71" src="https://assets.kitploit.com/production/public/readmes/12083/75659b864e0f38bedce979c2097721b9beae838a06434eaacb0e93815468735a.png" alt="Get it at IzzyOnDroid" /></a> <a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://github.com/yjeanrenaud/yj_nearbyglasses/"><img width="239" height="71" alt="Get it on Obtainium" src="https://assets.kitploit.com/production/public/readmes/12083/33e5685bdfff51e02830f2a18b5df5df986e73c2c8ae0f7cf031ebc791e5f771.png"/></a> <a href="https://f-droid.org/en/packages/ch.pocketpc.nearbyglasses/"><img src="https://raw.githubusercontent.com/yjeanrenaud/yj_nearbyglasses/main/img/get-it-on-fdroid.png?raw=true" alt="Get it on F-Droid" width="213" /></a> <a href="https://apps.apple.com/us/app/nearby-glasses-original/id6761056896"><img width="213" height="71" alt="Download on the App Store" src="https://assets.kitploit.com/production/public/readmes/12083/a6fa504b048d52b4e9f5108021dce33af0d96b8b78c34095072971f4a34471fa.png" /></a>
# 目录
* [Nearby Glasses](#Nearby-Glasses)
* [为什么?](#why)
* [如何实现?](#how)
* [功能](#features)
* [什么是 RSSI?](#whats-rssi)
* [iOS 与 Android](#ios-and-android)
* [使用方法](#usage)
* [待办事项](#todos)
* [技术解决主义?](#tech-solutionism)
* [从源码构建](#build-from-source)
* [致谢](#shoutouts)
* [许可证与鸣谢](#license-and-credits)
本应用会在附近出现智能眼镜时通知你。它利用这些设备发出的蓝牙数据中的公司标识符进行识别。因此,很可能会出现误报(例如来自 VR 头显)。所以,在接近附近佩戴眼镜的人时请务必谨慎。尽管本应用发出了警告,对方可能只是戴着普通眼镜。
该应用的作者 [Yves Jeanrenaud](https://yves.app) 对本应用及其功能不承担任何责任。使用风险自负。从技术设计上讲,检测蓝牙 LE 设备有时可能无法按预期工作。我并非科班出身的开发者。这一切都是我在业余时间、凭借自学知识写成的。<br/>
**误报很可能发生。** 这意味着,*Nearby Glasses* 应用可能会在你附近实际上只有同一厂商的 VR 头显或该公司其他产品时,通知你附近有智能眼镜。它也可能漏掉附近的智能眼镜。再次强调:我不是专业开发者。<br/>
不过,本应用是**免费且开源的**,你可以审阅代码、修改代码并重新使用(依据[许可证](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/LICENSE))。<br/>
*Nearby Glasses* 应用不会存储任何关于你的详细信息,也不会收集任何关于你或你手机的信息。没有遥测、没有广告,也没有其他骚扰。如果你通过 Play Store 安装该应用,Google 可能会了解一些关于你的信息并收集一些统计数据。但应用本身不会。<br/>
如果你选择存储(导出)日志文件,这完全由你决定,数据流向何处也由你承担责任。日志仅在本地记录,不会自动与任何人共享。它们包含的敏感数据很少;事实上,只有所遇到的 BLE 设备的制造商 ID 代码。<br/>
<br/>
**请极其谨慎使用!** 如前所述:无法保证检测到的智能眼镜真的就在附近。它可能是另一台在技术上(在 BLE 广播层面)与智能眼镜相似的设备。<br/>
请不要鲁莽行事。**在根据任何消息采取行动之前请三思**(不仅限于本应用的消息)。<br/>
<br/>
## 为什么?
- 因为我认为智能眼镜是一种不可容忍的侵入、无视同意的可怕技术产物,而且它已经被用于制作各种大量同样真正令人作呕的“内容”。[1](https://www.404media.co/border-patrol-agent-recorded-raid-with-metas-ray-ban-smart-glasses/),[2](https://www.404media.co/metas-ray-ban-glasses-users-film-and-harass-massage-parlor-workers/)
- 一些智能眼镜配有小型 LED,用于表示正在录制。但这很容易被禁用,而厂商声称会防止这种情况,却完全不承担责任(几十年来技术界一直如此)。[3](https://www.404media.co/how-to-disable-meta-rayban-led-light/)
- 智能眼镜此前已被用于即时人脸识别 [4](https://www.404media.co/someone-put-facial-recognition-tech-onto-metas-smart-glasses-to-instantly-dox-strangers/),据报道未来还将开箱即用 [5](https://www.nytimes.com/2026/02/13/technology/meta-facial-recognition-smart-glasses.html)。这使许多人处于危险之中。
- 这些数据被用于训练 AI,这意味着人们会筛查录像,并很可能看到最私密的细节 [6](https://www.svd.se/a/K8nrV4/metas-ai-smart-glasses-and-data-privacy-concerns-workers-say-we-see-everything)
- 我希望这个应用对某些人有用。
## 如何实现?
- 这是一种相当简单的启发式方法。由于 BLE 使用随机化 MAC,且 OSSID 不稳定,服务通告的 UUID 也不稳定,你不能只扫描蓝牙信标。更糟的是,一些厂商(例如 Meta)使用专有蓝牙服务,UUID 并不持久,~~目前我们只能依赖通信的设备名称~~。
- 目前**最可行的方法**来自 [Bluetooth SIG 分配编号仓库](https://www.bluetooth.com/specifications/assigned-numbers/)。据此,制造商公司名称会以数字代码的形式出现在 BLE 信标的广播包头(ADV)中。
- BLE 广播帧的样子如下:
```
Frame 1: Advertising (ADV_IND)
Time: 0.591232 s
Address: C4:7C:8D:1E:2B:3F (Random Static)
RSSI: -58 dBm
Flags:
02 01 06
Flags: LE General Discoverable Mode, BR/EDR Not Supported
Manufacturer Specific Data:
Length: 0x1A
Type: Manufacturer Specific Data (0xFF)
Company ID: 0x058E (Meta Platforms Technologies, LLC)
Data: 4D 45 54 41 5F 52 42 5F 47 4C 41 53 53
Service UUIDs:
Complete List of 16-bit Service UUIDs
0xFEAA
```
- 根据 [Bluetooth SIG 分配编号仓库](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/www.bluetooth.com/specifications/assigned-numbers),我们可以使用以下公司 ID:
- `0x01AB` 对应 `Meta Platforms, Inc.(原 Facebook)`
- `0x058E` 对应 `Meta Platforms Technologies, LLC`
- `0x0D53` 对应 `Luxottica Group S.p.A`(Meta Ray-Bans 的制造商)
- `0x03C2` 对应 `Snapchat, Inc.`(SNAP Spectacles 的制造商)
- `0x05D6` 对应 `Zhuhai Jieli Technology Co`(Rogbird VisionPro 和 Rollme VistaView 的制造商)
这些 ID 是**不可更改且强制性的**。当然,Meta 和其他制造商也有其他带蓝牙功能的产品,因此也会使用其 ID,例如 VR 头显。因此,使用这些公司 ID 代码进行应用扫描过程容易产生误报。但如果你看不到周围有人戴着 Oculus Rift,也没有可以藏身的建筑物,那么很可能就是智能眼镜。
- 在配对过程中,智能眼镜通常会广播其产品名称,因此我们也可以扫描该名称。但在实际场景中很少能看到这种情况。打算在酒吧、酒馆、街头等场所使用智能眼镜的人通常会事先做好准备。
- 当应用识别到信号强度足够(见下方 RSI)的蓝牙低功耗(BLE)设备时,会推送一条警报消息。这有助于你采取相应行动。
- 此外,我们还会扫描广播的设备名称,例如 `rayban`、`ray-ban` 或 `HeyCyan`。`HeyCyan` 是[一个适用于多个品牌智能眼镜的知名 SDK](https://github.com/ebowwa/HeyCyanSmartGlassesSDK)。在这些 *HeyCyan* 设备中,你还可以找到由 ALDI 和 Hofer(在奥地利)销售的 Nilox Smart AI Glasses。为加强检测,我们还会查找 `primary_UUID`,这是一个固定在这些眼镜软件端的服务标识符(`7905FFF0-B5CE-4E99-A40F-4B1E122D00D0`)。虽然这在未来可能会改变,但可能性不大,因为那会使旧设备无法使用,因此届时我们可能只需在扫描例程中添加更多 UUID。
## 功能
- 应用 *Nearby Glasses* 在附近有智能眼镜时(即检测到上述公司 ID 之一的 BLE 设备)会显示通知
- **附近**是指 RSSI(信号强度)小于或等于给定值:默认 -75 dBm。该默认值对应中等距离和尚可的信号。
### 什么是 RSSI?
- 让我稍微解释一下 RSSI 值:<br/>
RSSI 是 Received Signal Strength Indication(接收信号强度指示)的缩写。该值表示无线通信应用的接收场强。[维基百科上有一篇相当不错的文章](https://en.wikipedia.org/wiki/Received_signal_strength_indicator)介绍了它。
简而言之,RSSI 主要取决于:<br/>
- 设备发射功率
- 天线设计
- 墙壁和障碍物
- 人体吸收信号
- 反射和干扰
- 设备朝向<br/>
但在典型的 BLE(低功耗蓝牙)场景中,RSSI 的粗略距离(开阔空间)为:<br/>
- -60 dBm ~ 1 – 3 m<br/>
- -70 dBm ~ 3 – 10 m<br/>
- -80 dBm ~ 10 – 20 m<br/>
- -90 dBm ~ 20 – 40 m<br/>
- -100 dBm ~ 30 – 100+ m 或接近信号丢失<br/>
在室内,距离通常要短得多。<br/>
RSSI 大致按以下规律下降<br/>
`RSSI ≈ -10 * n * log10(distance) + constant`<br/>
- 因此,默认的 RSSI 阈值 -75 dBm 在开阔空间中对应约 10 到 15 米,在室内或拥挤空间中对应 3 到 10 米。你很有机会发现那样戴着智能眼镜的人。
- *Nearby Glasses* 显示一个可选的调试日志,可导出(为 txt 文件),并具有复制粘贴功能。这些功能面向高级用户(极客)以及进一步调试。
- 在*设置*下,你可以指定日志长度、调试方式(显示所有扫描项或仅显示 ADV 帧)。
- 你还可以输入一些**公司 ID**,以十六进制值字符串的形式,例如 `0x01AB,0x058E,0x0D53`。这会覆盖内置检测,因此你的通知会针对新的值显示。
- 为实现更好的持久性,它使用 Android 的*前台服务*。如果你不需要,可以在*设置*下禁用此功能。
- *设置*下的*通知冷却时间*指定两次警告之间必须经过多长时间。默认值为 10000 ms,即 10 秒。这也适用于金丝雀,例如 10 秒意味着它会保持警报 10 秒,然后才会自行平静下来。
- 现在它更加本地化了:<img src="https://raw.githubusercontent.com/yjeanrenaud/yj_nearbyglasses/HEAD/img/canary_hide.svg" align="right" alt="一只金丝雀躲在翅膀下的图画" height="100" width="100">
- 英语
- 德语
- 瑞士德语
- 法语
- 西班牙语
- 中文
- 意大利语
- 葡萄牙语(巴西)
- 俄语
- 土耳其语
- 后续还会有更多([通过用你的语言贡献来支持这个项目!](https://github.com/yjeanrenaud/yj_nearbyglasses/issues/3))
- 现在应用图标的背景不再是透明的了
- 现在我们也会扫描 UUID
- *Nearby Glasses* 现在支持深色模式(通过系统设置)
- 边缘到边缘布局问题应从 [v1.0.4](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) 起得到修复。
- 新近以 AGPL 3.0 许可授权
- 我决定放弃 CLA。在与一些比我更了解协作项目的人讨论后,我意识到这是一个不必要的步骤。
- 它现在有了略微不同的图标,以更严格地遵守 AGPL 3.0。
## iOS 与 Android
- 经过三周的努力,iOS 移植版终于发布了。它应该能在大多数 iPhone 和 iPad 上运行,甚至包括较旧的设备(可回溯至 iOS 16)。[源代码和项目文件也已提供](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/iOS)。代码风格粗糙且非正统。许多实现方式都是快速而简陋的(例如,我复用了 Android 本地化中的 json 文件),但到目前为止它确实能正常工作。*Nearby Glasses* 可通过 [Apple App Store](https://apps.apple.com/us/app/nearby-glasses-original/id6761056896) 获取。(它被命名为 original 是为了与那些仿冒品区分开来)。一个 .ipa 文件可在 [releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) 下用于侧载。
iOS 应用无法在后台运行,因为由于 iOS 的限制,我找不到类似 `ForegroundServices` 的方式来持续扫描 BTLE ADV。因此,在 iOS 下的 *Nearby Glasses* 中仅提供 *Canary Mode*。如果你对 Swift 和 iOS 的了解比我更深入(这很有可能),请贡献你的力量!
- 由于此仓库同时包含 Android 和 iOS 应用代码,我重新组织了文件夹结构。因此,现在有 [/iOS](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/iOS) 和 [/Android](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/Android)。
## 使用方法
- 请查看 [Releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) 下载 APK,或使用 Google Play Store。F-Droid 和/或 Accrescent 可能随后跟进。
<img width="135" height="300" align ="right" alt="Nearby Glasses 截图:设置" src="https://assets.kitploit.com/production/public/readmes/12083/71a0271ff9172cad52e8d83ed9a29ba43b509c7b250be2a0254a5a4371ee3401.png" />
<a href="https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses" target="_blank"><img width="239" height="71" alt="Get It On Google Play" src="https://assets.kitploit.com/production/public/readmes/12083/a7dbeba4623dd255798dd1159e543cdbeeb9e43faa6db7f859b0f9ed3699932c.png" /></a> <a href="https://apps.apple.com/us/app/nearby-glasses-original/id6761056896"><img width="213" height="71" alt="Download on the App Store" src="https://assets.kitploit.com/production/public/readmes/12083/a6fa504b048d52b4e9f5108021dce33af0d96b8b78c34095072971f4a34471fa.png" /></a>
1. 安装应用(目前可从 [Releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) 或 [Google Play](https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses) 获取),或从 [Apple App Store](https://apps.apple.com/us/app/nearby-glasses-original/id6761056896) 获取,然后打开它
2. 点击 *Start Scanning* 按钮
3. 授予权限以激活蓝牙(如果尚未启用)并访问附近的设备。某些版本的 Android 还需要你授予访问位置的权限(主要是在版本 13 之前)。*Nearby Glasses* 不会对你的位置信息做任何处理。如果你不相信我,请查看[代码](https://github.com/yjeanrenaud/yj_nearbyglasses/tree/main/app)
4. 如果你没有看到扫描开始,你可能需要在 *Settings* 菜单中为你的特定手机启用 *Foreground Service*(见下文)
5. 一切就绪!当附近检测到智能眼镜时,会出现通知。它会一直如此,直到你点击 *Stop Scanning* 或彻底终止应用
7. 在菜单中(右上角的齿轮图标),你可以进行一些 *Settings* 设置:
1. *Enable Foreground Service*:通过此项,你可以防止 Android 暂停应用,从而防止它无法提醒你。我建议保持启用
2. *RSSI threshold*:这个负数指定了设备可能距离多远才会触发 *Nearby Glasses* 的警报。从技术上讲,它指的是接收到的信号强度。越接近零意味着信号越好,因此你的手机与智能眼镜之间的距离越近。请参阅[上文关于 RSSI 的说明和指导](#how)。我建议保持在 -75
3. *Enable Notifications*:你大概不会想禁用这个
4. Canary Mode。这是新的默认模式。启用后,你不会收到提醒附近有智能眼镜的系统通知,而是会看到一个金丝雀,表示周围没有智能眼镜。由于技术限制,iOS 应用只有金丝雀模式。<img src="https://raw.githubusercontent.com/yjeanrenaud/yj_nearbyglasses/HEAD/img/canary.svg" alt="Drawing of a canary" width="100" height="100" alignt="left">
5. *Notification/Canary Cooldown*:在这里,你可以指定希望收到多少条关于附近发现智能眼镜的通知,或者金丝雀应该隐藏多久。我选择 10 秒(10000 毫秒)作为默认值。这样,你既不会错过通知,同时也不会被它过多打扰或过快耗尽电池
6. *Enable Log Display*:禁用此项可能会为你节省一些电量。在金丝雀模式下此项被禁用。
7. *Debug*:需要在日志显示框中看到除匹配的 BLE 帧之外的更多内容。它有助于查看各项功能是否正常工作。在金丝雀模式下此项被禁用。
8. *Max log lines*:日志可以达到的最大长度。200 似乎是在电池寿命和日志可用性之间(对于像我这样的极客而言)的良好平衡。在金丝雀模式下此项被禁用。
9. *BLE ADV only*:这会从日志中排除其他蓝牙 LE 帧,以提高可读性。在金丝雀模式下此项被禁用。
10. *Override Company IDs*:如果你愿意,你可以让 *Nearby Glasses* 提醒你上述指定之外的其他设备。至少对我来说,这对调试很有用。如果你不需要它或不知道如何使用它,请留空
11. 每项设置都会被保存并立即生效。要返回,请使用返回按钮或手势
8. 导出功能使你能够分享应用日志的文本文件。对于像我这样的极客
9. 你也可以通过点击日志显示框来复制粘贴日志
## 待办事项
- **它现在已经在实际环境中运行起来了!** 我成功让一些人在他们周围有已验证的智能眼镜时进行了测试。特别感谢 Lena!
- 请查看 [Releases](https://github.com/yjeanrenaud/yj_nearbyglasses/releases) 下载 APK。
- 我也将 [*Nearby Glasses* 发布到了 Google Play](https://play.google.com/store/apps/details?id=ch.pocketpc.nearbyglasses)。不过,对于那些不想使用 Google Play 的用户,我始终会[在 GitHub 上发布版本](https://github.com/yjeanrenaud/yj_nearbyglasses/releases),也会[在其他地方发布](https://yves.app/nearbyglasses/latest.apk)。
---
- 添加一个选项,将误报加入忽略列表。也许放在通知里?
- 我完全不是蓝牙或 Android 专家。据我所知,还可以通过嗅探 BLE 流量来深入研究智能眼镜的通信。这样做的话,我们很可能就不需要依赖设备按照蓝牙规范运行,而是可以对加密流量传输使用启发式方法,而不会产生太多误报。但我已经十多年没有研究过蓝牙流量数据包了。很高兴我还记得 ADV 帧……所以如果有人能在这方面提供帮助,将不胜感激!
---
- 添加**更多智能眼镜的制造商 ID**。目前只有 Meta、Oakley 和 Snap。一份带摄像头的智能眼镜列表也会有帮助。我为此开了一个 [ISSUE](https://github.com/yjeanrenaud/yj_nearbyglasses/issues/56),这样人们在遇到其他带录像功能的智能眼镜时,可以通过发送他们的日志(我认为这些日志是完全安全的)来**提供协助**
- 截至 2026 年 3 月 24 日,iOS 版本也已可用。
- **Google Pixel 设备**上的**布局问题**似乎已在 1.0.3 版本中修复。如果你仍然无法访问菜单,因为它不知何故与状态栏混在一起了。我会尽快研究这个问题。与此同时,请尝试将屏幕切换到横屏模式并*顺时针(向右)*旋转。
## 技术解决主义?
我知道,在这里讨论这个可能有些奇怪,但请听我说完。我意识到这是一个针对社会问题的技术解决方案,而这个问题本身又被技术所放大。
我不想推崇技术解决主义,也不想让人们产生虚假的安全感。这仍然是一种不完美的方法,而且可能永远都会如此。仅仅因为现在有了这个应用,并不意味着一切就都好了。我们需要更好的解决方案来遏制监控技术和隐私侵犯。
## 从源码构建
由于 *Nearby Glasses* 是开源的,你也可以从源代码自行构建应用。这样可以确保 APK 中没有包含其他库,你得到的就是你想要的东西。
请注意,此应用基于以下内容构建:
- Gradle Wrapper: 9.3.1
- Android Gradle Plugin: 8.13.2
- Kotlin: 1.9.22
- compileSdk: 36
- targetSdk: 36
- minSdk: 26
- 无产品风味
- 仓库:仅 google() 和 mavenCentral()
- 无 Google Services 或 Firebase 插件
### 要求
- **JDK 17**(必需 — 项目目标为 Java 17)
- 已安装 **Android SDK Platform 35**
- compileSdk = 35
- targetSdk = 35
- Git
### 逐步构建 APK
```bash
#Verify Java version:
$java -version
#It must report Java 17.
#Get the source code
$git clone https://github.com/yjeanrenaud/yj_nearbyglasses
$cd yj_nearbyglasses
#Build Debug
$./gradlew clean assembleDebug
#Build Release (with your own signature cert)
$./gradlew clean assembleRelease
#Build unsigned Release for IzzyOnDroid / F-Droid
$./gradlew clean izziFdroid
#Run and Test
$./gradlew test lint
```
## 致谢
- [@[email protected]](https://social.tchncs.de/@vfrmedia) 帮助我处理警告
- [@[email protected]](https://meow.social/@mewsleah) 提出了金丝雀模式的想法
- [@pojntfx](https://github.com/pojntfx) 指出了我在许可方面的误解
- [Sarah-Jane B.](https://www.linkedin.com/in/sarah-janeb/) 提供的 UX 设计建议
- Lena Radau 提供的西班牙语翻译
- Marcel L. 提供的反馈以及对 iOS 应用的测试
- Lena Hansen 进行的实地测试
- 以及所有已经为应用提供反馈的人!
## 许可证与致谢
**应用图标**:该图标基于 <a href="https://www.svgrepo.com/svg/434090/glasses" title="Glasses SVG Vector">Glasses SVG Vector by sensa, licensed under CC0 1.0 Universal</a>。<br/><br/><br/>
**许可证**:本应用 *Nearby Glasses* 依据 [AGPL-3.0 许可证](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/LICENSE) 授权。<br/>
**金丝雀**:金丝雀图案由我绘制,并依据 [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) 授权。我以原始 svg 文件形式提供(使用 [InkScape](https://inkscape.org/) 制作),并显然为应用的资源将其转换为 xml<br/>