搜它 是一款使用 Kotlin 和 XML Views 编写的轻量级原生安卓搜索启动器。当前只构建 arm64-v8a APK,最低支持 Android 8.0(API 26)。
- 配置搜索项的主链接和备用链接
- 新增、编辑、隐藏、删除及拖拽排序搜索项
- 设置页分为“搜索项”和“应用设置”,避免配置开关与长列表混在一起
- 支持内置图标、已安装应用图标、相册图片、首字图标和网络图片
- 网络图片首次加载成功后缓存到本地
- 搜索历史按日期分组,可折叠、单独删除、按天清空或全部清空
- 可选用 Shizuku 自动恢复被禁用、暂停或冻结的应用
- 搜索项、设置和历史记录均保存在设备本地
native-android/:Kotlin 原生 Android 项目,使用 XML Views 和 ViewBindingnative-android/app/src/main/assets/builtin-icons/:自动扫描的内置图片图标目录.toolchains/:项目本地 JDK、Android SDK 和构建缓存,仅提交目录说明setup-dev.ps1:Windows 开发环境一键初始化脚本build-debug.bat:无需发布签名的 Debug APK 构建入口install-debug.bat:构建并安装 Debug 测试版到 USB 设备build-native.bat:使用私有签名构建 Release APKinstall-native.bat:安装已构建的 Release APK 到 USB 设备.github/workflows/android-release.yml:推送main后自动构建和发布
进行 Android 开发时,请使用 Android Studio 打开 native-android/,不要把仓库根目录当作 Android 工程打开。
- Windows 10 或 Windows 11,64 位
- PowerShell 5.1 或更高版本
- 可访问 Adoptium、Google Android 仓库和 Gradle 下载服务的网络
- 首次初始化及依赖下载建议预留约 2 GB 磁盘空间
不需要预先安装 Node.js、Expo、Android Studio、JDK 或 Android SDK。命令行开发所需的 JDK 17 和 Android SDK 35 可以由项目脚本下载到 .toolchains/。
git clone git@github.com:yc-2018/i-find.git
cd i-find没有配置 GitHub SSH Key 时,也可以使用 HTTPS:
git clone https://github.com/yc-2018/i-find.git
cd i-find在仓库根目录执行:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\setup-dev.ps1脚本会自动完成:
- 下载并解压 JDK 17 到
.toolchains/jdk17/。 - 下载 Android SDK 命令行工具到
.toolchains/android-sdk/。 - 接受 Android SDK 许可证并安装 Platform Tools、API 35 和 Build Tools 35.0.0。
- 生成已被 Git 忽略的
native-android/local.properties。
下载中断时可以直接重新运行。需要彻底重装时执行:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\setup-dev.ps1 -Force.toolchains/ 中除 说明文件 外的所有内容均被 Git 忽略,不需要也不应该上传。
普通开发和 fork 测试不需要原作者的签名文件或 GitHub Secrets:
.\build-local.ps1 -Debug也可以双击:
build-debug.bat
生成文件位于:
builds/i-find-native-arm64-v8a-debug.apk
Debug 版包名为 com.cgl.ifind.debug,可以和正式版同时安装。
连接已开启 USB 调试并完成授权的安卓手机后,可以直接构建并安装 Debug 测试版:
.\build-local.ps1 -Debug -Install也可以双击:
install-debug.bat
把图片直接放入以下目录即可:
native-android/app/src/main/assets/builtin-icons/
支持 .png、.webp、.jpg、.jpeg 和 .svg。应用构建后会自动扫描该目录,并在内置图标选择器中以每行五个图标显示。
可以直接使用文件名,也可以在文件名前加“数字 + 下划线”控制排序,例如:
100_zhihu.webp
500_weibo.svg
douban.png
编号按整数比较,不按文字逐位比较,因此 100_ 会排在 500_ 前面。没有编号的文件统一排在所有编号文件之后,再按文件名排序。
数字前缀只负责排序,不会保存到搜索项数据。100_zhihu.webp 对应的稳定 iconValue 是 zhihu.webp;以后改成 300_zhihu.webp 只会改变显示顺序,已经安装的 App 仍能读取原图标。编号后面的文件名必须保持唯一。
不需要编辑 Kotlin 映射、不需要 JSON 配置,也不会在图标选择器中显示文件名或额外文字。建议使用简短的英文小写名称以方便跨平台维护。
内置图标只接受上述文件名 Key,不再维护 asset:*、builtin:* 或 mdi:* 等逐项别名映射;无法找到文件时会显示默认搜索图标。
希望通过图形界面开发时,可以安装最新版 Android Studio,并按以下方式打开项目:
- 先运行
setup-dev.ps1,或者自行安装 JDK 17、Android SDK Platform 35 和 Build Tools 35.0.0。 - 在 Android Studio 中选择 Open,打开仓库内的
native-android/。 - Gradle JDK 选择 JDK 17;使用脚本初始化时路径为
.toolchains/jdk17/。 - 等待 Gradle 同步完成,选择
app配置后连接真机运行。
在 Settings -> Build, Execution, Deployment -> Build Tools -> Gradle 中,各目录应这样选择:
| 设置项 | 推荐值 |
|---|---|
| 项目根目录 | <仓库目录>\native-android |
| Gradle 项目文件 | <仓库目录>\native-android\settings.gradle.kts |
| Gradle 用户主目录 | <仓库目录>\.toolchains\gradle-user-home |
| Gradle 分发 | 使用项目的 Gradle Wrapper |
| Gradle JVM | <仓库目录>\.toolchains\jdk17 |
| Android SDK | <仓库目录>\.toolchains\android-sdk |
Gradle 用户主目录用于保存 Gradle 下载文件和依赖缓存。也可以保留 IDEA 默认的 C:\Users\用户名\.gradle,但会和项目本地缓存分别占用空间并可能重复下载依赖。
不要把 native-android/.gradle 选为 Gradle 用户主目录。它只是当前 Android 工程自动生成的项目级缓存目录,可以随时重新生成,并且已被 Git 忽略。
如果使用自己安装的 Android SDK,请在不提交的 native-android/local.properties 中写入:
sdk.dir=C:/Users/your-name/AppData/Local/Android/SdkmacOS 或 Linux 用户需要自行安装 JDK 17 和 Android SDK 35,然后在 native-android/ 中运行:
./gradlew assembleDebugRelease 构建用于升级正式安装版本,必须由发布者使用自己的私有签名。fork 项目不需要、也无法获得本仓库的 Release 私钥。
本地 Release 构建需要:
android/keystores/release.keystore
credentials.json
可以将 credentials.example.json 复制为 credentials.json,再填写自己的签名信息。签名文件可使用 JDK 自带的 keytool 创建,例如:
New-Item -ItemType Directory -Force .\android\keystores
& .\.toolchains\jdk17\bin\keytool.exe -genkeypair -v -keystore .\android\keystores\release.keystore -alias ifind -keyalg RSA -keysize 2048 -validity 10000
Copy-Item .\credentials.example.json .\credentials.json请妥善保存 keystore、别名和密码。丢失原签名后,无法通过覆盖安装升级原应用。
配置完成后执行:
.\build-local.ps1或双击 build-native.bat。生成文件位于:
builds/i-find-native-arm64-v8a-release.apk
credentials.json、*.keystore、APK、.toolchains/ 实际工具文件和构建目录均已被 Git 忽略。
手机开启开发者选项和 USB 调试,连接电脑并接受授权提示后,正式版可以双击:
install-native.bat
Debug APK 可以使用以下命令安装:
.\.toolchains\android-sdk\platform-tools\adb.exe install -r .\builds\i-find-native-arm64-v8a-debug.apk推送代码到 main 分支后,GitHub Actions 工作流 会自动配置 JDK 17 和 Android SDK 35,构建签名的 arm64-v8a APK,上传 Actions Artifact,并创建 GitHub Release。
自动发布使用的签名来自本地这两个私有文件:
android/keystores/release.keystore
credentials.json
进入 GitHub 仓库的 Settings -> Secrets and variables -> Actions,在 Repository secrets 区域点击 New repository secret,依次创建以下四项:
| Secret 名称 | 填写内容 |
|---|---|
ANDROID_KEYSTORE_BASE64 |
release.keystore 文件转换后的完整 Base64 文本 |
ANDROID_KEYSTORE_PASSWORD |
credentials.json 中的 android.keystore.keystorePassword |
ANDROID_KEY_ALIAS |
credentials.json 中的 android.keystore.keyAlias |
ANDROID_KEY_PASSWORD |
credentials.json 中的 android.keystore.keyPassword |
在 Windows PowerShell 中,可以使用以下命令把 keystore 的 Base64 内容直接复制到剪贴板,不会在终端打印:
$keystore = Resolve-Path .\android\keystores\release.keystore
[Convert]::ToBase64String([IO.File]::ReadAllBytes($keystore.Path)) | Set-Clipboard执行后,将剪贴板内容粘贴为 ANDROID_KEYSTORE_BASE64 的值。
其余三个值也可以从 credentials.json 安全复制到剪贴板:
$credentials = Get-Content -Raw -Encoding UTF8 .\credentials.json | ConvertFrom-Json
# ANDROID_KEYSTORE_PASSWORD
$credentials.android.keystore.keystorePassword | Set-Clipboard
# ANDROID_KEY_ALIAS
$credentials.android.keystore.keyAlias | Set-Clipboard
# ANDROID_KEY_PASSWORD
$credentials.android.keystore.keyPassword | Set-Clipboard每次只执行需要的那一条复制命令,然后立即粘贴到对应的 GitHub Secret。保存 Secret 后,GitHub 不允许再次查看原值,只能更新或删除。
四项配置完成后,可以在仓库的 Actions 页面选择 构建并发布 Android APK,点击 Run workflow 手动测试;以后推送到 main 会自动构建并发布。
fork 不会继承原仓库的 Secrets。其他维护者如果需要自动发布,必须使用自己的 keystore 和密码重新配置以上四项;只做普通开发时直接构建 Debug APK 即可。
不要把 keystore、Base64 内容或密码写入 README、工作流、Issue、Actions 日志或 Git 历史。Base64 只是编码,不是加密。
main:当前 Kotlin 原生 Android 版本legacy:旧 Expo 和单文件 H5 版本归档
项目通过 Gradle 使用 AndroidX 和 Shizuku 等第三方依赖。第三方组件仍适用其各自的开源许可证。
部分应用搜索链接参考了 pawaovo/moment-app-configs 项目提供的 app_schemes.json,感谢原项目作者整理和公开这些配置。