Samsung Browser 增强模块(LSPosed 模块)。
以 LSPosed 为运行框架,为三星浏览器(Samsung Internet,包名 com.sec.android.app.sbrowser)
补充官方未提供的功能。
A LSPosed module that enhances Samsung Internet Browser (package com.sec.android.app.sbrowser) with features not provided officially.
- Download Bridge — forward downloads to a third-party manager (ADM / IDM+ / 1DM, customizable package), passing Cookie / UA / Referer; optionally block the native download.
- Settings Integration + Logging — inject an SBPlus submenu into browser settings, with a built-in log viewer.
- Via-style Grid Menu — turn the "More" menu into a multi-column grid, drag-to-reorder, add/remove icons.
- Region Switch — switch the browser region to one of 17 countries.
- UA Spoofing — fully replace the User-Agent (Desktop Chrome / Mobile / iPhone / custom).
- Streamlined Settings — master switch + multi-select hiding for unneeded items.
- Block Updates & Red Dots — block browser updates, clear update notifications / popups / red dots.
- Homepage Video Background — play a video on the homepage (loop, muted).
- Userscript Manager — full built-in manager: list / add / save / delete / toggle,
.user.jsinterception, source management, "update all", lightweight GM API, detail page + share import; scheduled execution via@crontab(background scheduler,once/once(expr)syntax); per-script site exclusion list; menu registration dedupe; hardened@require/@resourcecache and enable-list protection. - Bookmark Management — import / export bookmarks (Chrome / Edge / Firefox HTML format), tree checkbox dialog.
- Random UA — 55 real UA strings with random rotation; supports platform/browser multi-select and custom parameters.
- Media Sniffer & Download Engine — multi-threaded download engine for m3u8/TVOD streams; sniff and download video/audio/image resources with tab-based select-all (video/audio/image independent). Built-in site parsers for Bilibili DASH (auto-pair video+audio into single MP4, 4K/1080P+/HDR), Douyin / Kuaishou / Xiaohongshu / Weibo / AcFun / Toutiao (SSR JSON extraction via script tag), and global platforms YouTube (itag resolution), TikTok, X/Twitter, Instagram/Facebook (performance CDN). Segmented video (m4s/ts) auto-remux to MP4 — instant, no transcoding bloat. Task progress bar, speed display, cancel support, configurable concurrency.
- Homepage Beautification — personalize the homepage: flip clock, homepage date, clock/date color settings, search box tweaks and more.
- Version + Project URL + Auto Update Check — version and project URL shown in module home and browser menu, with auto update checking.
- Bookmark AI Smart Organize — auto-classify bookmarks into a two-level (category / sub-category) system; preview before apply, adjust per category, retry; powered by your own OpenAI-compatible model provider (only bookmark titles and domains are sent).
- AI Model Settings — manage multiple provider groups (base URL / API key / model list) under Settings → Models; shared by bookmark AI organize and future features.
- Rooted device with LSPosed installed (via Magisk).
- Install the module APK, then enable it in LSPosed Manager.
- Set scope to Samsung Internet (
com.sec.android.app.sbrowser) or Beta (com.sec.android.app.sbrowser.beta). - Restart the browser (or device).
| Channel | Package | Version |
|---|---|---|
| Stable | com.sec.android.app.sbrowser |
30.0.0.67, 30.1.0.67 |
| Beta | com.sec.android.app.sbrowser.beta |
30.0.0.67 |
The module resolves obfuscated class/method names at runtime, so it generally adapts to newer browser versions automatically without a module update.
call <path-to-android-sdk>/env.bat
gradle assembleDebug --no-daemonOutput: app\build\outputs\apk\debug\app-debug.apk
The module resolves Samsung's obfuscated / version-dependent class and method names at runtime, instead of hardcoding them:
- Dynamic parent resolution — obtains the parent (obfuscated androidx class) of
PreferenceFragmentCustomat launch, so it adapts to whichever obfuscation name the browser version uses. - Multi-candidate method fallback — for obfuscated methods (e.g.
PreferenceManager'screatePreferenceScreen), tries candidate names in order, standard first then obfuscated names. - Isolated error handling — each hook is independently guarded; a failure in one does not break others or the browser itself.
Re-resolution happens on every browser start, so after a browser update the module adapts automatically without a module update.
- 目标框架:LSPosed(接口兼容标准 Xposed API)
- 模块入口:
assets/xposed_init→com.sbplus.browser.MainHook - 兼容:LSPosed 可加载,老 Xposed / EdXposed 理论上也可加载
- 手机已 root,并安装 LSPosed(Magisk 模块方式)
- 安装本模块 APK 后,打开 LSPosed Manager:
- 启用本模块
- 作用域(Scope)勾选「三星浏览器」(
com.sec.android.app.sbrowser)
- 重启三星浏览器(或重启系统)
作用域需要时可在 LSPosed 界面手动勾选。
| 渠道 | 包名 | 版本 |
|---|---|---|
| 正式版 | com.sec.android.app.sbrowser |
30.0.0.67, 30.1.0.67 |
| Beta 版 | com.sec.android.app.sbrowser.beta |
30.0.0.67 |
模块通过运行时自适应解析混淆类名/方法名,通常浏览器更新后无需更新模块即可自动适配。
把三星浏览器的下载请求转交给第三方下载器(ADM / IDM+ / 1DM,包名可自定义)。
- hook
TinDownloadController下载链路(onDownloadStarted等) - 传递 Cookie / User-Agent / Referer 等登录态信息
- 可选阻断原生下载(真正"接管"而非并行)
在三星浏览器设置页注入 SBPlus 子菜单,并提供内置日志查看。
把三星「更多」菜单从单列纵向列表改造成多列网格(Via 风格),支持拖拽排序、 添加/删除图标。
通过 hook CountryUtil.getCountryIsoCode() 等入口,将浏览器地区切换到 17 国之一,
影响所有区域相关行为。
hook SBrowserCommandLine.initialize(),通过 TerraceCommandLine.appendSwitchWithValue
注入 user-agent switch,完整替换 UA(桌面 Chrome / 手机 / iPhone / 自定义)。需重启浏览器生效。
主开关 + 23 项多选屏蔽,两列网格展示,隐藏不需要的设置项。
独立总开关,彻底屏蔽浏览器更新:
- 清除更新通知 / 弹窗 / 红点(关于页、更多按钮、设置徽标)
- 阻断更新检查链路(
UpdateManager.checkUpdate*) - 阻断商店网络(
StubUtil.checkUpdateOnGalaxyStore等) - 禁止跳转商店 / 升档
- 通过官方预留
disable-update-dialogswitch 优雅屏蔽弹窗
让浏览器主页(新标签页/快速访问页)背景播放动态视频。
- 通过 MediaStore 将选中视频存入公共
Movies/SBPlus/目录 - 用
TextureView + MediaPlayer循环静音播放(TextureView 规避 SurfaceView 被不透明背景色盖住的问题) - 子页提供「选择视频 / 清除视频 / 删除视频」三个操作
完整的内置油猴脚本管理器:
- 脚本列表 / 添加 / 保存 / 删除 / 开关(开关在前、名字在后)
- 拦截
.user.js下载引导安装 - 支持源管理(
@updateURL/@downloadURL)、「更新所有脚本」 - 内置精简版 GM API(
GM_setValue/GM_getValue/GM_registerMenuCommand等) - 脚本详情页 + 分享导入
@crontab定时执行(后台调度器自动拉起,once/once(expr)语法)- 按脚本排除站点(排除列表内不注入)
- 菜单注册去重、
@require/@resource本地缓存与启用名单加固
- 导入 / 导出书签(Chrome / Edge / Firefox 通用 HTML 格式)
- 树形勾选对话框(可选导入/导出指定节点)
内置 55 条真实 UA 池,支持随机轮换(桌面 Chrome / 手机 / iPhone / 自定义)。支持平台/浏览器多选和自定义参数动态生成。
多线程下载引擎(m3u8/TVOD 流式),按类型分tab显示(视频/音频/图片独立全选)。
- B站 DASH 自动合并:视频+音频流自动配对合并为单 MP4(4K/1080P+/HDR,大会员全清晰度)
- 国内站点解析器:抖音 / 快手 / 小红书 / 微博 / AcFun / 头条(script 标签 SSR JSON 提取)
- 国外平台支持:YouTube(itag 清晰度标注)、TikTok、X/Twitter、Instagram/Facebook
- 分片视频(m4s/ts)自动纯 remux 转 MP4(秒级完成,不膨胀)
- 任务进度条 / 速度显示 / 取消支持 / 并发数可配置
- 下载后自动转 MP4 开关(默认开)
- 图片格子选中显示蓝色遮罩
主页搜索框等页面元素的个性化设置:翻页时钟、主页日期、时钟 / 日期颜色设置等。
- SBPlus 应用首页与浏览器 SBPlus 菜单里都显示版本号 + 项目地址
- 启动/进入页面时自动检测 GitHub 最新 release,有新版本在版本号后提示「点击更新」,点击后确认下载 apk
自动把收藏夹按语义分类(大类 / 子类两级体系),先预览确认、可逐类调整后再应用,支持重试。 由用户自配的 OpenAI 兼容模型服务驱动,仅发送书签标题与域名。
「设置 → 模型」:多分组管理接口地址 / API Key / 模型列表(OpenAI 兼容接口),书签 AI 整理等功能共用。
call <path-to-android-sdk>\env.bat
gradle assembleDebug --no-daemon产物:app\build\outputs\apk\debug\app-debug.apk
模块对三星浏览器内部被混淆/随版本变化的类名与方法名做了运行时自适应解析,而非硬编码:
- 动态父类解析:通过明文类
PreferenceFragmentCustom动态获取其父类(androidx 混淆类), 无论浏览器版本把混淆名改成H2.A还是其他,都能自动找到。 - 多候选方法回退:对被混淆的方法(如
PreferenceManager的createPreferenceScreen) 按候选名列表依次尝试,标准名优先、混淆名兜底。 - 独立容错:每个 hook 点单独保护,单个失败不影响其他功能,也不影响浏览器自身。
浏览器每次启动时都会重新解析适配,浏览器更新后无需模块更新即可自动适配新版本。
- Windows AMD64
- Java 17(Temurin)
- Gradle 8.7
- Android SDK 34+
- 依赖仓库:阿里云镜像(解决国内拉取 AGP 依赖超时问题)
- 测试设备:三星 Galaxy(Android 16 / SDK 36)
SBPlus/
├── app/
│ ├── build.gradle (namespace/applicationId = com.sbplus.browser)
│ └── src/main/
│ ├── AndroidManifest.xml (xposedmodule 声明)
│ ├── assets/xposed_init (模块入口)
│ ├── res/values/ (app_name=SBPlus, xposedscope)
│ └── java/com/sbplus/browser/
│ ├── MainHook.java (核心 hook,功能 1-13)
│ ├── MainActivity.java (模块首页/版本号/更新检测)
│ ├── UpdateChecker.java (GitHub 最新版本查询)
│ ├── MenuReorderHelper.java (网格菜单拖拽排序)
│ ├── MenuAddButtonHelper.java (添加图标)
│ ├── MenuEditHelper.java (编辑图标)
│ ├── HomeLogoHelper.java (主页 Logo 偏好)
│ ├── HomeClockHelper.java (主页时钟偏好)
│ ├── FontHelper.java (模块 UI 自定义字体)
│ ├── ThemeColorHelper.java (主题色槽位)
│ ├── LogWriter.java / LogProvider.java / LogManagerActivity.java (日志系统)
│ └── ...
├── build.gradle
├── settings.gradle (rootProject.name=SBPlus)
└── gradle.properties