アップデート一覧に戻る
New releaseSep 7, 2026

yj_nearbyglasses v1.0.10

近くのスマートグラスを検出しようと試み、警告します。

共有

yj_nearbyglasses

近くにあるスマートグラスを検出して警告しようとする試み。

⚠ 警告! ⚠

nearby-glasses-alert.pages.dev は私のプロジェクトとは無関係です。Play Store や App Store にある多くのアプリは Nearby Glasses と見た目が似ていたり、同じような名前だったりします。それらは名前を乗っ取り、そこから手っ取り早く利益を得ようとしているようです。AGPL ライセンスに従っておらず、何も提供していません。私はこれらを推奨しません。

Screenshot Nearby Glasses classic Screenshot Nearby Glasses canary mode

⚠ 警告! ⚠

相手が隠し撮り用の監視デバイスを身につけていると思い込んで嫌がらせをすることは、刑事犯罪になり得ます。それは、そのようなデバイスを使用するよりもさらに深刻な犯罪である可能性もあります。この件については、お住まいの地域の法律について法的助言を求めてください。

⚠ 誰に対しても嫌がらせをしないでください ⚠


Nearby Glasses

Nearby Glasses というこのアプリには、ただ一つの目的があります。近くにあるスマートグラスを探して、あなたに警告することです。

Get It On Google Play Get it at IzzyOnDroid Get it on Obtainium Download on the App Store

目次

このアプリは、近くにスマートグラスがあると通知します。スマートグラスから送信される Bluetooth データ内の企業識別子を利用しています。そのため、誤検出(例えば VR ヘッドセットによるもの)が発生する可能性があります。したがって、近くにいるメガネをかけている人に近づく際は注意してください。このアプリの警告にもかかわらず、それは単なる普通のメガネかもしれません。

このアプリの作者 Yves Jeanrenaud は、このアプリおよびその機能について一切の責任を負いません。自己責任で使用してください。技術的な設計上、Bluetooth LE デバイスの検出が期待どおりに動作しないこともあります。私は卒業した開発者ではありません。これはすべて、私の自由時間に、自分で学んだ知識で書かれたものです。
誤検出は起こり得ます。 つまり、Nearby Glasses アプリは、実際には同じメーカーの VR ヘッドセットやその企業系列の別製品しかない場合でも、近くにスマートグラスがあると通知する可能性があります。また、近くにあるスマートグラスを見逃すこともあります。繰り返します。私はプロの開発者ではありません。
しかし、このアプリは無料かつオープンソースであり、コードを確認し、変更し、再利用することができます(ライセンスの下で)。
Nearby Glasses アプリは、あなたに関する詳細を保存したり、あなたやあなたの携帯電話に関する情報を収集したりしません。テレメトリも広告も、その他の迷惑なものもありません。Play Store 経由でアプリをインストールした場合、Google はあなたについて何らかの情報を知り、いくつかの統計を収集するかもしれません。しかし、アプリ自体は何も収集しません。
ログファイルを保存(エクスポート)することを選択した場合、それは完全にあなたの判断と、そのデータがどこへ行くかについてのあなたの責任です。ログはローカルにのみ記録され、誰かと自動的に共有されることはありません。ログに含まれる機微なデータはごくわずかで、実際には、遭遇した BLE デバイスのメーカー ID コードのみです。

細心の注意を払って使用してください! 前述のとおり、検出されたスマートグラスが本当に近くにあるという保証はありません。技術的に(BLE adv レベルで)スマートグラスに似ている別のデバイスである可能性があります。
軽率に行動しないでください。(このアプリに限らず)あらゆるメッセージに基づいて行動する前に考えてください。

なぜ?

  • スマートグラスは耐え難い侵入であり、同意を無視する、恐ろしい技術であり、すでにさまざまな、そして大量の、同じくらい本当に忌まわしい「コンテンツ」を作るために使われていると私は考えているからです。1、2
  • 一部のスマートグラスには、録画中であることを示す小さな LED があります。しかし、これは簡単に無効化でき、メーカーはそれを防ぐと主張しながらも、一切の責任を負いません(技術は何十年も前からそういう傾向があります)。3
  • スマートグラスは以前にも即時顔認識に使われており4、報道によれば、箱から出してすぐに使えるようになるでしょう5。これは多くの人を危険にさらします。
  • それらのデータは AI のトレーニングに使われており、つまり、人々が録画を精査し、おそらく最も親密な洞察を見ることになるでしょう6
  • このアプリが誰かの役に立つことを願っています。

