gander

mokshablrMIT活跃维护

一款完全离线的 Android 文件查看器,无需任何权限就能打开 PDF、Office 文档、压缩包、3D 模型、音视频、Markdown 和代码等各类文件。

Take a gander at any file. Offline, zero-permission Android viewer for PDF, Word, Excel, PowerPoint, ODT, RTF, ZIP, STL, photos, video, audio, Markdown and code.

v2.9发布于 2026-11-09 13:23 UTC1,385star +15 / 7 天72fork同步于 2026-11-10 17:50 UTC

怎么上手

由 README 提炼,执行前请确认
从 Releases 下载 Gander-x.y.apk 后拷贝到手机点击安装;自行构建需 JDK 21+ 与 Android SDK platform 36,执行 ./gradlew assembleDebug
硬件要求按 README 说明

运行于 Android 8.0(API 26)及以上;README 未提及显存或 GPU 要求。部分格式依赖较新的 Android System WebView:Word 需 80、Markdown 需 93、PDF 需 125;低于 125 时 PDF 可退回 Android 自带渲染器的简易视图。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

一个完全离线的 Android 文件查看器,一个 APK 打开 PDF、Office、图片、音视频和压缩包

一款完全离线的 Android 文件查看器,无需任何权限就能打开 PDF、Office 文档、压缩包、3D 模型、音视频、Markdown 和代码等各类文件。

核心能力

  • 用沙箱 WebView 离线渲染 PDF、Word、Excel 和 PPT
  • ZIP 按文件夹列出,条目直接从压缩包内打开,不解压到手机
  • 零权限且不声明 INTERNET,文件经系统选择器或 Open with 传入
  • 支持 PDF 与 Word 夜间模式,保留色相并翻转扫描件
  • PDF 内查找、选词复制,并记住上次阅读位置

容易踩的坑

