文档

Favorites 安卓书签导航器 开发文档

这个项目是什么

Favorites(安卓书签导航器)是一个轻量的 Android 书签管理 + 多标签浏览器应用:首页是可折叠分类的书签导航页,点开书签在内置多标签 WebView 里浏览,支持从浏览器 HTML 书签文件导入、WebDAV 备份恢复。定位是「自建导航页的手机端」——把你在电脑浏览器里收藏的一堆网址搬到手机上,分类清楚、打开即用。

技术栈与架构

项 值
语言 Kotlin
最低 API 24(Android 7.0),target/compile SDK 35
构建 Gradle 8.5(仓库带 gradlew),Java 17
UI 原生 View + 自定义 Drawable,Material Design 卡片风格,ViewBinding 开启
存储 SharedPreferences,书签以 JSON 序列化存本地
浏览 多实例独立 WebView(每标签页一个实例,切换不刷新)

依赖只有官方库:androidx.core:core-ktx、androidx.appcompat、com.google.android.material、androidx.constraintlayout、androidx.webkit,无第三方网络/图片库,包很小。

架构上是单 Activity:所有逻辑集中在 app/src/main/java/com/hermes/app/MainActivity.kt(约 54KB 一个文件),布局只有一个 res/layout/activity_main.xml,书签分类、导入解析、WebDAV 同步、WebView 标签管理都在这一个类里完成。应用 applicationId 为 com.hermes.app。

仓库结构

├── app/
│   ├── build.gradle.kts        # 应用模块构建配置(SDK、签名、混淆、依赖)
│   └── src/main/
│       ├── java/com/hermes/app/MainActivity.kt   # 全部业务逻辑
│       ├── res/layout/activity_main.xml          # 唯一布局
│       ├── res/drawable|values|mipmap-*          # 图标、颜色、样式
│       └── AndroidManifest.xml                   # 权限与 Activity 声明
├── build.gradle.kts / settings.gradle.kts / gradle.properties  # 工程级构建配置
├── gradle/ / gradlew                               # Gradle Wrapper
├── build-apk.sh                                    # 一键构建脚本(自动升版本号)
├── VERSION                                         # 版本计数文件(当前 46)
├── favorites.apk                                  # 预构建 APK(可直接安装)
└── README.md

权限说明

AndroidManifest.xml 声明的权限:INTERNET、ACCESS_NETWORK_STATE、RECORD_AUDIO、MODIFY_AUDIO_SETTINGS(后两项与 WebView 内网页的音视频能力相关),并开启 usesCleartextTraffic(允许 http 站点)。应用只有一个导出的 launcher Activity。

本地开发环境

标准 Android 工程,用 Android Studio 直接打开根目录即可同步、运行。命令行构建需要本机有 Android SDK 与 JDK 17:

git clone <仓库地址>
cd android-favorites
./gradlew :app:assembleDebug    # 调试包

构建与发布

仓库自带一键脚本 build-apk.sh,它做的事:

  1. 读根目录 VERSION(当前 46),算出下一版本号;
  2. 用 sed 把 app/build.gradle.kts 里的 versionCode 改成下一号、versionName 改成 1.0.<N>;
  3. 调 /opt/gradle-8.5/bin/gradle --no-daemon :app:assembleRelease 构建 release 包;
  4. 把 app/build/outputs/apk/release/app-release.apk 复制为输出目录里的 favorites_v<N>.apk,并把新版本号写回 VERSION。
bash build-apk.sh

换机器构建要改脚本里的三处硬编码:ANDROID_HOME/ANDROID_SDK_ROOT(脚本写的 /opt/android-sdk)、JAVA_HOME(脚本写的 /usr/lib/jvm/java-17-openjdk-amd64)、OUTPUT_DIR(脚本写的 /vol2/1000/HD2/APK,README 也注明需按自己的环境修改),以及 Gradle 可执行路径 /opt/gradle-8.5/bin/gradle。

配置项说明

工程没有运行时配置文件,可调项都在 app/build.gradle.kts:

键 含义 当前值
applicationId / namespace 包名 com.hermes.app
minSdk / targetSdk / compileSdk API 范围 24 / 35 / 35
versionCode / versionName 版本(由 build-apk.sh 自动递增) 46 / 1.0.46
signingConfigs.release release 签名,引用工程根目录的 keystore 文件 构建 release 需自备 keystore
isMinifyEnabled / isShrinkResources release 混淆与资源压缩 均为 true
debug 包 applicationIdSuffix = ".debug",可与正式版共存 —

注意:release 签名配置引用工程根目录下的 keystore(hermes.keystore),仓库里若没有该文件需自行生成一份并替换 storeFile/alias/密码配置,不要把真实签名口令提交进仓库。

二次开发要点

相关链接