在 Android 上无广告、无浏览器跳转地搜索种子

通过浏览器在手机上搜索种子可不是什么轻松的体验。你打开一个网站,点击搜索栏,就会立即被重定向到五个页面的赌场、横幅广告和可疑的 APK。等你关掉所有标签页,终于找到梦寐以求的磁力链接时,下载任何东西的欲望早已消失殆尽。
最近偶然发现了开发者 prajwalch 的 TorrentSearch 仓库。这是一个简洁的 Android 客户端,可同时在数十个追踪器上搜索。这个项目不仅实用,而且清晰地展示了如何使用 Kotlin 和 Jetpack Compose 构建现代移动应用。
这个应用能做什么
TorrentSearch 作为一个元搜索引擎使用。它同时向多个追踪器发送查询请求,解析响应结果,并在统一的列表中展示所有内容,同时支持过滤功能。应用本身不下载也不做种——没有内置的种子客户端。相反,它会将可直接使用的磁力链接或 .torrent 文件移交给用户喜欢的下载器,比如 LibreTorrent 或 Flud。
流式结果和过滤
通常,元搜索引擎会等待所有数据源响应后才显示结果。而这里,结果是异步流式返回的。一旦第一个网站返回数据,卡片就会立即出现在屏幕上。
列表一目了然地展示所有必要信息:
- 做种数和下载人数
- 精确的文件大小
- 发布时间
- 种子来源
- 内容分类
可以一键过滤掉没有做种者的种子,这样就不会在死种上浪费时间。还内置了按大小、日期或做种数排序的选项。
无 WebView 的原生详情屏幕
大多数类似的工具会在嵌入式浏览器中打开种子页面,顺带收集所有追踪器的广告。而在 TorrentSearch 中,页面解析在应用内部完成。
你打开一张卡片,看到的是一个干净的原生界面,包含海报、截图、描述和技术数据。如果描述中包含图片,它们会直接渲染在布局中。对于成人内容海报,会自动应用模糊处理,如有需要可以在设置中关闭。
支持家庭服务器的 Torznab
如果内置的提供者不够用,你可以通过 Torznab API 连接自己的索引器。应用可以无缝连接到 Jackett、Prowlarr 或其他家庭媒体服务器生态中的服务。这解决了直接从手机访问私有追踪器的问题。
书签和导出
喜欢的种子可以保存到书签。书签数据库通过 JSON 格式导出和导入,换手机时轻松转移列表。
内部架构概览
对于 Android 开发者来说,这个仓库主要价值在于其代码库。项目遵循 Google 的现代应用架构指南,并采用 MIT 许可证完全开源。
项目技术栈:
- 语言:Kotlin
- UI:Jetpack Compose 配合 Material 3 和动态系统颜色支持
- 网络请求:Ktor Client
- HTML 解析:Jsoup
- 本地数据:Room 和 Jetpack DataStore
- 依赖注入:Hilt
- 异步处理:Kotlin Coroutines 和 Flow
- 图片加载:Coil
代码非常干净,没有乱七八糟的变通方案。向公共追踪器发出的网络请求使用 Jsoup 和 Ktor 解析,结果通过 Flow 流式传输到 UI。这使得 Compose 界面在新数据批次到达时能够平滑更新。
如何在本地构建项目
构建不需要什么特殊技巧。只需在 Android Studio 中打开文件夹,或通过终端构建 APK 即可。
构建前需要准备:
- JDK 17 或更高版本
- 已安装 Android SDK
克隆仓库并启动调试构建:
git clone https://github.com/prajwalch/TorrentSearch.git
cd TorrentSearch
./gradlew assembleDebug
构建完成后,APK 会出现在 app/build/outputs/apk/debug/。
如果觉得编译太麻烦,项目在 F-Droid、IzzyOnDroid 和 GitHub releases 页面都有官方发布版本。需要 Android 7.1 或更高版本。
适用人群
TorrentSearch 同时解决了两个问题。对于普通用户,它提供了一个快速搜索种子的工具,没有侵入性广告和垃圾信息。
对于 Android 开发者来说,这是一个优秀的现代开源 Compose 应用示例。这里你可以看到如何组织模块化架构、设置多个网络源的流式处理,以及优雅地实现 Material You 主题定制。有空可以探索一下这个项目,或者在手机上安装 APK 试试。
相关项目