どのように?

  • これはかなりヒューリスティックな、シンプルなアプローチです。BLE はランダム化された MAC を使用し、OSSID は安定しておらず、サービスアナウンスの UUID も安定していないため、Bluetooth ビーコンを単純にスキャンするだけではいけません。さらに事態を悪化させることに、例えば Meta のようないくつかは独自の Bluetooth サービスを使用しており、UUID は永続的ではないため、今のところは通信されるデバイス名に頼るしかありません。
  • 現在の最も実行可能なアプローチは、Bluetooth SIG assigned numbers repoから来ています。これに従うと、メーカー企業の名前は 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 assigned numbers repo](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/www.bluetooth.com/specifications/assigned-numbers)によると、以下の企業IDを使用できます:
  - `0x01AB` は `Meta Platforms, Inc. (formerly 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を製造)用
  これらは**不変かつ必須**です。もちろん、Metaや他のメーカーもBluetoothを搭載した他の製品(例:VRヘッドセット)を持っているため、それらのIDも存在します。したがって、アプリのスキャンプロセスにこれらの企業IDコードを使用すると、誤検知が発生しやすくなります。しかし、周囲にOculus Riftを装着している人が見当たらず、隠れられる建物もない場合、スマートグラスである可能性が高いです。
- ペアリング中、スマートグラスは通常製品名を発信するため、それもスキャンできます。ただし、実際の現場でそれを見ることは稀です。バー、パブ、路上などでスマートグラスを使用する意図のある人は、通常事前に準備しています。
- アプリが十分な信号強度(下記のRSI参照)を持つBluetooth Low Energy(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の略です。この値は、無線通信アプリケーションの受信電界強度の指標です。[Wikipediaにかなり良い記事があります](https://en.wikipedia.org/wiki/Received_signal_strength_indicator)。
要するに、RSSIは主に以下に依存します:<br/>
  - デバイスの送信電力
  - アンテナ設計
  - 壁や障害物
  - 人体による信号の吸収
  - 反射と干渉
  - デバイスの向き<br/>
しかし、典型的なBLE(Bluetooth Low Energy)シナリオでは、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**を16進値の文字列として入力することもできます(例:`0x01AB,0x058E,0x0D53`)。これにより組み込みの検出が上書きされ、新しい値に対して通知が表示されます。
- より良い永続性のために、Androidの*Foreground Service*を使用します。必要ない場合は*設定*で無効にできます。
- *設定*の*通知クールダウン*は、2つの警告の間に経過しなければならない時間を指定します。デフォルトは10000 ms、つまり10秒です。これはカナリアにも適用され、例えば10秒は、再び落ち着くまで10秒間警戒し続けることを意味します。
- よりローカライズされました:<img src="https://raw.githubusercontent.com/yjeanrenaud/yj_nearbyglasses/HEAD/img/canary_hide.svg" align="right" alt="Drawing of a canary that hides underneath a wing" 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
- ついに、3週間後、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は[リリース](https://github.com/yjeanrenaud/yj_nearbyglasses/releases)で入手できます。
  iOSアプリはバックグラウンドで動作しません。iOSの制限により、BTLE ADVを永続的にスキャンするために`ForegroundServices`に似たものを使用する可能性が見つからなかったためです。したがって、iOSの*Nearby Glasses*では*カナリアモード*のみが利用可能です。私よりSwiftとiOSに詳しい方(その可能性は高いです)は、ぜひ貢献してください!
- このリポジトリにはAndroidとiOSの両方のアプリコードが含まれているため、フォルダを再編成しました。したがって、[/iOS](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/iOS)と[/Android](https://github.com/yjeanrenaud/yj_nearbyglasses/blob/main/Android)があります。

## 使用方法

- ダウンロードするAPKについては[リリース](https://github.com/yjeanrenaud/yj_nearbyglasses/releases)を参照するか、Google Play Storeを使用してください。F-DroidやAccrescentも後に続く可能性があります。
<img width="135" height="300" align ="right" alt="Screenshot Nearby Glasses: Settings" 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. アプリをインストールし(今のところ[リリース](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. *スキャン開始*ボタンを押します
3. Bluetoothを有効にする(まだ有効になっていない場合)ため、および近くのデバイスにアクセスするための権限を付与します。一部のAndroidバージョンでは、位置情報へのアクセス権限も付与する必要があります(主にバージョン13以前)。*Nearby Glasses*はあなたの位置情報を一切使用しません。信じられない場合は、[コード](https://github.com/yjeanrenaud/yj_nearbyglasses/tree/main/app)をご覧ください
4. スキャンが開始されない場合は、お使いの特定のスマートフォンの*設定*メニューで*Foreground Service*を有効にする必要があるかもしれません(下記参照)
5. 準備完了です!スマートグラスが近くで検出されると、通知が表示されます。*スキャン停止*を押すか、アプリを完全に終了するまで表示され続けます
7. メニュー(右上の歯車)で、いくつかの*設定*を行えます:
   1. *Foreground Serviceを有効にする*:これにより、Androidがアプリを一時停止して通知できなくなるのを防ぎます。有効のままにすることをお勧めします
   2. *RSSIしきい値*:この負の数は、*Nearby Glasses*によるアラートの理由となるデバイスの距離を指定します。技術的には、信号がどれだけ強く受信されるかを示します。ゼロに近いほど信号が良く、スマートフォンとスマートグラスの距離が短いことを意味します。説明とガイダンスについては[上記のRSSI](#how)を参照してください。-75のままにすることをお勧めします
   3. *通知を有効にする*:これを無効にしたくないでしょう
   4. カナリアモード。これが新しいデフォルトです。これにより、近くのスマートグラスを知らせるシステム通知は表示されず、代わりに周囲にスマートグラスがないことを示すカナリアが表示されます。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. *通知/カナリアクールダウン*:ここで、近くで見つかったスマートグラスに関する通知をいくつ受け取るか、またはカナリアがどれだけ隠れるべきかを指定します。デフォルト値として10秒(10000 ms)を選択しました。このようにして、通知を見逃すことなく、同時にあまり煩わされたり、バッテリーを早く消耗したりすることはありません
   6. *ログ表示を有効にする*:これを無効にするとバッテリーを節約できるかもしれません。カナリアモードでは無効になっています。
   7. *デバッグ*:ログ表示フレームで一致するBLEフレーム以上のものを表示するために必要です。物事が機能しているかを確認するのに役立ちます。カナリアモードでは無効になっています。
   8. *最大ログ行数*:ログがどれだけ長くなるか。200はバッテリー寿命とログの使いやすさ(私のようなオタクにとって)の間の良いバランスのようです。カナリアモードでは無効になっています。
   9. *BLE ADVのみ*:読みやすさのために他のBluetooth LEフレームをログから除外します。カナリアモードでは無効になっています。
   10. *企業IDを上書き*:必要に応じて、上記で指定された以外のデバイスについて*Nearby Glasses*に通知させることができます。少なくとも私にとってはデバッグに役立ちます。必要ない場合や使い方がわからない場合は空のままにしてください
   11. すべての設定は保存され、すぐに有効になります。戻るには、戻るボタンまたはジェスチャーを使用してください
8. エクスポート機能により、アプリのログのテキストファイルを共有できます。私のようなオタクのために
9. ログ表示フレームをタップしてログをコピー&ペーストすることもできます

## ToDo
- **実際の現場で動作するようになりました!** 検証済みのスマートグラスを周囲に持つ何人かの人にテストしてもらうことができました。Lenaに特別な感謝を!
- ダウンロードするAPKについては[リリース](https://github.com/yjeanrenaud/yj_nearbyglasses/releases)を参照してください。
- [*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)で常に公開します。

---

- 誤検知を無視リストに設定するオプションを追加する。おそらく通知で?
- 私はBTやAndroidの専門家では全くありません。私が学んだことによると、BLEトラフィックをスニッフィングすることでスマートグラスの通信をより深く掘り下げることもできます。そうすることで、デバイスがBT仕様に従って動作することに依存する必要がなくなり、誤検知が少ない暗号化されたトラフィック送信にヒューリスティックを使用できる可能性があります。しかし、私は10年以上BTトラフィックパケットを調べていません。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] 警告への対応を手伝ってくれて
  • @[email protected] カナリアモードのアイデアを指摘してくれて
  • @pojntfx ライセンスに関する私の誤解を指摘してくれて
  • Sarah-Jane B. UXデザインのヒントをくれて
  • Lena Radau スペイン語への翻訳をしてくれて
  • Marcel L. フィードバックとiOSアプリのテストをしてくれて
  • Lena Hansen フィールドテストをしてくれて
  • そしてすでにアプリにフィードバックをくれたすべての人々!

ライセンスとクレジット

アプリアイコン: アイコンは Glasses SVG Vector by sensa, licensed under CC0 1.0 Universal を基にしています。


ライセンス: このアプリ Nearby Glasses は AGPL-3.0 license の下でライセンスされています。
カナリア: カナリアのイラストは私が制作し、CC BY-SA 4.0 の下でライセンスされています。これらは生のsvgファイル(InkScapeで作成)として提供し、アプリのリソース用に、当然ながらxmlに変換しました

カテゴリ