面向 Android 10–17 的以图搜图应用。项目从 2016 年版 Android 工程重写为 Kotlin、Jetpack Compose 与 Material 3,应用 ID 为:
io.github.seancheng.searchbyimage
新版本与旧版包名不同,可以同时安装,但不会读取或迁移旧版数据。
- 从系统分享菜单或照片选择器接收单张图片。
- 在上传前限制尺寸、修正 EXIF 方向,并重新编码以移除位置和设备元数据。
- 原生 API 结果:trace.moe,并直接显示匹配画面缩略图;配置个人凭据后支持 SauceNAO、Lenso.ai 与 TinEye。
- Google Lens 优先调用 Google 应用的 Lens 图片分享入口,再回退到
google://lens、googleapp://lens图片契约;每次都授予单张处理后图片的临时读取权限。 - Yandex、百度、搜狗、IQDB、3D IQDB、SauceNAO 网页版与 Ascii2D 使用网页辅助模式,其中百度和搜狗是桌面式兼容页面。已确认在目标浏览器中无法可靠进入上传结果的 Bing 与 360 识图不再内置。
- 第三方网页只在 Custom Tabs 中打开;应用不包含通用 WebView 或网页脚本注入。
- 自定义搜索引擎仅允许 HTTPS multipart POST,并拒绝回环、私网和不安全跳转。
- API 凭据由 Android Keystore 的 AES-GCM 密钥加密,不备份、不记录。
- Android Studio 2026.1
- Android Gradle Plugin 9.3.1
- Gradle 9.5.0
- Kotlin 2.4.10(AGP 内置 Kotlin / Compose 编译插件)
compileSdk/targetSdk: 36minSdk: 29- Java/Kotlin 字节码目标:17
AGP 9.3 默认使用 Build Tools 36.0.0。Android Studio 自带的 JBR 25 可以运行 Gradle 9.5,无需额外安装 JDK 17。
本机还应在 SDK Manager 中安装:
- Android SDK Command-line Tools (latest)
- API 29、33、36 的 x86_64 系统镜像
- API 37 Google Play 镜像,用于 Google/Lens 交接测试
PowerShell:
$env:JAVA_HOME = 'D:\Program Files\Android\Android Studio\jbr'
./gradlew.bat testDebugUnitTest lintDebug assembleDebug
./gradlew.bat connectedDebugAndroidTest
./gradlew.bat lintRelease assembleRelease部分澎湃 OS 真机会阻止 instrumentation 从后台拉起测试 Activity,表现为测试停在 6/8 且应用仍在桌面。保持手机解锁,并在另一个终端执行一次与测试规则一致的 Intent 后即可继续:
adb shell am start -W -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10008000 -n io.github.seancheng.searchbyimage.debug/io.github.seancheng.searchbyimage.MainActivity这是厂商系统的真机测试前台限制,不影响普通安装和启动;GitHub Actions 的 Android 模拟器不需要该步骤。
local.properties 只保存本机 SDK 路径,不应提交。依赖版本集中在 gradle/libs.versions.toml,不使用动态版本。
项目仅通过 GitHub Release 分发 APK,不发布到 Google Play。Actions 只在与 versionName 匹配的 GitHub Release 发布时触发,先运行单元测试、Release Lint 和 API 29/33/36 仪器测试,再上传已签名 APK及其 SHA-256 校验文件;不生成或发布 AAB。API 37 Google Play 镜像继续用于本地 Android 17 与 Google Lens 交接验证。仓库需要配置以下 Actions Secrets:
ANDROID_SIGNING_KEYSTORE_BASE64ANDROID_SIGNING_STORE_PASSWORDANDROID_SIGNING_KEY_ALIASANDROID_SIGNING_KEY_PASSWORD
签名文件只在 Runner 临时目录中解码。对应本地环境变量为 SEARCHBYIMAGE_KEYSTORE_PATH、SEARCHBYIMAGE_STORE_PASSWORD、SEARCHBYIMAGE_KEY_ALIAS 和 SEARCHBYIMAGE_KEY_PASSWORD;四项都未设置时可生成供本机检查的未签名 Release APK,部分设置会直接让构建失败。
每次搜索只会把一张图片发送给用户明确选择的一个服务。没有自有后端、Firebase、分析、广告或 Play Billing。详细说明见 PRIVACY.md。
此仓库源自已归档的 RikkaW/SearchByImage。原始检出中没有顶层许可证文件,因此本仓库不自行推断或补写上游许可证;上游归属继续保留。
搜索引擎候选参考 dessant/search-by-image wiki,没有复制该项目的 GPL JavaScript。依赖版本及许可证见 THIRD_PARTY_NOTICES.md。