html2apk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +472 -0
  2. package/bin/html2apk-desktop.js +23 -0
  3. package/bin/html2apk.js +19 -0
  4. package/examples/minimal/app.json +27 -0
  5. package/examples/minimal/dist/MeuApp-1.0.0-debug.apk +0 -0
  6. package/examples/minimal/index.html +41 -0
  7. package/html2apk.png +0 -0
  8. package/index.js +3 -0
  9. package/package.json +76 -0
  10. package/src/android/README.md +7 -0
  11. package/src/bridge/install-bridge.js +16 -0
  12. package/src/cli/index.js +163 -0
  13. package/src/cordova/apk-finder.js +45 -0
  14. package/src/cordova/config-xml.js +110 -0
  15. package/src/cordova/project.js +56 -0
  16. package/src/core/build-apk.js +189 -0
  17. package/src/core/config.js +99 -0
  18. package/src/core/defaults.js +37 -0
  19. package/src/core/validation.js +58 -0
  20. package/src/desktop/main.js +522 -0
  21. package/src/desktop/preload.js +30 -0
  22. package/src/desktop/renderer/index.html +323 -0
  23. package/src/desktop/renderer/renderer.js +1074 -0
  24. package/src/desktop/renderer/styles.css +1208 -0
  25. package/src/index.js +12 -0
  26. package/src/runtime-manager/doctor.js +164 -0
  27. package/src/runtime-manager/index.js +190 -0
  28. package/src/templates/cordova-plugin-html2apk-bridge/package.json +16 -0
  29. package/src/templates/cordova-plugin-html2apk-bridge/plugin.xml +39 -0
  30. package/src/templates/cordova-plugin-html2apk-bridge/src/android/BootReceiver.java +20 -0
  31. package/src/templates/cordova-plugin-html2apk-bridge/src/android/Html2ApkBridge.java +375 -0
  32. package/src/templates/cordova-plugin-html2apk-bridge/src/android/NotificationReceiver.java +112 -0
  33. package/src/templates/cordova-plugin-html2apk-bridge/src/android/NotificationStore.java +91 -0
  34. package/src/templates/cordova-plugin-html2apk-bridge/www/html2apk-bridge.js +129 -0
  35. package/src/utils/command-runner.js +124 -0
  36. package/src/utils/fs-extra.js +111 -0
