adjacent-dev-client 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.
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/android-dev.d.ts +4 -0
- package/dist/android-dev.d.ts.map +1 -0
- package/dist/android-dev.js +239 -0
- package/dist/android-dev.js.map +1 -0
- package/dist/android-wrapper.d.ts +63 -0
- package/dist/android-wrapper.d.ts.map +1 -0
- package/dist/android-wrapper.js +337 -0
- package/dist/android-wrapper.js.map +1 -0
- package/dist/android.d.ts +17 -0
- package/dist/android.d.ts.map +1 -0
- package/dist/android.js +153 -0
- package/dist/android.js.map +1 -0
- package/dist/checks.d.ts +21 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +119 -0
- package/dist/checks.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/tunnel.d.ts +11 -0
- package/dist/tunnel.d.ts.map +1 -0
- package/dist/tunnel.js +90 -0
- package/dist/tunnel.js.map +1 -0
- package/package.json +62 -0
package/CHANGELOG.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Eric Kweyunga
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# adjacent-dev-client
|
|
2
|
+
|
|
3
|
+
Runs an Adjacent app on a real Android device, over a trusted tunnel and inside
|
|
4
|
+
a Trusted Web Activity.
|
|
5
|
+
|
|
6
|
+
## Documentation
|
|
7
|
+
|
|
8
|
+
- [Android development](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/android.md)
|
|
9
|
+
- [Checking the toolchain](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/doctor.md)
|
|
10
|
+
- [All the documentation](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/README.md)
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install --save-dev adjacent-dev-client
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Everything else in Adjacent works without it. Install it when you want to run
|
|
19
|
+
the app on a device rather than in a browser:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
adj dev --android
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`adjacent-cli` loads this only when a command asks for a device, so a project
|
|
26
|
+
that never does pays nothing for it. That matters: the Android toolchain it
|
|
27
|
+
carries is most of what installing Adjacent would otherwise cost.
|
|
28
|
+
|
|
29
|
+
## What it carries
|
|
30
|
+
|
|
31
|
+
- Android device and emulator discovery through ADB
|
|
32
|
+
- The Trusted Web Activity wrapper, built with Bubblewrap
|
|
33
|
+
- Digital Asset Links generated from the wrapper's signing certificate
|
|
34
|
+
- The trusted HTTPS development tunnel
|
|
35
|
+
- `adj doctor`, including the Play Store quality criteria
|
|
36
|
+
|
|
37
|
+
## Known advisories
|
|
38
|
+
|
|
39
|
+
`bun audit` reports three advisories reached through `@bubblewrap/core`, none of
|
|
40
|
+
which can be fixed without breaking the Android build, and one of which has no
|
|
41
|
+
patched release anywhere. They are development tooling on a developer's machine,
|
|
42
|
+
no application ships them, and the high-severity one is in a code path Adjacent
|
|
43
|
+
never calls. The reasoning is written out in
|
|
44
|
+
[SECURITY.md](https://github.com/erickweyunga/adjacent-framework/blob/main/SECURITY.md).
|
|
45
|
+
|
|
46
|
+
## Issues
|
|
47
|
+
|
|
48
|
+
If you hit a problem using this package, please
|
|
49
|
+
[report it here](https://github.com/erickweyunga/adjacent-framework/issues/new).
|
|
50
|
+
|
|
51
|
+
## Contributing
|
|
52
|
+
|
|
53
|
+
Issues and pull requests are welcome. Please read the
|
|
54
|
+
[contributing guide](https://github.com/erickweyunga/adjacent-framework/blob/main/CONTRIBUTING.md)
|
|
55
|
+
first.
|
|
56
|
+
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
MIT
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AndroidDevOptions, AndroidInstallOptions } from "adjacent-cli";
|
|
2
|
+
export declare function runAndroidDev(options: AndroidDevOptions): Promise<void>;
|
|
3
|
+
export declare function runAndroidInstall(options: AndroidInstallOptions): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=android-dev.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-dev.d.ts","sourceRoot":"","sources":["../src/android-dev.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAsF7E,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqI7E;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmErF"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { get } from "node:https";
|
|
3
|
+
import { createServer } from "node:net";
|
|
4
|
+
import { installAndroidApk, isAndroidPackageInstalled, openAndroidChrome, openAndroidPackage, prepareAndroidChrome, removeAndroidReverse, resolveAdbPath, selectAndroidDevice, } from "./android.js";
|
|
5
|
+
import { ANDROID_PACKAGE_ID, buildAndroidWrapper, readAndroidAssetLink, readExistingAndroidWrapper, } from "./android-wrapper.js";
|
|
6
|
+
import { clearDevChannelState, startDevChannel, writeDevChannelState, } from "adjacent-cli";
|
|
7
|
+
import { KEY_HELP, watchKeys } from "adjacent-cli";
|
|
8
|
+
import { resolvePackageManager } from "adjacent-cli";
|
|
9
|
+
import { killProcessTree, startCommand, terminateProcessTree } from "adjacent-cli";
|
|
10
|
+
import { createShutdown } from "adjacent-cli";
|
|
11
|
+
import { startAdjacentTunnel } from "./tunnel.js";
|
|
12
|
+
import { intro, outro, step, success, task } from "adjacent-cli";
|
|
13
|
+
async function assertPortAvailable(port) {
|
|
14
|
+
await new Promise((resolveAvailable, rejectUnavailable) => {
|
|
15
|
+
const probe = createServer();
|
|
16
|
+
probe.once("error", () => {
|
|
17
|
+
rejectUnavailable(new Error(`Port ${port} is already in use. Stop the existing development server or pass --port PORT.`));
|
|
18
|
+
});
|
|
19
|
+
probe.listen(port, "::", () => {
|
|
20
|
+
probe.close((error) => {
|
|
21
|
+
if (error)
|
|
22
|
+
rejectUnavailable(error);
|
|
23
|
+
else
|
|
24
|
+
resolveAvailable();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function isServerReady(url) {
|
|
30
|
+
if (!url.startsWith("https:")) {
|
|
31
|
+
try {
|
|
32
|
+
return (await fetch(url)).ok;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return new Promise((resolveReady) => {
|
|
39
|
+
const request = get(url, { rejectUnauthorized: false }, (response) => {
|
|
40
|
+
response.resume();
|
|
41
|
+
resolveReady((response.statusCode ?? 500) < 400);
|
|
42
|
+
});
|
|
43
|
+
request.once("error", () => resolveReady(false));
|
|
44
|
+
request.end();
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async function waitForServer(url, server, timeoutMilliseconds = 30_000) {
|
|
48
|
+
const deadline = Date.now() + timeoutMilliseconds;
|
|
49
|
+
while (Date.now() < deadline) {
|
|
50
|
+
if (server.exitCode !== null) {
|
|
51
|
+
throw new Error(`Next.js development server exited with code ${server.exitCode}.`);
|
|
52
|
+
}
|
|
53
|
+
if (await isServerReady(url))
|
|
54
|
+
return;
|
|
55
|
+
await new Promise((resolveDelay) => setTimeout(resolveDelay, 250));
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`Next.js did not become ready at ${url} within 30 seconds.`);
|
|
58
|
+
}
|
|
59
|
+
export async function runAndroidDev(options) {
|
|
60
|
+
intro("Adjacent Android development");
|
|
61
|
+
const projectRoot = resolve(options.projectRoot);
|
|
62
|
+
await assertPortAvailable(options.port);
|
|
63
|
+
const adb = await resolveAdbPath();
|
|
64
|
+
const serial = await selectAndroidDevice(adb, options.device);
|
|
65
|
+
const localUrl = `http://localhost:${options.port}`;
|
|
66
|
+
const healthUrl = `http://127.0.0.1:${options.port}`;
|
|
67
|
+
success(`Using Android device ${serial}`);
|
|
68
|
+
const tunnel = options.standalone
|
|
69
|
+
? await task("Starting the secure development tunnel", () => startAdjacentTunnel(projectRoot, options.port, options.verbose))
|
|
70
|
+
: undefined;
|
|
71
|
+
if (!tunnel) {
|
|
72
|
+
await task("Connecting the development server to Android", () => prepareAndroidChrome(adb, serial, options.port));
|
|
73
|
+
}
|
|
74
|
+
const channel = await startDevChannel();
|
|
75
|
+
const manager = await resolvePackageManager({ projectRoot });
|
|
76
|
+
const dev = manager.run("dev", ["--port", String(options.port)]);
|
|
77
|
+
step("Starting the Next.js development server");
|
|
78
|
+
// The CLI owns the keyboard, so the server never reads this terminal.
|
|
79
|
+
const server = startCommand(dev.command, dev.args, {
|
|
80
|
+
cwd: projectRoot,
|
|
81
|
+
detached: true,
|
|
82
|
+
env: {
|
|
83
|
+
...process.env,
|
|
84
|
+
ADJACENT_DEV_CHANNEL_URL: channel.url,
|
|
85
|
+
...(tunnel ? {
|
|
86
|
+
ADJACENT_ASSET_LINKS_URL: tunnel.assetLinksUrl,
|
|
87
|
+
ADJACENT_DEV_ORIGIN: tunnel.origin,
|
|
88
|
+
} : null),
|
|
89
|
+
},
|
|
90
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
91
|
+
});
|
|
92
|
+
let restoreTerminal = () => undefined;
|
|
93
|
+
const shutdown = createShutdown({
|
|
94
|
+
exit: (code) => process.exit(code),
|
|
95
|
+
kill: () => {
|
|
96
|
+
killProcessTree(server, "SIGKILL");
|
|
97
|
+
tunnel?.process.kill("SIGKILL");
|
|
98
|
+
},
|
|
99
|
+
notify: step,
|
|
100
|
+
release: async () => {
|
|
101
|
+
await clearDevChannelState(projectRoot).catch(() => undefined);
|
|
102
|
+
await channel.stop().catch(() => undefined);
|
|
103
|
+
await terminateProcessTree(server);
|
|
104
|
+
if (tunnel)
|
|
105
|
+
await tunnel.stop().catch(() => undefined);
|
|
106
|
+
try {
|
|
107
|
+
await removeAndroidReverse(adb, serial, options.port);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// The device may have already disconnected.
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
restore: () => restoreTerminal(),
|
|
114
|
+
});
|
|
115
|
+
const stopListening = shutdown.listen();
|
|
116
|
+
try {
|
|
117
|
+
await task("Waiting for the Next.js development server", () => waitForServer(healthUrl, server));
|
|
118
|
+
if (tunnel) {
|
|
119
|
+
const manifestUrl = `${tunnel.origin}/manifest.webmanifest`;
|
|
120
|
+
await task("Waiting for the public development URL", () => waitForServer(tunnel.origin, tunnel.process, 45_000));
|
|
121
|
+
let wrapper = await readExistingAndroidWrapper(projectRoot, manifestUrl);
|
|
122
|
+
const wrapperNeedsBuild = !wrapper;
|
|
123
|
+
const installed = await isAndroidPackageInstalled(adb, serial, ANDROID_PACKAGE_ID);
|
|
124
|
+
if (!wrapper) {
|
|
125
|
+
wrapper = await task("Building the Adjacent Android wrapper", () => buildAndroidWrapper(projectRoot, manifestUrl));
|
|
126
|
+
}
|
|
127
|
+
tunnel.setAssetLink(await readAndroidAssetLink(wrapper));
|
|
128
|
+
await task("Verifying the Android application link", () => waitForServer(`${tunnel.origin}/.well-known/assetlinks.json`, tunnel.process));
|
|
129
|
+
if (!installed || wrapperNeedsBuild) {
|
|
130
|
+
await task("Installing the Android wrapper", () => installAndroidApk(adb, serial, wrapper.apkPath));
|
|
131
|
+
success(`Installed ${wrapper.packageId} on ${serial}`);
|
|
132
|
+
}
|
|
133
|
+
await task("Opening the standalone app", () => openAndroidPackage(adb, serial, ANDROID_PACKAGE_ID));
|
|
134
|
+
outro(`Opened ${tunnel.origin} on ${serial}`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
await task("Opening Chrome on Android", () => openAndroidChrome(adb, serial, localUrl));
|
|
138
|
+
outro(`Opened ${localUrl} in Chrome on ${serial}`);
|
|
139
|
+
}
|
|
140
|
+
await writeDevChannelState(projectRoot, {
|
|
141
|
+
channelUrl: channel.url,
|
|
142
|
+
origin: tunnel?.origin ?? localUrl,
|
|
143
|
+
pid: process.pid,
|
|
144
|
+
port: options.port,
|
|
145
|
+
});
|
|
146
|
+
const send = async (command) => {
|
|
147
|
+
const clients = channel.publish(command);
|
|
148
|
+
step(clients === 0
|
|
149
|
+
? "No open app is connected to the development channel."
|
|
150
|
+
: `Sent ${command.type} to ${clients} connected app${clients === 1 ? "" : "s"}.`);
|
|
151
|
+
};
|
|
152
|
+
const reopen = async () => {
|
|
153
|
+
if (tunnel)
|
|
154
|
+
await openAndroidPackage(adb, serial, ANDROID_PACKAGE_ID);
|
|
155
|
+
else
|
|
156
|
+
await openAndroidChrome(adb, serial, localUrl);
|
|
157
|
+
step(`Reopened the app on ${serial}.`);
|
|
158
|
+
};
|
|
159
|
+
step(KEY_HELP);
|
|
160
|
+
restoreTerminal = watchKeys({
|
|
161
|
+
onInterrupt: () => shutdown.request(130),
|
|
162
|
+
onOpen: reopen,
|
|
163
|
+
onQuit: () => shutdown.request(0),
|
|
164
|
+
onSend: send,
|
|
165
|
+
onShowHelp: () => step(KEY_HELP),
|
|
166
|
+
});
|
|
167
|
+
try {
|
|
168
|
+
await new Promise((resolveExit, rejectExit) => {
|
|
169
|
+
server.once("error", rejectExit);
|
|
170
|
+
server.once("exit", () => resolveExit());
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
restoreTerminal();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
stopListening();
|
|
179
|
+
await shutdown.release();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export async function runAndroidInstall(options) {
|
|
183
|
+
intro("Adjacent Android installation");
|
|
184
|
+
const projectRoot = resolve(options.projectRoot);
|
|
185
|
+
await assertPortAvailable(options.port);
|
|
186
|
+
const adb = await resolveAdbPath();
|
|
187
|
+
const serial = await selectAndroidDevice(adb, options.device);
|
|
188
|
+
const healthUrl = `http://127.0.0.1:${options.port}`;
|
|
189
|
+
success(`Using Android device ${serial}`);
|
|
190
|
+
const tunnel = await task("Starting the secure development tunnel", () => startAdjacentTunnel(projectRoot, options.port, options.verbose));
|
|
191
|
+
step("Starting the Next.js development server");
|
|
192
|
+
const manager = await resolvePackageManager({ projectRoot });
|
|
193
|
+
const dev = manager.run("dev", ["--port", String(options.port)]);
|
|
194
|
+
const server = startCommand(dev.command, dev.args, {
|
|
195
|
+
cwd: projectRoot,
|
|
196
|
+
detached: true,
|
|
197
|
+
env: {
|
|
198
|
+
...process.env,
|
|
199
|
+
ADJACENT_ASSET_LINKS_URL: tunnel.assetLinksUrl,
|
|
200
|
+
ADJACENT_DEV_ORIGIN: tunnel.origin,
|
|
201
|
+
},
|
|
202
|
+
stdio: ["ignore", "inherit", "inherit"],
|
|
203
|
+
});
|
|
204
|
+
const shutdown = createShutdown({
|
|
205
|
+
exit: (code) => process.exit(code),
|
|
206
|
+
kill: () => {
|
|
207
|
+
killProcessTree(server, "SIGKILL");
|
|
208
|
+
tunnel.process.kill("SIGKILL");
|
|
209
|
+
},
|
|
210
|
+
notify: step,
|
|
211
|
+
release: async () => {
|
|
212
|
+
await terminateProcessTree(server);
|
|
213
|
+
await tunnel.stop().catch(() => undefined);
|
|
214
|
+
try {
|
|
215
|
+
await removeAndroidReverse(adb, serial, options.port);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// The device may have disconnected.
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
restore: () => undefined,
|
|
222
|
+
});
|
|
223
|
+
const stopListening = shutdown.listen();
|
|
224
|
+
try {
|
|
225
|
+
await task("Waiting for the Next.js development server", () => waitForServer(healthUrl, server));
|
|
226
|
+
await task("Waiting for the public development URL", () => waitForServer(tunnel.origin, tunnel.process, 45_000));
|
|
227
|
+
const wrapper = await task("Building the Adjacent Android wrapper", () => buildAndroidWrapper(projectRoot, `${tunnel.origin}/manifest.webmanifest`));
|
|
228
|
+
tunnel.setAssetLink(await readAndroidAssetLink(wrapper));
|
|
229
|
+
await task("Verifying the Android application link", () => waitForServer(`${tunnel.origin}/.well-known/assetlinks.json`, tunnel.process));
|
|
230
|
+
await task("Installing the Android wrapper", () => installAndroidApk(adb, serial, wrapper.apkPath));
|
|
231
|
+
success(`Installed ${wrapper.packageId} on ${serial}`);
|
|
232
|
+
outro("Run adj dev --android to launch it.");
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
stopListening();
|
|
236
|
+
await shutdown.release();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=android-dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-dev.js","sourceRoot":"","sources":["../src/android-dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export declare const ANDROID_PACKAGE_ID = "dev.adjacent.runner";
|
|
2
|
+
export interface AndroidWrapper {
|
|
3
|
+
readonly apkPath: string;
|
|
4
|
+
readonly packageId: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AndroidAssetLink {
|
|
7
|
+
readonly packageId: string;
|
|
8
|
+
readonly sha256Fingerprint: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function isSupportedJdkRelease(releaseFile: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Normalises a SHA-256 certificate digest from either `apksigner` (lowercase,
|
|
13
|
+
* unseparated) or `keytool` (uppercase, colon-separated) into the colon form
|
|
14
|
+
* that a Digital Asset Links statement expects.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseCertificateFingerprint(output: string): string | undefined;
|
|
17
|
+
export interface AndroidChrome {
|
|
18
|
+
navigationColor?: string;
|
|
19
|
+
navigationColorDark?: string;
|
|
20
|
+
navigationDividerColor?: string;
|
|
21
|
+
navigationDividerColorDark?: string;
|
|
22
|
+
themeColorDark?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Reads the wrapper chrome Adjacent publishes alongside the web manifest.
|
|
26
|
+
*
|
|
27
|
+
* A web manifest has one `theme_color` and nothing at all for the Android
|
|
28
|
+
* navigation bar, so Bubblewrap falls back to hardcoded defaults for these five
|
|
29
|
+
* fields. Reading them from a namespaced manifest member keeps the CLI free of
|
|
30
|
+
* any dependency on the application's configuration file.
|
|
31
|
+
*/
|
|
32
|
+
export declare function readAndroidChrome(manifestSource: string): AndroidChrome;
|
|
33
|
+
export declare function hashManifestSource(source: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Why an Android application id is invalid, or undefined when it is fine.
|
|
36
|
+
*
|
|
37
|
+
* An application id is a Java package name, which is stricter than the "letters,
|
|
38
|
+
* numbers, periods, hyphens and underscores" that documentation tends to say: a
|
|
39
|
+
* hyphen is not allowed anywhere, a segment cannot begin with a digit, and no
|
|
40
|
+
* segment may be a Java keyword. Each of those fails the Gradle build rather
|
|
41
|
+
* than the packaging step, which is a long way from the mistake.
|
|
42
|
+
*/
|
|
43
|
+
export declare function describePackageIdProblem(packageId: string): string | undefined;
|
|
44
|
+
export declare function describeManifestProblems(manifest: {
|
|
45
|
+
readonly display?: string;
|
|
46
|
+
readonly iconUrl?: string;
|
|
47
|
+
readonly maskableIconUrl?: string;
|
|
48
|
+
readonly packageId?: string;
|
|
49
|
+
readonly startUrl?: string;
|
|
50
|
+
readonly webManifestUrl?: URL | string;
|
|
51
|
+
}): string[];
|
|
52
|
+
export declare function resolveAndroidSdk(): string;
|
|
53
|
+
export declare function buildAndroidWrapper(projectRoot: string, manifestUrl: string): Promise<AndroidWrapper>;
|
|
54
|
+
export declare function readExistingAndroidWrapper(projectRoot: string, manifestUrl: string): Promise<AndroidWrapper | undefined>;
|
|
55
|
+
export declare function readAndroidAssetLink(wrapper: AndroidWrapper): Promise<AndroidAssetLink>;
|
|
56
|
+
export interface AndroidToolchain {
|
|
57
|
+
readonly androidSdk: string;
|
|
58
|
+
readonly javaHome: string;
|
|
59
|
+
readonly licensesAccepted: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Backs `adj doctor`, reporting the toolchain Bubblewrap needs. */
|
|
62
|
+
export declare function inspectAndroidToolchain(): Promise<AndroidToolchain>;
|
|
63
|
+
//# sourceMappingURL=android-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-wrapper.d.ts","sourceRoot":"","sources":["../src/android-wrapper.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAYxD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAQD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ9E;AAKD,MAAM,WAAW,aAAa;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAqBvE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuB9E;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;CACxC,GAAG,MAAM,EAAE,CA2BX;AAgDD,wBAAgB,iBAAiB,IAAI,MAAM,CAW1C;AA0DD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CA2EzB;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAmBrC;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA2B3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED,oEAAoE;AACpE,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAQzE"}
|