Rename app to EasyView and make APK build cross-platform

- App display name -> EasyView (Android label, PWA manifest, page titles,
  about/guide text, APK artifact name)
- scripts/build-apk.mjs: auto-detect JDK/SDK/Gradle toolchain instead of
  hardcoded Windows paths; pick highest build-tools; platform 34 fallback;
  path.delimiter classpaths; npm run build without cmd.exe on POSIX
- Add build-apk.sh one-shot Linux build wrapper (loads ven env + keystore)
- Signing keystore renamed to easyview.jks (alias easyview),
  env vars EASYVIEW_KEYSTORE_PASS / EASYVIEW_KEY_PASS
This commit is contained in:
2026-10-26 19:38:42 +08:00
parent e01c7eaecb
commit f70913481e
12 changed files with 170 additions and 96 deletions
+4 -4
View File
@@ -117,7 +117,7 @@ function buildHome(): HTMLElement {
'div',
{ class: 'home-brand' },
h('div', { class: 'brand-mark', html: LOGO_SVG }),
h('div', { class: 'brand-text' }, h('div', { class: 'brand-name', text: '万能看图' }))
h('div', { class: 'brand-text' }, h('div', { class: 'brand-name', text: 'EasyView' }))
)
const top = h(
@@ -275,7 +275,7 @@ async function openFile(file: File): Promise<void> {
viewerRoot.appendChild(host.root)
viewerRoot.hidden = false
homeEl.hidden = true
document.title = `${file.name} · 万能看图`
document.title = `${file.name} · EasyView`
await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()))
let createdViewer: ActiveViewer | null = null
@@ -326,7 +326,7 @@ async function openFile(file: File): Promise<void> {
activeViewer = null
viewerRoot.hidden = true
homeEl.hidden = false
document.title = '万能看图 · DWG/PDF 浏览器'
document.title = 'EasyView · DWG/PDF 浏览器'
const message = error instanceof Error ? error.message : String(error)
console.error(error)
modalMessage(
@@ -353,7 +353,7 @@ function closeActiveViewer(): void {
viewerRoot.innerHTML = ''
viewerRoot.hidden = true
homeEl.hidden = false
document.title = '万能看图 · DWG/PDF 浏览器'
document.title = 'EasyView · DWG/PDF 浏览器'
void refreshRecent()
}
+1 -1
View File
@@ -315,7 +315,7 @@ export class DocViewer {
add('rotate', 'rotate-cw', '旋转 90°', () => this.rotatePage())
add('invert', 'moon', '反色阅读', () => this.toggleInvert())
this.fullscreenBtn = add('fullscreen', 'maximize', '全屏', () => void this.toggleFullscreen())
add('about', 'info', '关于万能看图', () => showAbout())
add('about', 'info', '关于 EasyView', () => showAbout())
return menu
}
+3 -3
View File
@@ -10,7 +10,7 @@ export function showAbout(): void {
h(
'p',
{ class: 'modal-text' },
'万能看图是一个完全在本地运行的手机 / 平板图纸与文档浏览器。文件只在本机解析,不会上传到任何服务器。'
'EasyView 是一个完全在本地运行的手机 / 平板图纸与文档浏览器。文件只在本机解析,不会上传到任何服务器。'
),
h('h3', { text: '支持的格式' }),
h(
@@ -36,12 +36,12 @@ export function showAbout(): void {
h('li', {}, '文档渲染:MuPDF.js(SumatraPDF 同源渲染内核家族)— AGPL-3.0'),
h('li', {}, '本应用以 AGPL-3.0 发布;完整许可文本见项目 LICENSE 文件。')
),
h('p', { class: 'about-version', text: `万能看图 v${VERSION} · PWA · 本地解析` })
h('p', { class: 'about-version', text: `EasyView v${VERSION} · PWA · 本地解析` })
)
const close = h('button', { class: 'btn btn-primary', type: 'button', text: '关闭' })
const modal = openModal({
title: '关于万能看图',
title: '关于 EasyView',
subtitle: '手机 / 平板上的 DWG 图纸 & 文档浏览器',
content: body,
actions: [close],
+1 -1
View File
@@ -14,7 +14,7 @@ export function showGuide(): void {
h(
'p',
{ class: 'modal-text' },
'万能看图把 DWG 图纸浏览和文档阅读放在同一个本地 App 里。文件只在本机解析,不会上传到服务器。'
'EasyView 把 DWG 图纸浏览和文档阅读放在同一个本地 App 里。文件只在本机解析,不会上传到服务器。'
),
section(
'支持格式',