# felix-tv **Repository Path**: open-mfc/felix-tv ## Basic Information - **Project Name**: felix-tv - **Description**: 一个专为Android TV设计的导航应用,集成Mozilla GeckoView内核,项目核心代码全部由AI生成。 超安全,浏览器只能知道访问的网址,无法拦截读取任何网页内容。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-28 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 小花狗 一个专为Android TV设计的导航应用,集成Mozilla GeckoView内核,项目核心代码全部由AI生成。 ![preview.png](readmes\preview.png) ## 功能特点 ### 核心功能 - 🖥️ 专为TV界面优化,支持遥控器操作 - 🌐 集成GeckoView 85版本内核(Firefox引擎),提供更好的网页兼容性 - 🚀 独立浏览器内核,不依赖系统WebView - 💾 支持网页缓存 ### 导航功能 - 🔍 支持手动输入网址访问 - 🏠 首页快速导航 - ⬅️ 支持网页后退 - 🔄 支持页面刷新 - 📊 实时加载进度显示 ### 智能广告拦截系统 - 🛡️ 基于GeckoView扩展的智能广告拦截 - 🎯 支持目标页面白名单配置 - 🚫 拦截非标准端口广告(如 :7505) - 📦 移除固定定位的广告遮挡层 - 🚫 拦截window.open弹窗 - 🔄 DOM监听,持续清理动态加载的广告 - 🎨 注入CSS隐藏广告元素 ### 用户体验优化 - 🎯 智能焦点管理,防止焦点进入网页内容区域 - 📱 支持焦点高亮显示 - 🖱️ 支持触摸交互优化 - 🖼️ 支持全屏模式切换 - ⌨️ 智能键盘管理,自动隐藏软键盘 - 🚀 快速页面切换,立即中断当前加载 ### 技术特性 - 🌐 桌面用户代理模式,提供更好的网页兼容性 - 🔐 完善的权限管理 - 📱 支持全屏模式,自动隐藏系统栏 - 🎨 自定义工具栏样式 - 📊 完善的错误处理和日志记录 ## 技术架构 ### 开发环境 - **开发工具**: IDEA 2025 - **开发语言**: Java SDK 17 - **最低支持版本**: Android 6.0 (API 23) - **目标版本**: Android 6.0 (API 23) ### 核心技术栈 - **浏览器内核**: GeckoView 85 (Mozilla Firefox引擎) - **用户代理模式**: 桌面模式 (USER_AGENT_MODE_DESKTOP) - **架构支持**: 默认arm64-v8a,可配置其他架构 ### 广告拦截系统 - **扩展架构**: 基于GeckoView WebExtension API - **拦截策略**: - 目标页面白名单模式 - 非标准端口拦截(允许80、443) - 跨域请求拦截 - DOM元素移除 - CSS注入隐藏 - **配置文件**: `app/src/main/assets/extensions/adblock/config.js` - **拦截脚本**: `app/src/main/assets/extensions/adblock/content.js` ### 项目结构 ``` app/src/main/ ├── java/com/felix/tv/navigation/ │ └── BrowserActivity.java # 主Activity,包含所有浏览器逻辑 ├── res/ │ ├── layout/ │ │ └── activity_browser.xml # 浏览器界面布局 │ └── values/ │ └── strings.xml # 字符串资源(包含默认首页URL) └── assets/extensions/adblock/ ├── manifest.json # 扩展配置文件 ├── background.js # 后台脚本 ├── config.js # 广告拦截配置 └── content.js # 内容脚本(广告拦截核心逻辑) ``` ## 构建项目,以IDEA 2025为例 ### 构建步骤 1. 参考`gradle copy.properties`文件复制一份修改名称为`gradle.properties`作为本地配置文件。其中APK签名配置请根据实际情况修改。 2. 所有镜像地址均已通过测试,可以在国内镜像正常网速下载,完成项目同步,构建,打包。 3. 项目使用Release模式构建生成的APK文件位于`app/build/outputs/apk/release/`目录下。 4. 默认仅包含arm64-v8a架构的APK文件,其他架构可在`app/build.gradle`中配置。 5. 先同步项目,用来下载相关依赖包,然后构建项目,开发中如果认为代码没有问题但还是编译报错时可以选择`Clean Project`,构建项目截图如下: ![syncProjectAndBuild.png](readmes\syncProjectAndBuild.png) 6. 本机调试项目配置如下: ![setDebugSetting.png](readmes\setDebugSetting.png) 7. 添加`Android TV`虚机设备用于本机调试项目,截图如下: ![addTVDevice.png](readmes\addTVDevice.png) ### 构建命令 ```bash # Debug模式构建 ./gradlew assembleDebug # Release模式构建 ./gradlew assembleRelease # 清理项目 ./gradlew clean ``` ## 配置说明 ### 修改默认首页 编辑 `app/src/main/res/values/strings.xml` 文件,修改 `default_homepage_url` 的值: ```xml https://your-homepage-url.com ``` ### 配置广告拦截 编辑 `app/src/main/assets/extensions/adblock/config.js` 文件,可以配置: 1. **目标页面白名单**:只在指定页面启用广告拦截 2. **端口拦截策略**:配置允许的标准端口 3. **域名黑名单**:添加需要拦截的域名 4. **白名单**:添加不拦截的域名 示例配置: ```javascript const AdBlockConfig = { targetPages: { enabled: true, mode: 'whitelist', pages: [ /.*\.dadaqu\./i, /dadaqu/i, /.*\.gpvod\./i, /gpvod/i ] }, portBlocking: { enabled: true, allowedPorts: [80, 443] } }; ``` ### 配置CPU架构 编辑 `app/build.gradle` 文件,在 `android` -> `defaultConfig` 中添加或修改 `ndk.abiFilters`: ```gradle ndk { abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' } ``` ## 使用说明 ### 基本操作 1. **首页导航**:点击"首页"按钮快速返回默认首页 2. **输入网址**:在地址栏输入网址,点击"前往"或按回车键访问 3. **后退**:点击"返回"按钮返回上一页 4. **刷新**:点击"刷新"按钮重新加载当前页面 5. **关闭**:点击"关闭"按钮退出浏览器 ### 遥控器操作 - **方向键**:在工具栏按钮之间导航 - **确定键**:选中的按钮或输入框 - **返回键**:返回上一页或退出应用 ### 触摸操作 - 点击网页内容后,焦点会自动回到工具栏 - 点击工具栏任意位置,焦点会回到首页按钮 - 支持触摸滚动和点击交互 ### 全屏模式 当网页请求全屏时,工具栏会自动隐藏,退出全屏后工具栏会自动恢复显示。 ## 技术亮点 ### 智能焦点管理 - 防止焦点进入网页内容区域,确保遥控器操作流畅 - 点击网页内容后自动将焦点请求回工具栏 - 完善的方向键导航控制 ### 快速页面切换 - 点击导航按钮时立即中断当前页面加载 - 使用 `GeckoSession.stop()` 确保快速响应 - 优化了硬件配置有限的设备上的性能 ### 广告拦截优化 - 多层拦截策略,确保广告被彻底清除 - DOM监听器持续清理动态加载的广告 - CSS注入隐藏广告元素,不影响页面布局 - 延迟清理机制,处理延迟加载的广告 ### 用户体验优化 - URL输入框获取焦点时自动选中所有文本 - 输入完成后自动隐藏软键盘 - 加载进度实时显示 - 完善的错误处理和日志记录 ## 许可证 本项目采用开源许可证,详见 [LICENSE](LICENSE) 文件。