PDF 完整功能依赖 WebView 125 及以上,旧设备会退化为无搜索、无选词的简易视图;Android 系统不允许授予 Downloads 根目录,文件夹浏览需改授 Documents、DCIM 或 Downloads 子目录;自行签名构建的 APK 无法覆盖安装官方发布版。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2.9
  1. v2.9Gander 2.9最新正式版2026-11-09 · 2026-11-09 13:23 UTC

    Gander 2.9 draws PDF pages sharper and lets them be pinched down to a column of small pages, swipes through a folder's photos with Rotate and Delete, and turns a book's page with a tap on its side.

    Gander is on Google Play, signed with the same key as these releases.

    PDFs

    • PDF pages are sharper at the screen's width, as a PDF opens. A page is now drawn with twice the screen's pixels and scaled down to fit, where it was drawn with about as many and came out soft, most of all on phones with a 720p screen (reported in a Play review). Zoomed in, the part on screen is drawn again at the zoom, from the same point as before.
    • A PDF can be pinched smaller than the screen, down to a quarter of its width, so its pages show as one column of small pages to find a place by, where a pinch stopped at the page's width. Pinch out to bring them back to the screen's width, and again to zoom in past it as before. A double tap on the small pages brings them back to the screen's width about the place tapped. A document reopens at the screen's width. Thanks @XZY123lol, #52.

    Photos

    • A photo opened from a folder you added in Gander swipes to the folder's other photos, in the order you sorted the folder in Gander, by name, date or size, and a readout says which photo of how many it is. Opened with Open a file, from Recents or from another app, a photo still opens alone, since Android then shares only that one file with Gander. Thanks @0xlne, #75, and @DEWE-ex, #71.
    • A photo opened from a folder you added in Gander can be deleted with the bin in the title bar, from Android 11. Android asks first, in its own prompt, then moves the photo to its bin, where it can be restored for 30 days, on a Samsung phone from Gallery's Recycle bin, and the next photo shows. Gander still only reads the folder. A photo in a folder with a .nomedia file in it can't be deleted this way, since Android doesn't list it as a photo. Thanks @0xlne, #75.
    • A photo can be turned a quarter turn at a time with Rotate, and stays turned while the viewer is open. The file itself is left as it is. Rotate is in the title bar, or in its menu where Share and Delete fill the bar. Pictures that move, such as GIFs, and SVG drawings can't be turned. Thanks @DEWE-ex, #71.
    • A photo or a track has its title bar over it in the dark, as a video does, and a tap on the photo, or on the track's screen around its buttons, hides the title bar and the phone's bars. Another tap brings them back. Thanks @DEWE-ex, #71.

    Books

    • A tap on the right of a book's page moves it on by a screen less a line, so the line it ended on is the first you see, and a tap on the left moves it back, as in a reading app (asked for in a Play review). In a book read right to left the sides swap, as Previous and Next do. At the end of a chapter a tap on the right goes on to the next one, and at the start of one a tap on the left goes back to the end of the chapter before. A tap on a link, or in the middle third of the page, does what it did.

    Everywhere else

    • A presentation full of photos needs much less memory to open, where on a phone with little memory it could stop the viewer with an error (reported in a Play review). The slide reader now writes out each picture in one go rather than a few characters at a time.
    • An old PowerPoint slide show (.pps) or template (.pot) now says it opens once saved again as .pptx, as a .ppt already did.
    • In a Word document, a tab on a line just below a picture the text wraps around, such as a logo at the top of a form, now reaches its tab stop. Since 2.7 it could fall short, with the text after it out of line with the rows below, when the paragraph beside the picture grew by a line as its own tab was lined up.

    Install

    Gander-2.9.apk runs on every phone. The app ships no native libraries, so there is no architecture to choose.

    Viewing PDFs in full needs Android System WebView 1

  2. v2.8Gander 2.82026-10-31 · 2026-10-31 14:31 UTC
    查看更新说明

    Gander 2.8 draws a spreadsheet as Excel draws it, shows the pictures a Markdown file includes from its folder, and lists every file type it opens in About.

    Gander is on Google Play, signed with the same key as these releases.

    Spreadsheets

    • Spreadsheets look as they do in Excel: column letters and row numbers, columns and rows as wide and tall as the workbook makes them, its fonts, borders and alignment, wrapped and turned text, and text running on over empty cells beside it. Frozen rows and columns stay on screen, hidden rows, columns and sheets stay hidden, and the tabs are at the foot of the screen. A workbook opens on the sheet it was saved showing, where Gander always opened the first.
    • A spreadsheet opens at a size you can read, where it opened zoomed out with its text too small to read. Pinch or double tap to zoom; the letters, numbers and frozen panes stay in place.
    • Tap a cell to see all of it in a bar above the tabs, with its formula or value, note and link, and to copy it. Back closes the bar.
    • Spreadsheets show their colours: filled cells, rows and columns, and coloured, bold, italic, underlined or struck-through text, where every cell was drawn plain. In dark mode light fills go dark and dark ones light, each keeping its colour, and text on them stays readable. An .xlsb or .ods file is still drawn plain.
    • Conditional formatting shows: cells highlighted by a rule, colour scales, data bars, top and bottom values, duplicates, and rules written as simple formulas. Icon sets, dates relative to today and formulas over a range still don't.
    • A range formatted as a table shows in its style, with its header and stripes.
    • Pictures in a spreadsheet show where the workbook puts them, and so do text boxes. A chart shows as a box with its title, where it would be, since Gander can't draw charts yet.
    • Numbers a workbook shows in red, such as losses, show in red. A number too wide for its column shows with fewer decimals, as a power of ten such as 1.2E+08, or as ###, as in Excel, where its first digits were cut off.
    • A CSV's columns are as wide as their text.

    Markdown

    • A Markdown file opened from a folder you added in Gander shows the pictures it includes from inside that folder, such as a README's screenshots, where it showed a broken picture. Opened with Open a file, from Recents or from another app, it still shows none, since Android then shares only that one file with Gander. Pictures from the web still don't load, since Gander has no internet access. A logo a README marks for GitHub's light or dark theme shows in that theme only. Thanks @sonichy, #62.
    • A crafted Markdown file can no longer stall the viewer. Markdown is drawn by marked 18.1.1, up from 15.0.12, and needs Android System WebView 93, up from 92.

    Everywhere else

    • The home screen now says how to open a file from your file manager, with Open with > Gander, which only About said before: under the first screen's two buttons, and at the end of the list once you have files or folders.
    • About lists every kind of file Gander opens, with every extension, on a new File types page. It used to name only documents, spreadsheets, slides and photos. Thanks @sonichy, #61.
    • A photo from a cloud app such as Google Drive opens at once, where the viewer froze until the app had downloaded it.
    • With Android System WebView turned off or part way through an update, a document shows a card saying so, with Reload, where Gander stopped.
    • A double tap zooms smoothly far down a long document, where the page jumped up and down as it zoomed.
    • With your phone set to light, the menu over a PDF or Word document can be read again once night mode is off, where on Android 14 and newer it kept night mode's dark background under dark text.
    • Text shared into Gander is deleted when you close the viewer, and removing a folder removes its thumbnails.
    • The APK no longer carries a list of
  3. v2.7Gander 2.72026-10-25 · 2026-10-25 17:09 UTC
    查看更新说明

    Gander 2.7 opens Word files saved by WPS Office, LibreOffice and Google Docs as pages, prints a Word page with a footer on one sheet, and opens a Graphviz graph saved as .dot as text.

    Gander is on Google Play, signed with the same key as these releases.

    Word

    • A Word file saved by WPS Office, LibreOffice or Google Docs now opens as pages, with the page readout and Go to page, where Gander showed it as one long sheet. These apps don't save where their pages end, as Word does, so Gander works it out from the page size: a page ends between paragraphs, between table rows or between the lines of a long paragraph, keeps a heading with the text after it where the file asks for that, draws a table's header rows again on the next page, and leaves room at its foot for its footnotes. Page numbers in the footer count these pages. A break can land a little away from where the app that saved the file put it, since the phone's fonts differ. Thanks @BenjaminSk-04, who sent a file, #55.
    • A Word file with a footer prints one sheet per page. Each footer printed on a sheet of its own, so six pages took twelve sheets, and a full page could send its last line to a sheet of its own. A page that runs a little past its paper, as a page set in the phone's fonts can, prints on one sheet too.
    • A tab in a Word file takes the text after it to its stop. On newer phones tabs were lined up after the pages were fitted to the screen, which left them about a tenth short. A dotted tab that ends a line, as in a table of contents without page numbers, draws its dots to the stop, where they ran past the margin on a line of their own. A file with thousands of tabs no longer freezes for seconds as it opens: each tab laid the page out again.
    • Footnotes in a Word file are numbered through the document, as Word numbers them. A file drawn in pages started each page's notes again at 1.
    • A Word file that isn't set for different odd and even pages shows the same header and footer on every page, as Word does. Gander drew the file's unused even-page header and footer on every second page. Word files are now drawn by docx-preview 0.4.1, up from 0.4.0.

    Text

    • A Graphviz graph saved as .dot opens as text, where Gander took it for a Word template and said it couldn't read it. Word 97-2003 templates, which end in .dot too, still open as documents, and a .gv no longer says "unknown format" under its name. Thanks @IsakTheHacker, #58.

    Install

    Gander-2.7.apk runs on every phone. The app ships no native libraries, so there is no architecture to choose.

    Viewing PDFs in full needs Android System WebView 125 or newer (May 2024), Word documents 80 and Markdown files 92. Any phone still receiving WebView updates is well past all three. Below 125, on Android 9 and later, PDFs open in a simple view.

    Verify before installing if you like. Signing certificate SHA-256:

    5B:5C:F6:4A:94:23:7C:D5:F0:E0:85:76:00:38:BC:1C:EB:DF:18:DA:BA:5C:B3:EA:CA:7C:15:9F:22:A7:E2:4B
    

    And the APK itself:

    8c24bd8e14e0a9e66cad690791d36ac3eda973c7e71fb7dea01a668363591a00
    
  4. v2.6Gander 2.62026-10-22 · 2026-10-22 11:43 UTC
    查看更新说明

    Gander 2.6 opens PDFs on phones with Android 9 or later whose WebView is too old for them, lays out books, text and Markdown in Arabic, Hebrew and other right-to-left scripts right to left, and draws a slide with no background on white.

    Gander is on Google Play, signed with the same key as these releases.

    PDFs

    • A PDF now opens on a phone whose WebView is too old for PDFs and can't be updated, such as a Huawei phone without Google services, where Gander only said that PDFs would not work. Android's own PDF renderer draws the pages, in a process walled off from your files and from Gander, and they are shown as pictures, with the page readout, Go to page, night mode and Print, but without search, text selection or form entries, and before Android 15 without highlights or comments. It needs Android 9 or later. Thanks @sdiddssew, #9, and @XZY123lol, #31.
    • Where updating Android System WebView would fix PDFs, the message still says so, and now has a button that opens this simple view in the meantime.
    • From Android 9, PDF thumbnails are drawn the same way on every phone, in a walled-off process, so a PDF that crashes Android's renderer no longer closes Gander. On Android 8, which can't keep that process as far apart, PDFs show their badge instead of a thumbnail.

    Right to left

    • In a book read right to left, such as one in Arabic, Hebrew, Persian or Urdu, Next is on the left and Previous on the right, and the contents, the title and the chapter's name read right to left, indented from the right. Thanks @yshalsager, #54.
    • A plain text file mostly in Arabic, Hebrew or another right-to-left script reads right to left. Code, data, subtitles and playlists stay left to right. Thanks @yshalsager, #59.
    • A Markdown file mostly in a right-to-left script reads right to left, and its code reads left to right, even in a part the author set right to left. Thanks @yshalsager, #60.

    Slides and Word

    • A slide with no background is drawn on white, as PowerPoint draws it, and so is a slide whose background Gander can't draw yet, such as a pattern. Gander drew both see-through, so the grey behind them showed and dark text on them was hard to read. Thanks @PROTON-DARK, who sent the deck, #53.
    • A Word table whose cells are marked to run left to right, the usual way, now reads across. Gander turned the text in every such cell on its side. Thanks @XZY123lol, who brought this over from 4PDA in #52.

    Install

    Gander-2.6.apk runs on every phone. The app ships no native libraries, so there is no architecture to choose.

    Viewing PDFs in full needs Android System WebView 125 or newer (May 2024), Word documents 80 and Markdown files 92. Any phone still receiving WebView updates is well past all three. Below 125, on Android 9 and later, PDFs can open in the simple view above.

    Verify before installing if you like. Signing certificate SHA-256:

    5B:5C:F6:4A:94:23:7C:D5:F0:E0:85:76:00:38:BC:1C:EB:DF:18:DA:BA:5C:B3:EA:CA:7C:15:9F:22:A7:E2:4B
    

    And the APK itself:

    62b3f68fa8ab765abf671af054c1a82d41e2c98da27d6de21159abf650ee2d44
    
  5. v2.5Gander 2.52026-10-14 · 2026-10-14 17:52 UTC
    查看更新说明

    Gander 2.5 opens EPUB books, opens a file of an unknown format as text when it is text, and zooms to twice the width on a double tap.

    Gander is on Google Play, signed with the same key as these releases.

    Books

    • An EPUB book opens in a reader of Gander's own, a chapter at a time, with the book's contents list, Previous and Next under each chapter, the links between chapters, and the book's pictures, fonts and styles. Asked for by @0xlne, #50.
    • Contents and Text size are in the menu. Text size goes smaller or larger in nine steps and keeps the line you were on at the top. A book reopens at the line it was left on, and the readout says how far through it you are, as a percentage.
    • After a link to a note or another chapter, Back brings you back to the line you left. Find searches the whole book, starting from where you are. A web link shows its address, to copy: Gander still opens none.
    • A table or a line of code too wide for the screen scrolls sideways by itself. The fixed pages of a picture book or a comic fit the width of the screen, and a book set in vertical columns is laid out in rows.
    • On a dark phone the page is dark, whatever colours the book set, and a formula or drawing in black is shown in light ink.
    • A book locked with DRM says so: only the app of the shop or library it came from can open one.

    Files

    • A file of a format Gander doesn't know opens as text straight away when it is text, and the line under its name says "Shown as text, unknown format". A file that isn't text keeps the card and its View as text button. Thanks @Cecalie, who asked in #51 for a way past the card.
    • Gander is among the apps offered for a .xlsm, .xlsb, .js, .rb or .sql file in a file manager's Open with and in the share sheet. On Android 10 and later it was missing for these five.

    Zoom

    • A double tap zooms a PDF, a Word, OpenDocument or Rich Text page, a slide or a picture to twice its width, about the place you tapped, and the next double tap puts it back. Pages and slides went in by a fifth to two fifths before, and a photo from a phone's camera by about nine times. A sheet keeps its own double tap, which goes in further.

    Install

    Gander-2.5.apk runs on every phone. The app ships no native libraries, so there is no architecture to choose.

    Viewing PDFs needs Android System WebView 125 or newer (May 2024), Word documents 80 and Markdown files 92. Any phone still receiving WebView updates is well past all three.

    Verify before installing if you like. Signing certificate SHA-256:

    5B:5C:F6:4A:94:23:7C:D5:F0:E0:85:76:00:38:BC:1C:EB:DF:18:DA:BA:5C:B3:EA:CA:7C:15:9F:22:A7:E2:4B
    

    And the APK itself:

    3e6bff780e20a1adb4db7c66f7ee311a3e8479c76abb190d4ddde31d886c41f0
    

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Gander 🪿

    Take a gander at any file. A tiny, open source, fully offline file viewer for Android that opens PDF, Word (.docx), Excel, PowerPoint (.pptx), photos, videos, audio, Markdown, text, code and .zip archives in one app, with zero permissions, no ads, no tracking and no internet access at all.

    Join the mailing list for announcements, follow @ArjunManiyani on X, or grab the APK from Releases.

    License: MIT Release Downloads Build Min API

    Every phone ships with a dozen half-viewers that bounce your documents to cloud services. Gander is the opposite: one small APK (about 5 MB) that renders everything on the device. It cannot phone home because it does not even hold the INTERNET permission.

    arjun.maniyani.com/gander · Privacy policy

    Screenshots

    Home: recents and foldersPDFThe same PDF, night mode
    Recent files with thumbnail previews and granted foldersPDF viewer rendering a site survey report with a photographic plateThe same page with night mode on: the paper is black and the text white, the blue headings are still blue, and the photograph is left exactly as it was printed
    PhotosWord (.docx)PowerPoint (.pptx)Excel (.xlsx)
    Full-size photo in the zoomable image viewerWord document viewerPowerPoint slides viewerExcel spreadsheet viewer with sheet tabs

    Features

    • One viewer for everything: documents, spreadsheets, slides, images, video, audio, Markdown, code, 3D models
    • Opens .zip files: a zip lists like a folder, and each file in it opens in its usual viewer, read straight out of the archive with nothing unzipped to the phone
    • Pinch zoom and smooth scrolling everywhere, with deep zoom into huge photos (tiled decoding)
    • Recent files with thumbnail previews (image, video frame, PDF first page)
    • Folder browsing through one-time system grants, still without any storage permission. A folder's menu sorts its files by name, date or size, and filters them by kind
    • Share sheet and "Open with" integration: share a file from any app (chat, mail, browser) into Gander, or tap it in a file manager
    • Find in document: search inside PDF, Word, OpenDocument, Rich Text, every chapter of a book, every sheet of a workbook, slides, Markdown, text and code with match navigation
    • Select and copy text in a PDF, and read one with a screen reader
    • Picks up where you left off: a PDF reopens at the page you were reading and a book at the line, however you open it
    • Night mode for PDFs and Word documents: turns the page over for reading in the dark, keeping each colour's hue, turning scans and figures over with the text, and leaving photographs exactly as they were printed
    • Word documents in pages: a file saved in Word shows its pages where Word ended them, each with its own page number, and a page counter and Go to page as a PDF has
    • Share and locate: send the open file to any app, or jump to its folder in the file manager
    • Print: a PDF prints exactly as it is, and a Word, OpenDocument or Rich Text file prints the way Gander shows it, through Android's own print screen
    • Private by construction: no permissions, no INTERNET, no analytics, no accounts, nothing leaves the phone
    • Checks its own promise: the About screen asks Android what the app requests and shows you the answer, next to the full licence text for every bundled library
    • Modern Android: Material 3, dark mode, edge to edge, works on Android 8.0+

    Supported formats

    CategoryFormatsRenderer
    DocumentsPDFpdf.js, offline in a sandboxed WebView; on an older WebView, Android's own renderer in an isolated process
    Word .docx .docm .dotxdocx-preview, offline in a sandboxed WebView
    Word 97-2003 .doc, OpenDocument .odt, Rich Text .rtfGander's own readers, offline in a sandboxed WebView
    BooksEPUB .epub, without DRMGander's own reader, offline in a sandboxed WebView
    Spreadsheets.xlsx .xls .xlsm .xlsb .xltx .csv .odsSheetJS, offline
    SlidesPowerPoint .pptx .ppsx .pptm .potxPPTXjs, offline
    PhotosJPG, PNG, WebP, HEIC/HEIFTiled deep-zoom image view, EXIF aware
    GIF (animated), animated WebP and PNG, SVG, AVIF, ICO, BMPWebView
    VideoMP4, M4V, MOV, MKV, WebM, 3GP, AVI, FLV, MPEG-TSMedia3 ExoPlayer
    AudioMP3, M4A, AAC, FLAC, WAV, OGG, Opus, AMRMedia3 ExoPlayer
    Markdown.md rendered as formatted HTMLmarked + DOMPurify, offline
    Text and code.txt .json .xml logs, subtitles (.srt .vtt), .m3u playlists, .nfo, most source filesText viewer
    Archives.zipListed like a folder, entries opened in place
    3D modelsSTL .stl, binary and textGander's own WebGL viewer, offline

    An .stl, the file 3D printers take, opens as a solid you can turn with one finger and zoom or move with two; a double tap puts it back. Its size in millimetres is shown underneath. A phone can open models of up to about half a million triangles for each gigabyte of memory it has.

    A .zip opens as a list laid out like a folder, and each file in it opens in the viewer it would get on its own, read straight out of the archive: nothing is unzipped or written to the phone. Password-protected entries open with their password, and names written by Windows zip tools in other languages are read as names rather than question marks, with File name encoding in the menu to correct a wrong guess.

    Anything else, including files with no extension at all, opens as text when its first bytes read as text, and says so under the file's name. One that does not read as text offers View as text, which shows the raw contents without renaming the file. Large files load 5 MB at a time with a Show more button, so they open instantly and can still be read end to end.

    Word 97-2003 .doc, OpenDocument .odt and Rich Text .rtf are read by code written for Gander rather than by a bundled library: text and formatting, headings, lists, tables, pictures, footnotes, headers and footers, in any script. The file's first bytes choose the reader, so a .doc that is Rich Text inside, as many are, opens all the same. Word 6 and Word 95 files show their text without formatting, and a Windows metafile picture shows a box saying it cannot be drawn.

    In a .pptx, a chart, diagram, picture, table or text that PPTXjs cannot draw, such as a doughnut or radar chart or an EMF or WMF picture, is left out, and a box in its place says what is missing. The rest of the slide is drawn.

    Legacy binary .ppt is not supported (no open-source renderer is both faithful and small enough to bundle); the app explains this and suggests re-saving as .pptx. Binary .xls works.

    Install

    Runs on Android 8.0 (API 26) and up.

    Some formats need a recent Android System WebView, the browser engine built into the phone: Word documents 80, Markdown files 93 and PDFs 125 (May 2024). Any phone still receiving WebView updates is well past all three; if yours is not, Gander says so when you open the file rather than failing quietly.

    Below 125, on Android 9 and later, PDFs can open in a simple view: pictures of the pages, drawn by Android's own PDF renderer in an isolated process, without search, text selection or form entries, and before Android 15 without highlights or comments. Where the WebView can't be updated, as on Huawei phones without Google services, PDFs open there directly; elsewhere the card asking for an update offers it. A PDF inside a zip, or handed over by another app as a stream, keeps the card.

    From Google Play, which keeps it updated: Gander on Google Play. Already installed it from here? Open the listing and tap Update. Play moves your install over, recents and folder grants included, since both copies are signed with the same key.

    From GitHub, for phones without Google Play, or if you'd rather not use it:

    1. Download the latest APK from Releases: Gander-x.y.apk runs on every architecture, since the app ships no native libraries.
    2. Copy it to your phone, tap it, and allow "install unknown apps" when asked.
    3. Optional: Play Protect may warn about an unknown developer; that is what sideloaded open source looks like. Tap "Install anyway".

    Updating: install the new APK over the old one; recents and folder grants survive.

    Automatic updates without a store: with Obtainium installed, add Gander in one tap, or add https://github.com/mokshablr/gander as an app source yourself. It follows the tagged GitHub releases here and updates Gander like a store would.

    Verify before installing: every release is signed with the same key, so you can confirm an APK really came from this repo. Obtainium can pin the fingerprint below, and for a file you have already downloaded:

    apksigner verify --print-certs Gander-x.y.apk
    

    Signing certificate SHA-256:

    5B:5C:F6:4A:94:23:7C:D5:F0:E0:85:76:00:38:BC:1C:EB:DF:18:DA:BA:5C:B3:EA:CA:7C:15:9F:22:A7:E2:4B
    

    How the zero-permission trick works

    Gander receives files through the Storage Access Framework and "Open with" intents, so the OS hands it exactly the documents you chose and nothing else. Office formats render inside a locked-down WebView whose every request Gander answers itself: bundled JS libraries load from app assets, the document streams from the content URI, and anything else gets an empty 404. No network stack is ever touched, and the app does not declare the INTERNET permission, so there is nothing to audit or trust.

    Folder browsing uses ACTION_OPEN_DOCUMENT_TREE grants. Note that Android itself refuses to grant the Downloads root to any app; grant Documents, DCIM or a subfolder of Downloads instead.

    Build from source

    To build it yourself you need JDK 21+ and the Android SDK (platform 36). These are build requirements only. The installed app runs on Android 8.0 (API 26) and up.

    ./gradlew assembleDebug        # installable debug build
    ./gradlew assembleRelease      # unsigned without a keystore
    

    Release signing expects a local, untracked keystore at keystore/gander.jks, alias gander. Generate your own with:

    keytool -genkeypair -keystore keystore/gander.jks -alias gander \
      -keyalg RSA -keysize 2048 -validity 10000 \
      -storepass gander-local -keypass gander-local -dname "CN=Gander"
    

    That builds and signs with no further setup, because gander-local is the fallback password in app/build.gradle.kts. To use a different one, set it in ~/.gradle/gradle.properties rather than in the build file:

    GANDER_STORE_PASSWORD=…
    GANDER_KEY_PASSWORD=…
    

    The keystore is gitignored on purpose: it is a personal signing key and must never land in a public repo. Neither should its password, which is why the real one lives outside the tree. Builds signed with your own key will not update an install of a release from here; the official signing certificate is above.

    Architecture in one paragraph

    ViewerActivity routes by file extension first, MIME type second (FileKind.kt), into one of four surfaces: a tiled SubsamplingScaleImageView for photos, Media3 ExoPlayer for video and audio, a sandboxed WebView for everything rendered by vendored JS libraries (app/src/main/assets/viewer/), PDF included, or a list (ArchiveBrowser.kt) for a .zip, whose entries ArchiveProvider serves back to those same surfaces without ever touching the disk. Documents are handed to the WebView whole. Where pdf.js can't run (pdfRoute in WebViewFloor.kt), a PDF's pages are drawn by the platform's PdfRenderer in an isolated process (PdfRenderService) and shown as pictures in that same WebView (SimplePdf.kt). The home screen (MainActivity) lists recents (persisted SAF grants) and granted folders (DocumentsContract child queries), with thumbnails generated off-thread and cached (Thumbs.kt), a PDF's by an isolated renderer of their own (PdfThumbs.kt).

    docs/ARCHITECTURE.md has the rest: what the viewer accepts from other apps, how a document reaches the WebView, the channel between Kotlin and the pages, and what guards each constraint.

    Vendored viewer libraries and their licenses: pdf.js (Apache-2.0), 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 (Apache-2.0/MPL). The app ships no native libraries.

    Roadmap

    • F-Droid listing
    • Legacy .ppt support if a usable offline renderer appears
    • iOS companion (thin QuickLook wrapper)

    Contributing

    Issues and small PRs are welcome, see CONTRIBUTING.md. If Gander is useful to you, a star helps other people find it. There is a sponsor page as well, though a good bug report is worth more.

    License

    MIT, Copyright (c) 2026 Arjun Maniyani. Vendored viewer libraries keep their own licenses, listed above; all are MIT/Apache/BSD and compatible. The full text of every one of them ships inside the app, in app/src/main/assets/licences.md, reachable from About.