Amethyst:把 Nostr 协议带到 Android 與桌面端
專案速覽:適用於 Android 的 Nostr 用戶端。適用於 Android 的 Amethyst Nostr 用戶端 加入您控制的社群網路。
秒懂
- 它是什麼?
- Amethyst 是 Kotlin 編寫的 Nostr 客户端,覆盖 Android、桌面發行版和共享庫。本文重点看它的安装渠道、协议支持、籤名校驗與多平台取舍。
- 適合誰用?
- 适合想在 Android 或桌面端使用 Nostr、並愿意管理 relay 與密钥的用户;只需协议庫的人應先比较 Quartz。侧载前先用 `apksigner` 核对官方 SHA-256 指纹,再安装 v1.14.0。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫在最近一天內有新的提交。
- 用什麼語言寫的?
- 主要是 Kotlin(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
Amethyst 是一個什么樣的項目? · vitorpamplona-amethyst-deep-analysis
Amethyst 在倉庫描述中被稱為"Android 的 Nostr 客户端",在 README 中则將其描述為"加入你控制的社交網络"。该項目用 Kotlin 編寫,並在倉庫中描述為分為几個模块:Amethyst,用 Kotlin 和 Jetpack Compose 編寫的原生 Android 應用;Quartz,一個 Kotlin 多平台庫,包含共享的 Nostr 协议類;Commons,一個 Kotlin 多平台模块,包含共享的 UI 組件;以及 DesktopApp,一個 Compose Multiplatform 桌面應用,复用 Commons 和 Quartz。因此,虽然項目的重点显然是安卓,但该倉庫也包含了桌面應用和共享庫組件。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
下载和安装方式 · vitorpamplona-amethyst-deep-analysis
README 列出了 Android 和桌面版本的下载选項。Android 用户可以通過 Zap Store、Obtainium、GitHub Releases 和 Google Play 安装该應用。桌面版本支持 macOS(Apple Silicon 和 Intel,通過 Homebrew 使用 `brew install --cask amethyst-nostr`,或直接下载 .dmg 文件)、Windows 10/11(通過 `winget install VitorPamplona.Amethyst` 或 .msi/.zip 文件)以及 Linux(.deb、.rpm、AppImage 和 .tar.gz 文件)。README 還提到 Windows 的 Scoop 和 Arch Linux 的 AUR 支持"即將推出(单独 PR)"。構建說明可在 BUILDING.md 中找到。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
驗證 APK 籤名 · vitorpamplona-amethyst-deep-analysis
对于通過 sideload 方式安装的應用,README 提供了驗證 APK 籤名的方法。它列出了官方發布密钥的 SHA-256 指纹:C2:D0:AA:86:BC:B6:B6:20:90:56:1A:41:BB:E3:36:E9:8B:78:C2:D0:21:0A:49:8D:C8:85:F2:8E:13:48:CF:17。用户可以使用 `apksigner verify --print-certs amethyst-*.apk` 或 `keytool -printcert -jarfile amethyst-*.apk` 命令,或使用 AppVerifier 應用來确认此指纹。README 稱所有官方 APK,包括 googleplay 和 fdroid 版本,都使用相同的證书籤名。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
支持的功能和隐私說明 · vitorpamplona-amethyst-deep-analysis
README 包含一個大型清单,列出了與 Nostr 协议實現相關的功能,標记為與 NIP-01 至 NIP-BE 等相關的已完成或未完成功能,以及诸如推送通知、應用内翻译、多账户和二维码登录等功能。部分功能被標记為未完成,例如"MLS 协议 (NIP-EE)"、"本地數據庫"和"工作區"。README 還包含一個"隐私與信息永久性"部分,指出中继服務器会知道你的 IP 地址、公钥和聯系人,並且可以讀取你的大部分操作,但私有 Zap 和私有 DM 除外。它建议使用 VPN 或 Tor 來掩盖 IP 地址,並警告内容一旦發布就可能永久存在。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
應用架構 · vitorpamplona-amethyst-deep-analysis
README 描述了一种分為 UI、服務层和模型/存儲庫层的架構。UI 使用標准的 State/ViewModel/Composition 模式。服務层連接 Nostr 中继,組装過滤器,接收數據並將其發送到存儲庫。模型/存儲庫层將所有 Nostr 对象保存在内存中,形成一個完整的面向对象图,將事件存儲為笔记和用户,並使用 LiveData 和 Flow 对象來订阅更改。README 指出,中继連接在應用使用期間不会關閉,並且"永远不会有两個具有相同 ID 的笔记,也不会有两個具有相同公钥的用户實例"。它补充說,用户的私钥/公钥存儲在 Android KeyStore 中。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
構建、測試和發布 · vitorpamplona-amethyst-deep-analysis
開發部分列出了構建和測試命令:`./gradlew assembleDebug` 用于構建 Android 應用,`./gradlew :desktopApp:run` 用于運行桌面應用,`./gradlew build` 用于完整構建,`./gradlew test` 和 `./gradlew connectedAndroidTest` 用于測試,`./gradlew spotlessCheck` 和 `./gradlew spotlessApply` 用于代码檢查。它還提到了構建先决条件,如 Java 21+、Android Studio 和 Android 8.0+ 設備或模拟器。对于發布,README 描述為"發布只需推送一個標籤",並指向 BUILDING.md 和 RELEASE_OPS.md 以獲取详细說明。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
Quartz 庫和許可證 · vitorpamplona-amethyst-deep-analysis
README 將 Quartz 描述為"用于跨平台共享协议類的 Nostr-commons KMP 庫",並提供了安装說明,從 Maven Central 添加 `com.vitorpamplona.quartz:quartz:1.13.1`,或使用 JitPack 獲取快照版本。它包含创建 KeyPair、籤名者、NostrClient 以及订阅请求的代码示例,並包含一個功能对比表,比较 Android/JVM 與 iOS 的支持情况。该倉庫根據 MIT 許可證分發,该許可證授予使用、复制、修改、合並、發布、分發、再許可和/或出售軟件副本的權利,但提供"按現状"的軟件,不附带任何明示或暗示的保證。该許可證未說明任何安全保證、支持承诺或具體的生產就绪程度。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。 vitorpamplona-amethyst-deep-analysis 的判斷不能脫離專案本身。應把 README 提到的入口、設定鍵與輸出格式放進最小可行案例,記錄成功與失敗的差異;若文件未說明某項行為,就把它列為未知,而不是推定預設值。這對依賴版本、作業系統、模型、瀏覽器或 Android 執行環境的功能尤其重要。
編輯結論
适合想在 Android 或桌面端使用 Nostr、並愿意管理 relay 與密钥的用户;只需协议庫的人應先比较 Quartz。侧载前先用 `apksigner` 核对官方 SHA-256 指纹,再安装 v1.14.0。 對 vitorpamplona-amethyst-deep-analysis 而言,先在隔離環境執行 README 指定的安裝或啟動命令,觀察實際輸出、錯誤訊息與設定檔,再決定是否納入正式流程。
社群筆記