@@ -0,0 +1,323 @@
1
+ <!doctype html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>html2apk</title>
7
+ <script>
8
+ (function () {
9
+ var theme = localStorage.getItem("html2apk.theme") === "dark" ? "dark" : "light";
10
+ document.documentElement.dataset.theme = theme;
11
+ })();
12
+ </script>
13
+ <link rel="stylesheet" href="./styles.css">
14
+ </head>
15
+ <body>
16
+ <div id="creditOverlay" class="boot-overlay">
17
+ <div class="boot-card">
18
+ <img src="../../../html2apk.png" alt="html2apk" class="boot-icon">
19
+ <span class="boot-kicker">html2apk</span>
20
+ <h1 data-i18n="creditTitle">Creditos iniciais</h1>
21
+ <p data-i18n="creditText">Criado por Dev Caio Multiversando</p>
22
+ <div class="boot-loader"><span></span></div>
23
+ </div>
24
+ </div>
25
+
26
+ <div id="languageOverlay" class="modal-overlay hidden">
27
+ <section class="language-card">
28
+ <img src="../../../html2apk.png" alt="html2apk" class="language-icon">
29
+ <p class="eyebrow">html2apk</p>
30
+ <h2>Escolha seu idioma</h2>
31
+ <p>Choose your language for the interface and build feedback.</p>
32
+ <div class="language-actions">
33
+ <button class="primary-action" data-language-choice="pt">Portugues</button>
34
+ <button class="secondary-action" data-language-choice="en">English</button>
35
+ </div>
36
+ </section>
37
+ </div>
38
+
39
+ <div id="dragRegion" class="drag-region" aria-hidden="true"></div>
40
+ <div class="window-controls" aria-label="Window controls">
41
+ <button id="minimizeButton" type="button" aria-label="Minimize">_</button>
42
+ <button id="maximizeButton" type="button" aria-label="Maximize">[]</button>
43
+ <button id="closeButton" class="close-control" type="button" aria-label="Close">X</button>
44
+ </div>
45
+
46
+ <div class="app-shell">
47
+ <aside class="sidebar">
48
+ <div class="brand">
49
+ <img src="../../../html2apk.png" alt="" class="brand-icon">
50
+ <div>
51
+ <strong>html<span>2apk</span></strong>
52
+ <small id="appVersion">v0.1.0</small>
53
+ </div>
54
+ </div>
55
+
56
+ <nav class="nav-list" aria-label="Main">
57
+ <button class="nav-item active" data-view="home"><span class="nav-icon">H</span><span data-i18n="navHome">Inicio</span></button>
58
+ <button class="nav-item" data-view="settings"><span class="nav-icon">C</span><span data-i18n="navSettings">Configuracoes</span></button>
59
+ <button class="nav-item" data-view="appearance"><span class="nav-icon">A</span><span data-i18n="navAppearance">Aparencia</span></button>
60
+ <button class="nav-item" data-view="build"><span class="nav-icon">B</span><span data-i18n="navBuild">Build</span></button>
61
+ <button class="nav-item" data-view="logs"><span class="nav-icon">L</span><span data-i18n="navLogs">Logs</span></button>
62
+ </nav>
63
+
64
+ <div class="sidebar-bottom">
65
+ <button class="nav-item" data-view="help"><span class="nav-icon">?</span><span data-i18n="navHelp">Ajuda</span></button>
66
+ <button id="themeToggle" class="theme-row" type="button">
67
+ <span class="nav-icon">T</span>
68
+ <span data-i18n="theme">Tema</span>
69
+ <strong id="themeName" data-i18n="themeLight">Claro</strong>
70
+ </button>
71
+ </div>
72
+ </aside>
73
+
74
+ <main class="main">
75
+ <section id="view-home" class="view active">
76
+ <header class="view-header">
77
+ <div>
78
+ <p class="eyebrow" data-i18n="homeEyebrow">Comece aqui</p>
79
+ <h1 data-i18n="homeTitle">Arraste a pasta do projeto para o html2apk</h1>
80
+ </div>
81
+ <button id="selectFolderButton" class="secondary-action" type="button" data-i18n="chooseFolder">Escolher pasta</button>
82
+ </header>
83
+
84
+ <div id="dropZone" class="drop-zone">
85
+ <div class="folder-illustration">
86
+ <div class="folder-tab"></div>
87
+ <div class="folder-body"></div>
88
+ <div class="upload-mark"></div>
89
+ </div>
90
+ <h2 data-i18n="dropTitle">Solte a pasta do seu projeto HTML aqui</h2>
91
+ <p data-i18n="dropText">Depois confirme o build. O APK sera salvo em dist.</p>
92
+ <div class="info-pill" data-i18n="indexHint">A pasta deve conter index.html ou configurar entryFile no app.json</div>
93
+ </div>
94
+
95
+ <section id="projectSummary" class="summary-grid hidden">
96
+ <article class="summary-card">
97
+ <span data-i18n="project">Projeto</span>
98
+ <strong id="projectName">-</strong>
99
+ <small id="projectPath">-</small>
100
+ </article>
101
+ <article class="summary-card">
102
+ <span>app.json</span>
103
+ <strong id="configStatus">-</strong>
104
+ <small data-i18n="configHint">Configuracao detectada</small>
105
+ </article>
106
+ <article class="summary-card">
107
+ <span>index.html</span>
108
+ <strong id="entryStatus">-</strong>
109
+ <small id="entryPath">-</small>
110
+ </article>
111
+ </section>
112
+
113
+ <section class="action-strip">
114
+ <button id="nextSettingsButton" class="primary-action" type="button" disabled data-i18n="continueSettings">Continuar para configuracoes</button>
115
+ </section>
116
+ </section>
117
+
118
+ <section id="view-settings" class="view">
119
+ <header class="view-header compact">
120
+ <div>
121
+ <p class="eyebrow" data-i18n="settingsEyebrow">Antes de compilar</p>
122
+ <h1 data-i18n="settingsTitle">Configuracoes do build</h1>
123
+ </div>
124
+ </header>
125
+
126
+ <div class="settings-grid">
127
+ <label class="field">
128
+ <span data-i18n="appName">Nome do app</span>
129
+ <input id="appNameInput" type="text" placeholder="MeuApp">
130
+ </label>
131
+ <label class="field">
132
+ <span data-i18n="packageId">Package ID</span>
133
+ <input id="packageIdInput" type="text" placeholder="com.seuapp.meuapp">
134
+ </label>
135
+ <label class="field">
136
+ <span data-i18n="appVersion">Versao do app</span>
137
+ <input id="versionInput" type="text" placeholder="1.0.0">
138
+ </label>
139
+ <label class="field">
140
+ <span data-i18n="mode">Modo</span>
141
+ <select id="modeInput">
142
+ <option value="" data-i18n="chooseMode">Escolha o modo</option>
143
+ <option value="fullscreen">fullscreen</option>
144
+ <option value="standalone">standalone</option>
145
+ </select>
146
+ </label>
147
+ <label class="field">
148
+ <span>cordova-android</span>
149
+ <input id="androidPlatformInput" type="text" placeholder="android@15.0.0">
150
+ </label>
151
+ <div class="field icon-field">
152
+ <span data-i18n="appIcon">Icone do app</span>
153
+ <div class="icon-picker">
154
+ <img id="iconPreview" src="../../../html2apk.png" alt="">
155
+ <div>
156
+ <input id="iconPathInput" type="text" readonly placeholder="icon.png">
157
+ <button id="selectIconButton" class="secondary-action" type="button" data-i18n="chooseIcon">Escolher icone</button>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+
163
+ <div class="toggle-grid">
164
+ <label class="toggle-card">
165
+ <input id="debugInput" type="checkbox">
166
+ <span>
167
+ <strong data-i18n="debugBuild">Debug tecnico</strong>
168
+ <small data-i18n="debugBuildText">Mantem a pasta Cordova temporaria para inspecao.</small>
169
+ </span>
170
+ </label>
171
+ <label class="toggle-card">
172
+ <input id="releaseInput" type="checkbox">
173
+ <span>
174
+ <strong data-i18n="releaseBuild">Release</strong>
175
+ <small data-i18n="releaseBuildText">Usa configuracao de assinatura se houver keystore.</small>
176
+ </span>
177
+ </label>
178
+ </div>
179
+
180
+ <div id="settingsValidation" class="validation-panel hidden"></div>
181
+ <section class="action-strip">
182
+ <button id="settingsNextButton" class="primary-action" type="button" data-i18n="reviewBuild">Revisar build</button>
183
+ </section>
184
+ </section>
185
+
186
+ <section id="view-appearance" class="view">
187
+ <header class="view-header compact">
188
+ <div>
189
+ <p class="eyebrow" data-i18n="appearanceEyebrow">Preferencias</p>
190
+ <h1 data-i18n="appearanceTitle">Idioma e tema</h1>
191
+ </div>
192
+ </header>
193
+ <div class="preference-row">
194
+ <div>
195
+ <strong data-i18n="language">Idioma</strong>
196
+ <p data-i18n="languageText">Escolha como os feedbacks aparecem durante o build.</p>
197
+ </div>
198
+ <div class="segmented">
199
+ <button data-language-choice="pt">PT</button>
200
+ <button data-language-choice="en">EN</button>
201
+ </div>
202
+ </div>
203
+ <div class="preference-row">
204
+ <div>
205
+ <strong data-i18n="theme">Tema</strong>
206
+ <p data-i18n="themeText">O botao tambem fica na barra lateral para acesso rapido.</p>
207
+ </div>
208
+ <button id="themeToggleLarge" class="secondary-action" type="button" data-i18n="toggleTheme">Alternar tema</button>
209
+ </div>
210
+ </section>
211
+
212
+ <section id="view-build" class="view">
213
+ <header class="view-header compact">
214
+ <div>
215
+ <p class="eyebrow" data-i18n="buildEyebrow">Revisao</p>
216
+ <h1 data-i18n="buildTitle">Confirme as informacoes e gere o APK</h1>
217
+ </div>
218
+ <button id="doctorButton" class="secondary-action" type="button" disabled data-i18n="runDoctor">Verificar ambiente</button>
219
+ </header>
220
+ <div class="progress-panel">
221
+ <div class="progress-copy">
222
+ <span data-i18n="progressLabel">Progresso</span>
223
+ <strong id="progressText" data-i18n="progressIdle">Aguardando pasta</strong>
224
+ </div>
225
+ <div class="progress-track" aria-hidden="true">
226
+ <div id="progressBar" class="progress-bar"></div>
227
+ </div>
228
+ <strong id="progressPercent" class="progress-percent">0%</strong>
229
+ </div>
230
+ <div id="reviewGrid" class="review-grid"></div>
231
+ <div class="pipeline">
232
+ <article class="step-card" data-step="folder"><span>01</span><strong data-i18n="stepFolder">Pasta recebida</strong><small id="stepFolderText">-</small></article>
233
+ <article class="step-card" data-step="doctor"><span>02</span><strong data-i18n="stepDoctor">Ambiente verificado</strong><small id="stepDoctorText">-</small></article>
234
+ <article class="step-card" data-step="settings"><span>03</span><strong data-i18n="stepSettings">Configuracoes completas</strong><small id="stepSettingsText">-</small></article>
235
+ <article class="step-card" data-step="build"><span>04</span><strong data-i18n="stepBuild">APK gerado</strong><small id="stepBuildText">-</small></article>
236
+ </div>
237
+ <section class="action-strip">
238
+ <button id="buildButton" class="primary-action" type="button" disabled data-i18n="startBuild">Gerar APK</button>
239
+ </section>
240
+ <div id="resultPanel" class="result-panel hidden">
241
+ <div>
242
+ <strong data-i18n="apkReady">APK pronto</strong>
243
+ <p id="apkPath">-</p>
244
+ </div>
245
+ <div class="result-actions">
246
+ <button id="openDistButton" class="secondary-action" type="button" data-i18n="openDist">Abrir dist</button>
247
+ <button id="showApkButton" class="primary-action" type="button" data-i18n="showApk">Mostrar APK</button>
248
+ </div>
249
+ </div>
250
+ </section>
251
+
252
+ <section id="view-success" class="view success-view">
253
+ <div class="success-panel">
254
+ <img src="../../../html2apk.png" alt="" class="success-icon">
255
+ <p class="eyebrow" data-i18n="successEyebrow">Concluido</p>
256
+ <h1 data-i18n="successTitle">APK gerado com sucesso</h1>
257
+ <p data-i18n="successText">Seu arquivo Android esta pronto na pasta dist.</p>
258
+ <code id="successApkPath">-</code>
259
+ <div class="result-actions">
260
+ <button id="successOpenDistButton" class="secondary-action" type="button" data-i18n="openDist">Abrir dist</button>
261
+ <button id="successShowApkButton" class="primary-action" type="button" data-i18n="showApk">Mostrar APK</button>
262
+ <button id="newBuildButton" class="secondary-action" type="button" data-i18n="newBuild">Novo build</button>
263
+ </div>
264
+ </div>
265
+ </section>
266
+
267
+ <section id="view-logs" class="view">
268
+ <header class="view-header compact">
269
+ <div>
270
+ <p class="eyebrow" data-i18n="logsEyebrow">Ao vivo</p>
271
+ <h1 data-i18n="logsTitle">Logs do processo</h1>
272
+ </div>
273
+ <button id="clearLogsButton" class="secondary-action" type="button" data-i18n="clearLogs">Limpar logs</button>
274
+ </header>
275
+ <div id="logConsole" class="log-console"></div>
276
+ </section>
277
+
278
+ <section id="view-help" class="view">
279
+ <header class="view-header compact">
280
+ <div>
281
+ <p class="eyebrow" data-i18n="helpEyebrow">Sem misterio</p>
282
+ <h1 data-i18n="helpTitle">Doctor, build e dependencias</h1>
283
+ </div>
284
+ </header>
285
+ <div class="help-grid">
286
+ <article>
287
+ <strong>doctor</strong>
288
+ <p data-i18n="helpDoctor">Verifica se Java, Gradle, Cordova e Android SDK estao prontos. Nao gera APK.</p>
289
+ </article>
290
+ <article>
291
+ <strong>build</strong>
292
+ <p data-i18n="helpBuild">Cria um projeto Cordova temporario, copia seu app web e gera o arquivo APK em dist.</p>
293
+ </article>
294
+ <article>
295
+ <strong data-i18n="helpDepsTitle">Dependencias no EXE</strong>
296
+ <p data-i18n="helpDeps">O executavel empacota html2apk, a interface e dependencias Node/Cordova. JDK e Android SDK ainda precisam existir na maquina por tamanho e licenca.</p>
297
+ </article>
298
+ </div>
299
+ </section>
300
+ </main>
301
+ </div>
302
+
303
+ <section class="bottom-log-bar" aria-label="Live logs">
304
+ <div class="bottom-log-header">
305
+ <strong data-i18n="bottomLogsTitle">Logs ao vivo</strong>
306
+ <div class="bottom-log-actions">
307
+ <button id="bottomToggleLogsButton" class="secondary-action compact-action" type="button">Ocultar logs</button>
308
+ <button id="bottomClearLogsButton" class="secondary-action compact-action" type="button" data-i18n="clearLogs">Limpar logs</button>
309
+ </div>
310
+ </div>
311
+ <div id="bottomLogConsole" class="log-console bottom-log-console"></div>
312
+ </section>
313
+
314
+ <footer class="statusbar">
315
+ <span id="statusDot" class="status-dot"></span>
316
+ <span id="statusText" data-i18n="ready">Pronto</span>
317
+ <button id="toggleLogsButton" class="status-log-toggle" type="button">Mostrar logs</button>
318
+ <span class="status-credit">html2apk - Dev Caio Multiversando</span>
319
+ </footer>
320
+
321
+ <script src="./renderer.js"></script>
322
+ </body>
323
+ </html>