展示HN:Gander,一个完全不需要权限的Android文件查看器
浏览任何文件。Gander是一个小型的开源、完全离线的Android文件查看器,可以在一个App中打开PDF、Word、Excel、PowerPoint、照片、视频、音频、Markdown、文本和代码,零权限、无广告、无跟踪,且完全不需要互联网访问。每部手机都装有数十个半成品查看器,将你的文档传输到云服务。Gander却是相反:一个小巧的APK(约15MB),所有内容都在设备上渲染。它无法联系网络,因为它根本没有互联网权限。截图主页:最近和文件夹 文件夹浏览 PDF Word (.docx) PowerPoint (.pptx) Excel (.xlsx) 功能 一个查看器处理所有:文档、表格、幻灯片、图像、视频、音频、Markdown、代码 无处不在的捏合缩放和平滑滚动,深度缩放巨型照片(平铺解码) 最近文件带缩略图预览(图像、视频帧、PDF首页) 通过一次性系统授权进行文件夹浏览,仍然没有任何存储权限 分享面板和“打开方式”集成:可以从任何应用(聊天、邮件、浏览器)中将文件分享至Gander,或在文件管理器中点击文件 查找文档:在Word、Excel、幻灯片、Markdown、文本和代码中搜索,并进行匹配导航 分享与定位:将打开的文件发送到任何应用,或在文件管理器中跳转到其文件夹 设计上私密:没有权限,没有互联网,没有分析,没有帐户,手机上没有任何东西外泄 现代Android:Material 3,黑暗模式,边缘到边缘,适用于Android 8.0+ 支持的格式 分类 格式 渲染器 文档 PDF Pdfium(本地) Word .docx docx-preview,在沙箱的WebView中离线 表格 .xlsx .xls .xlsm .xlsb .csv .ods SheetJS,离线 幻灯片 PowerPoint .pptx PPTXjs,离线 照片 JPG、PNG、WebP、BMP、HEIC/HEIF 瓦片深度缩放图像查看,支持EXIF GIF(动画)、SVG、AVIF、ICO WebView 视频 MP4、M4V、MOV、MKV、WebM、3GP、AVI、FLV、MPEG-TS Media3 ExoPlayer 音频 MP3、M4A、AAC、FLAC、WAV、OGG、Opus、AMR Media3 ExoPlayer Markdown .md渲染为格式化HTML标记 + DOMPurify,离线 文本和代码 .txt .json .xml日志,最常用源文件 文本查看器 遗留二进制 .doc和.ppt不支持(没有可靠的离线渲染器存在);App对此进行了说明,并建议重新保存为.docx / .pptx 。二进制 .xls 可用。 安装 从发布版下载最新的APK:Gander-x.y-arm64.apk几乎适用于2017年以后发布的每一部手机(对于非常旧或x86设备使用通用APK)。将其复制到手机上,点击它,并在要求时允许“安装未知应用”。 可选:Play Protect可能会警告关于未知开发者;这就是被旁加载的开源的样子。点击“仍然安装”。 更新:在旧APK上安装新APK;最近和文件夹授权将保留。 无需商店的自动更新:安装Obtainium并将https://github.com/mokshablr/gander作为应用源添加。它会根据这里的标记GitHub发布进行更新,就像商店一样。零权限技巧是如何工作的 Gander通过存储访问框架和“打开方式”意图接收文件,因此操作系统只传递您所选择的文档而不提供其他内容。办公格式在一个被锁定的WebView中渲染,所有请求都被WebViewAssetLoader拦截:捆绑的JS库从应用资产中加载,文档流从内容URI中获取。永远不会触及网络栈,应用也不会声明互联网权限,因此没有什么可以审计或信任。文件夹浏览使用ACTION_OPEN_DOCUMENT_TREE授权。请注意,Android本身拒绝将下载根目录授予任何应用;而是授权Documents、DCIM或Downloads的子文件夹。 从源代码构建 要求:JDK 17+和Android SDK(平台35)。./gradlew assembleDebug # 可安装的调试构建 ./gradlew assembleRelease # 未签名且没有密钥存储的发布签名需要一个本地的不被追踪的密钥库在keystore/gander.jks处(存储和密钥密码gander-local,别名gander);使用以下命令生成一个:keytool -genkeypair -keystore keystore/gander.jks -alias gander \ -keyalg RSA -keysize 2048 -validity 10000 \ -storepass gander-local -keypass gander-local -dname " CN=Gander " 该密钥库被故意gitignore:它是个人签名密钥,绝不能公开在公共仓库中。 一段话中的架构 ViewerActivity首先通过文件扩展名路由,其次是MIME类型(FileKind.kt),进入四个表面之一:用于PDF的本地Pdfium视图,用于照片的平铺SubsamplingScaleImageView,用于视频和音频的Media3 ExoPlayer,或用于通过捆绑的JS库呈现的所有内容的沙箱WebView(app/src/main/assets/viewer/)。主屏幕(MainActivity)列出最近(持久化的SAF授权)和授权文件夹(DocumentsContract子查询),缩略图在后台生成并缓存(Thumbs.kt)。捆绑的查看库及其许可:JSZip(MIT),docx-preview(Apache-2.0),SheetJS CE(Apache-2.0),PPTXjs + divs2slides(MIT),jQuery 1.11(MIT),D3 3.x + NVD3(BSD/Apache),marked(MIT),DOMPurify
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