@iyexin/mio-android-tools 0.1.1 → 0.1.3

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.
@@ -1,3 +1,4 @@
1
+ export type ToolSource = "env-bundle" | "android-sdk";
1
2
  export interface AndroidTools {
2
3
  /** Java executable. Absolute path when known, otherwise "java" from PATH. */
3
4
  java: string;
@@ -8,7 +9,7 @@ export interface AndroidTools {
8
9
  /** keytool executable, when available. */
9
10
  keytool?: string;
10
11
  /** Where the tools came from. */
11
- source: "env-bundle" | "android-sdk";
12
+ source: ToolSource;
12
13
  /** build-tools version, when source is android-sdk. */
13
14
  buildToolsVersion?: string;
14
15
  /** Android SDK root, when source is android-sdk. */
@@ -16,18 +17,43 @@ export interface AndroidTools {
16
17
  /** JRE home, when the tools bundle contains one. */
17
18
  jreHome?: string;
18
19
  }
20
+ /** What a machine currently has; every field is optional. */
21
+ export interface AndroidToolStatus {
22
+ java?: string;
23
+ jreHome?: string;
24
+ keytool?: string;
25
+ apksignerJar?: string;
26
+ zipalign?: string;
27
+ sdkRoot?: string;
28
+ buildToolsVersion?: string;
29
+ toolsSource?: ToolSource;
30
+ }
31
+ export declare function statusComplete(status: AndroidToolStatus): status is Required<Pick<AndroidToolStatus, "java" | "apksignerJar" | "zipalign">> & AndroidToolStatus;
32
+ export declare function toolsFromStatus(status: AndroidToolStatus): AndroidTools;
33
+ export declare function describeMissing(status: AndroidToolStatus): string;
19
34
  export interface DiscoverOptions {
20
35
  /** Override for tests; defaults to process.env. */
21
36
  env?: NodeJS.ProcessEnv;
22
37
  /** Override for tests; defaults to process.platform. */
23
38
  platform?: NodeJS.Platform;
24
39
  }
40
+ /**
41
+ * Inspect what the machine has without throwing.
42
+ *
43
+ * Tools come from `MIO_ANDROID_TOOLS_DIR` first (a Mio bundle) and then the
44
+ * Android SDK build-tools; Java from the bundle's `jre/`, `MIO_JAVA_HOME`,
45
+ * `JAVA_HOME`, or `PATH`. A partial result is normal: a machine may have Java
46
+ * but no build-tools, or the other way round.
47
+ */
48
+ export declare function inspectAndroidTools(options?: DiscoverOptions): Promise<AndroidToolStatus>;
25
49
  /**
26
50
  * Find a usable Android signing toolchain.
27
51
  *
28
52
  * Priority:
29
53
  * 1. MIO_ANDROID_TOOLS_DIR (a downloaded/bundled toolchain)
30
54
  * 2. ANDROID_HOME / ANDROID_SDK_ROOT / default SDK locations
55
+ *
56
+ * Throws with a message that says exactly what is missing.
31
57
  */
32
58
  export declare function discoverAndroidTools(options?: DiscoverOptions): Promise<AndroidTools>;
33
59
  export declare function describeAndroidTools(tools: AndroidTools): string;
package/dist/discover.js CHANGED
@@ -4,6 +4,36 @@ import { homedir } from "node:os";
4
4
  import { dirname, join } from "node:path";
5
5
  import { MioToolError } from "./errors.js";
6
6
  import { run } from "./exec.js";
7
+ export function statusComplete(status) {
8
+ return Boolean(status.java && status.apksignerJar && status.zipalign);
9
+ }
10
+ export function toolsFromStatus(status) {
11
+ if (!statusComplete(status)) {
12
+ throw new MioToolError("ANDROID_TOOLS_NOT_FOUND", "Android build tools are incomplete", { details: describeMissing(status) });
13
+ }
14
+ return {
15
+ java: status.java,
16
+ apksignerJar: status.apksignerJar,
17
+ zipalign: status.zipalign,
18
+ keytool: status.keytool,
19
+ source: status.toolsSource ?? "android-sdk",
20
+ buildToolsVersion: status.buildToolsVersion,
21
+ sdkRoot: status.sdkRoot,
22
+ jreHome: status.jreHome,
23
+ };
24
+ }
25
+ export function describeMissing(status) {
26
+ const missing = [];
27
+ if (!status.java)
28
+ missing.push("java");
29
+ if (!status.apksignerJar)
30
+ missing.push("apksigner.jar");
31
+ if (!status.zipalign)
32
+ missing.push("zipalign");
33
+ return missing.length === 0
34
+ ? "nothing missing"
35
+ : `missing: ${missing.join(", ")}`;
36
+ }
7
37
  const isWindows = (platform) => platform === "win32";
8
38
  const javaName = (platform) => isWindows(platform) ? "java.exe" : "java";
9
39
  const keytoolName = (platform) => isWindows(platform) ? "keytool.exe" : "keytool";
@@ -71,26 +101,20 @@ async function findJavaFromPath(platform) {
71
101
  }
72
102
  return undefined;
73
103
  }
74
- async function resolveJava(env, platform, preferredHome) {
104
+ async function tryResolveJava(env, platform, preferredHome) {
75
105
  const fromBundle = await findJavaInHome(preferredHome, platform);
76
- if (fromBundle) {
106
+ if (fromBundle)
77
107
  return { java: fromBundle, jreHome: preferredHome };
78
- }
79
108
  const fromMioHome = await findJavaInHome(env.MIO_JAVA_HOME, platform);
80
- if (fromMioHome) {
109
+ if (fromMioHome)
81
110
  return { java: fromMioHome, jreHome: env.MIO_JAVA_HOME };
82
- }
83
111
  const fromJavaHome = await findJavaInHome(env.JAVA_HOME, platform);
84
- if (fromJavaHome) {
112
+ if (fromJavaHome)
85
113
  return { java: fromJavaHome, jreHome: env.JAVA_HOME };
86
- }
87
114
  const fromPath = await findJavaFromPath(platform);
88
- if (fromPath) {
115
+ if (fromPath)
89
116
  return { java: fromPath };
90
- }
91
- throw new MioToolError("JAVA_NOT_FOUND", "Java was not found. Install a JDK/JRE 17+ or place a JRE at <tools>/jre.", {
92
- details: "Set MIO_JAVA_HOME/JAVA_HOME, put java on PATH, or point MIO_ANDROID_TOOLS_DIR at a tools bundle containing jre/.",
93
- });
117
+ return undefined;
94
118
  }
95
119
  async function resolveKeytool(java, platform) {
96
120
  if (java === "java") {
@@ -107,37 +131,6 @@ async function resolveKeytool(java, platform) {
107
131
  const candidate = join(dirname(java), keytoolName(platform));
108
132
  return (await exists(candidate)) ? candidate : undefined;
109
133
  }
110
- async function fromToolsDir(dir, env, platform) {
111
- const apksignerCandidates = [
112
- join(dir, "apksigner.jar"),
113
- join(dir, "lib", "apksigner.jar"),
114
- ];
115
- const zipalignCandidates = [
116
- join(dir, zipalignName(platform)),
117
- join(dir, "bin", zipalignName(platform)),
118
- ];
119
- const apksignerJar = await firstExisting(apksignerCandidates);
120
- const zipalign = await firstExisting(zipalignCandidates);
121
- if (!apksignerJar || !zipalign) {
122
- throw new MioToolError("INVALID_TOOLS_DIR", `MIO_ANDROID_TOOLS_DIR does not look like an Android tools bundle: ${dir}`, {
123
- details: "Expected apksigner.jar (or lib/apksigner.jar), zipalign, and optionally jre/.",
124
- });
125
- }
126
- const jreHomeCandidate = join(dir, "jre");
127
- const jreHome = (await exists(join(jreHomeCandidate, "bin", javaName(platform))))
128
- ? jreHomeCandidate
129
- : undefined;
130
- const { java, jreHome: resolvedJreHome } = await resolveJava(env, platform, jreHome);
131
- const keytool = await resolveKeytool(java, platform);
132
- return {
133
- java,
134
- apksignerJar,
135
- zipalign,
136
- keytool,
137
- source: "env-bundle",
138
- jreHome: resolvedJreHome,
139
- };
140
- }
141
134
  async function firstExisting(candidates) {
142
135
  for (const candidate of candidates) {
143
136
  if (await exists(candidate))
@@ -174,40 +167,65 @@ async function findBuildTools(sdkRoot, platform) {
174
167
  }
175
168
  return undefined;
176
169
  }
177
- async function fromAndroidSdk(env, platform) {
178
- const roots = candidateSdkRoots(env, platform);
179
- for (const sdkRoot of roots) {
180
- if (!(await exists(sdkRoot)))
181
- continue;
182
- const match = await findBuildTools(sdkRoot, platform);
183
- if (!match)
184
- continue;
185
- const apksignerJar = await firstExisting([
186
- join(match.dir, "lib", "apksigner.jar"),
187
- join(match.dir, "apksigner.jar"),
170
+ /**
171
+ * Inspect what the machine has without throwing.
172
+ *
173
+ * Tools come from `MIO_ANDROID_TOOLS_DIR` first (a Mio bundle) and then the
174
+ * Android SDK build-tools; Java from the bundle's `jre/`, `MIO_JAVA_HOME`,
175
+ * `JAVA_HOME`, or `PATH`. A partial result is normal: a machine may have Java
176
+ * but no build-tools, or the other way round.
177
+ */
178
+ export async function inspectAndroidTools(options = {}) {
179
+ const env = options.env ?? process.env;
180
+ const platform = options.platform ?? process.platform;
181
+ const status = {};
182
+ const toolsDir = env.MIO_ANDROID_TOOLS_DIR;
183
+ if (toolsDir) {
184
+ status.apksignerJar = await firstExisting([
185
+ join(toolsDir, "apksigner.jar"),
186
+ join(toolsDir, "lib", "apksigner.jar"),
188
187
  ]);
189
- const zipalign = await firstExisting([
190
- join(match.dir, zipalignName(platform)),
191
- join(match.dir, "bin", zipalignName(platform)),
188
+ status.zipalign = await firstExisting([
189
+ join(toolsDir, zipalignName(platform)),
190
+ join(toolsDir, "bin", zipalignName(platform)),
192
191
  ]);
193
- if (!apksignerJar || !zipalign)
194
- continue;
195
- const { java, jreHome } = await resolveJava(env, platform);
196
- const keytool = await resolveKeytool(java, platform);
197
- return {
198
- java,
199
- apksignerJar,
200
- zipalign,
201
- keytool,
202
- source: "android-sdk",
203
- buildToolsVersion: match.version,
204
- sdkRoot,
205
- jreHome,
206
- };
207
- }
208
- throw new MioToolError("ANDROID_TOOLS_NOT_FOUND", "Android build-tools (apksigner + zipalign) were not found.", {
209
- details: "Set ANDROID_HOME (or MIO_ANDROID_SDK), install Android build-tools 35+, or point MIO_ANDROID_TOOLS_DIR at a Mio tools bundle.",
210
- });
192
+ if (status.apksignerJar && status.zipalign)
193
+ status.toolsSource = "env-bundle";
194
+ const jreHome = join(toolsDir, "jre");
195
+ if (await exists(join(jreHome, "bin", javaName(platform)))) {
196
+ status.jreHome = jreHome;
197
+ }
198
+ }
199
+ if (!status.apksignerJar || !status.zipalign) {
200
+ for (const root of candidateSdkRoots(env, platform)) {
201
+ if (!(await exists(root)))
202
+ continue;
203
+ const match = await findBuildTools(root, platform);
204
+ if (!match)
205
+ continue;
206
+ status.apksignerJar = await firstExisting([
207
+ join(match.dir, "lib", "apksigner.jar"),
208
+ join(match.dir, "apksigner.jar"),
209
+ ]);
210
+ status.zipalign = await firstExisting([
211
+ join(match.dir, zipalignName(platform)),
212
+ join(match.dir, "bin", zipalignName(platform)),
213
+ ]);
214
+ if (status.apksignerJar && status.zipalign) {
215
+ status.toolsSource = "android-sdk";
216
+ status.sdkRoot = root;
217
+ status.buildToolsVersion = match.version;
218
+ break;
219
+ }
220
+ }
221
+ }
222
+ const java = await tryResolveJava(env, platform, status.jreHome);
223
+ if (java) {
224
+ status.java = java.java;
225
+ status.jreHome = java.jreHome ?? status.jreHome;
226
+ status.keytool = await resolveKeytool(java.java, platform);
227
+ }
228
+ return status;
211
229
  }
212
230
  /**
213
231
  * Find a usable Android signing toolchain.
@@ -215,14 +233,22 @@ async function fromAndroidSdk(env, platform) {
215
233
  * Priority:
216
234
  * 1. MIO_ANDROID_TOOLS_DIR (a downloaded/bundled toolchain)
217
235
  * 2. ANDROID_HOME / ANDROID_SDK_ROOT / default SDK locations
236
+ *
237
+ * Throws with a message that says exactly what is missing.
218
238
  */
219
239
  export async function discoverAndroidTools(options = {}) {
220
- const env = options.env ?? process.env;
221
- const platform = options.platform ?? process.platform;
222
- if (env.MIO_ANDROID_TOOLS_DIR) {
223
- return await fromToolsDir(env.MIO_ANDROID_TOOLS_DIR, env, platform);
240
+ const status = await inspectAndroidTools(options);
241
+ if (!status.java) {
242
+ throw new MioToolError("JAVA_NOT_FOUND", "Java was not found. Install a JDK/JRE 17+ or let Mio download one.", {
243
+ details: "Set MIO_JAVA_HOME/JAVA_HOME, put java on PATH, or set MIO_ANDROID_TOOLS_DIR to a tools bundle containing jre/.",
244
+ });
245
+ }
246
+ if (!status.apksignerJar || !status.zipalign) {
247
+ throw new MioToolError("ANDROID_TOOLS_NOT_FOUND", "Android build-tools (apksigner + zipalign) were not found.", {
248
+ details: "Set ANDROID_HOME (or MIO_ANDROID_SDK), install Android build-tools 35+, or point MIO_ANDROID_TOOLS_DIR at a Mio tools bundle.",
249
+ });
224
250
  }
225
- return await fromAndroidSdk(env, platform);
251
+ return toolsFromStatus(status);
226
252
  }
227
253
  export function describeAndroidTools(tools) {
228
254
  const source = tools.source === "android-sdk"
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type AndroidTools } from "./discover.js";
2
+ import { type ToolBundleManifest, type ToolComponent } from "./tool-bundle.js";
3
+ export interface EnsureAndroidToolsOptions {
4
+ /** Manifest object, local path, or URL. Required when something is missing. */
5
+ manifest: ToolBundleManifest | string;
6
+ /** Defaults to ~/.mio/tools/android. */
7
+ cacheDir?: string;
8
+ proxy?: string;
9
+ /** Re-download every requested component even when cached. */
10
+ force?: boolean;
11
+ /** Set false to fail instead of downloading (offline builds, tests). */
12
+ allowDownload?: boolean;
13
+ log?: (message: string) => void;
14
+ }
15
+ export interface EnsureAndroidToolsResult {
16
+ tools: AndroidTools;
17
+ /** Components fetched in this call; empty when the machine had everything. */
18
+ installed: ToolComponent[];
19
+ downloaded: boolean;
20
+ }
21
+ /**
22
+ * Resolve a complete Android toolchain, downloading only what is missing.
23
+ *
24
+ * Existing Java or build-tools are reused: a machine with a JDK but no SDK only
25
+ * fetches `tools` (~1.5 MB), one with build-tools but no Java only fetches
26
+ * `jre` (~18 MB).
27
+ */
28
+ export declare function ensureAndroidTools(options: EnsureAndroidToolsOptions): Promise<EnsureAndroidToolsResult>;
package/dist/ensure.js ADDED
@@ -0,0 +1,45 @@
1
+ import { MioToolError } from "./errors.js";
2
+ import { describeMissing, inspectAndroidTools, statusComplete, toolsFromStatus, } from "./discover.js";
3
+ import { installToolBundle, } from "./tool-bundle.js";
4
+ /**
5
+ * Resolve a complete Android toolchain, downloading only what is missing.
6
+ *
7
+ * Existing Java or build-tools are reused: a machine with a JDK but no SDK only
8
+ * fetches `tools` (~1.5 MB), one with build-tools but no Java only fetches
9
+ * `jre` (~18 MB).
10
+ */
11
+ export async function ensureAndroidTools(options) {
12
+ const log = options.log ?? (() => { });
13
+ let status = await inspectAndroidTools();
14
+ if (statusComplete(status) && !options.force) {
15
+ return { tools: toolsFromStatus(status), installed: [], downloaded: false };
16
+ }
17
+ if (options.allowDownload === false) {
18
+ throw new MioToolError("ANDROID_TOOLS_NOT_FOUND", `Android build tools are incomplete (${describeMissing(status)})`, { details: "Downloading is disabled (MIO_NO_TOOL_DOWNLOAD); install them or allow downloads." });
19
+ }
20
+ const needed = [];
21
+ if (!status.apksignerJar || !status.zipalign)
22
+ needed.push("tools");
23
+ if (!status.java)
24
+ needed.push("jre");
25
+ // A forced refresh reinstalls everything, even when the machine looks ready.
26
+ if (needed.length === 0)
27
+ needed.push("tools", "jre");
28
+ log(`${describeMissing(status)}; fetching ${needed.join(" + ")}`);
29
+ const bundle = await installToolBundle({
30
+ manifest: options.manifest,
31
+ components: needed,
32
+ cacheDir: options.cacheDir,
33
+ proxy: options.proxy,
34
+ force: options.force,
35
+ log,
36
+ });
37
+ status = await inspectAndroidTools({
38
+ env: { ...process.env, MIO_ANDROID_TOOLS_DIR: bundle.dir },
39
+ });
40
+ if (!statusComplete(status)) {
41
+ throw new MioToolError("ANDROID_TOOLS_NOT_FOUND", `Android build tools are still incomplete after installing the bundle (${describeMissing(status)})`, { details: `bundle: ${bundle.dir}` });
42
+ }
43
+ return { tools: toolsFromStatus(status), installed: bundle.installed, downloaded: true };
44
+ }
45
+ //# sourceMappingURL=ensure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure.js","sourceRoot":"","sources":["../src/ensure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,eAAe,GAEhB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,GAGlB,MAAM,kBAAkB,CAAC;AAsB1B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAkC;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACzC,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACpC,MAAM,IAAI,YAAY,CACpB,yBAAyB,EACzB,uCAAuC,eAAe,CAAC,MAAM,CAAC,GAAG,EACjE,EAAE,OAAO,EAAE,kFAAkF,EAAE,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,6EAA6E;IAC7E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAErD,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,MAAM,CAAC,GAAG,EAAE;KAC3D,CAAC,CAAC;IAEH,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CACpB,yBAAyB,EACzB,yEAAyE,eAAe,CAAC,MAAM,CAAC,GAAG,EACnG,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,GAAG,EAAE,EAAE,CACrC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3F,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { MioToolError } from "./errors.js";
2
2
  export type { MioToolErrorCode, MioToolErrorOptions } from "./errors.js";
3
- export { discoverAndroidTools, describeAndroidTools, type AndroidTools, type DiscoverOptions, } from "./discover.js";
3
+ export { discoverAndroidTools, describeAndroidTools, inspectAndroidTools, statusComplete, toolsFromStatus, describeMissing, type AndroidToolStatus, type AndroidTools, type DiscoverOptions, } from "./discover.js";
4
+ export { ensureAndroidTools, type EnsureAndroidToolsOptions, type EnsureAndroidToolsResult, } from "./ensure.js";
4
5
  export { alignApk, checkAlignment, type AlignOptions, type AlignmentCheck, type PageSize, } from "./zipalign.js";
5
6
  export { signApkWithApksigner, verifyApkWithApksigner, buildSignArgs, parseVerifyOutput, type SignApkWithApksignerOptions, type VerifyApkOptions, type VerifyResult, type SignerCertificate, } from "./apksigner.js";
6
7
  export { ensureDebugKeystore, type DebugKeystoreOptions } from "./keystore.js";
@@ -8,6 +9,6 @@ export { parseAxml, patchManifestAxml, type AxmlAttribute, type AxmlDocument, ty
8
9
  export { injectApk, type InjectApkOptions, type InjectApkResult, } from "./apk.js";
9
10
  export { injectWindowsExe, type InjectWindowsExeOptions, type InjectWindowsExeResult, } from "./windows.js";
10
11
  export { signApk, verifyApk, type SignApkOptions, type SignResult, } from "./signing.js";
11
- export { installToolBundle, platformKeyOf, type InstallToolBundleOptions, type InstalledToolBundle, type ToolBundleManifest, type ToolBundlePlatform, } from "./tool-bundle.js";
12
+ export { installToolBundle, platformKeyOf, type InstallToolBundleOptions, type InstalledToolBundle, type ToolBundleComponent, type ToolBundleManifest, type ToolBundlePlatform, type ToolComponent, } from "./tool-bundle.js";
12
13
  export { run, type ExecOptions, type ExecResult } from "./exec.js";
13
14
  export { listZipEntries, extractZip, readZipEntry } from "./zip.js";
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { MioToolError } from "./errors.js";
2
- export { discoverAndroidTools, describeAndroidTools, } from "./discover.js";
2
+ export { discoverAndroidTools, describeAndroidTools, inspectAndroidTools, statusComplete, toolsFromStatus, describeMissing, } from "./discover.js";
3
+ export { ensureAndroidTools, } from "./ensure.js";
3
4
  export { alignApk, checkAlignment, } from "./zipalign.js";
4
5
  export { signApkWithApksigner, verifyApkWithApksigner, buildSignArgs, parseVerifyOutput, } from "./apksigner.js";
5
6
  export { ensureDebugKeystore } from "./keystore.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAGrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,QAAQ,EACR,cAAc,GAIf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,iBAAiB,GAKlB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAA6B,MAAM,eAAe,CAAC;AAE/E,OAAO,EACL,SAAS,EACT,iBAAiB,GAKlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,SAAS,GAGV,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,OAAO,EACP,SAAS,GAGV,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,aAAa,GAKd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAqC,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,eAAe,GAIhB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,QAAQ,EACR,cAAc,GAIf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,iBAAiB,GAKlB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAA6B,MAAM,eAAe,CAAC;AAE/E,OAAO,EACL,SAAS,EACT,iBAAiB,GAKlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,SAAS,GAGV,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,OAAO,EACP,SAAS,GAGV,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,aAAa,GAOd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAqC,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -1,5 +1,14 @@
1
- import { type AndroidTools } from "./discover.js";
2
- export interface ToolBundlePlatform {
1
+ /**
2
+ * A tool bundle ships two independently downloadable components:
3
+ *
4
+ * - `tools`: apksigner.jar + zipalign[.exe] (~1.5 MB)
5
+ * - `jre`: a jlink-trimmed Java runtime with java.base + java.logging (~18 MB)
6
+ *
7
+ * A machine that already has Java only needs `tools`, and one that has the
8
+ * Android build-tools only needs `jre`. The installer never re-downloads a
9
+ * component whose digest still matches.
10
+ */
11
+ export interface ToolBundleComponent {
3
12
  /** Archive URL (http:, https:, or file:). */
4
13
  url: string;
5
14
  /** SHA-256 of the archive. */
@@ -9,13 +18,18 @@ export interface ToolBundlePlatform {
9
18
  /** Number of leading path segments to strip during extraction. Default: 1. */
10
19
  strip?: number;
11
20
  }
21
+ export interface ToolBundlePlatform {
22
+ tools?: ToolBundleComponent;
23
+ jre?: ToolBundleComponent;
24
+ }
12
25
  export interface ToolBundleManifest {
13
- schemaVersion: 1;
26
+ schemaVersion: 2;
14
27
  latest: string;
15
28
  bundles: Record<string, {
16
29
  platforms: Record<string, ToolBundlePlatform>;
17
30
  }>;
18
31
  }
32
+ export type ToolComponent = "tools" | "jre";
19
33
  export interface InstallToolBundleOptions {
20
34
  /** Manifest object, local path, or http(s)/file URL. */
21
35
  manifest: ToolBundleManifest | string;
@@ -29,19 +43,21 @@ export interface InstallToolBundleOptions {
29
43
  proxy?: string;
30
44
  /** Re-download even if a cached bundle exists. */
31
45
  force?: boolean;
46
+ /** Which components to install. Defaults to both. */
47
+ components?: ToolComponent[];
48
+ log?: (message: string) => void;
32
49
  }
33
50
  export interface InstalledToolBundle {
34
- tools: AndroidTools;
35
51
  dir: string;
36
52
  version: string;
37
53
  platform: string;
54
+ installed: ToolComponent[];
38
55
  }
39
- declare function platformKeyOf(platform: NodeJS.Platform, arch: string): string;
56
+ export declare function platformKeyOf(platform: NodeJS.Platform, arch: string): string;
40
57
  /**
41
- * Download, verify, extract, and cache a Mio Android tools bundle.
58
+ * Download, verify and cache the requested components of a tool bundle.
42
59
  *
43
- * The bundle is a .tar.gz containing apksigner.jar, zipalign[.exe], and
44
- * optionally jre/. The archive is authenticated by SHA-256 before extraction.
60
+ * Components whose cached digest still matches are kept; only the missing ones
61
+ * are fetched. Pass `force` to reinstall everything.
45
62
  */
46
63
  export declare function installToolBundle(options: InstallToolBundleOptions): Promise<InstalledToolBundle>;
47
- export { platformKeyOf };
@@ -6,10 +6,9 @@ import { dirname, join } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import * as tar from "tar";
8
8
  import { ProxyAgent, fetch as undiciFetch } from "undici";
9
- import { discoverAndroidTools } from "./discover.js";
10
9
  import { MioToolError } from "./errors.js";
11
- const MANIFEST_FILE = ".mio-tools.json";
12
- function platformKeyOf(platform, arch) {
10
+ const MARKER_FILE = ".mio-tools.json";
11
+ export function platformKeyOf(platform, arch) {
13
12
  return `${platform}-${arch}`;
14
13
  }
15
14
  function defaultCacheDir() {
@@ -40,9 +39,8 @@ async function fetchBuffer(url, proxy) {
40
39
  return await readFile(fileURLToPath(url));
41
40
  }
42
41
  const init = {};
43
- if (proxy) {
42
+ if (proxy)
44
43
  init.dispatcher = new ProxyAgent(proxy);
45
- }
46
44
  let response;
47
45
  try {
48
46
  response = await undiciFetch(url, init);
@@ -74,12 +72,12 @@ async function loadManifest(source, proxy) {
74
72
  });
75
73
  }
76
74
  const manifest = parsed;
77
- if (manifest.schemaVersion !== 1 || typeof manifest.latest !== "string" || !manifest.bundles) {
75
+ if (manifest.schemaVersion !== 2 || typeof manifest.latest !== "string" || !manifest.bundles) {
78
76
  throw new MioToolError("BUNDLE_DOWNLOAD_FAILED", "Unsupported tool bundle manifest");
79
77
  }
80
78
  return manifest;
81
79
  }
82
- function selectBundle(manifest, version, platform) {
80
+ function selectPlatform(manifest, version, platform) {
83
81
  const bundle = manifest.bundles[version];
84
82
  if (!bundle) {
85
83
  throw new MioToolError("BUNDLE_DOWNLOAD_FAILED", `Unknown tool bundle version: ${version}`);
@@ -93,15 +91,12 @@ function selectBundle(manifest, version, platform) {
93
91
  async function readMarker(path) {
94
92
  try {
95
93
  const parsed = JSON.parse(await readFile(path, "utf8"));
96
- if (typeof parsed.version !== "string" ||
97
- typeof parsed.platform !== "string" ||
98
- typeof parsed.sha256 !== "string") {
94
+ if (typeof parsed.version !== "string" || typeof parsed.platform !== "string")
99
95
  return undefined;
100
- }
101
96
  return {
102
97
  version: parsed.version,
103
98
  platform: parsed.platform,
104
- sha256: parsed.sha256,
99
+ components: parsed.components ?? {},
105
100
  installedAt: parsed.installedAt ?? "",
106
101
  };
107
102
  }
@@ -109,59 +104,27 @@ async function readMarker(path) {
109
104
  return undefined;
110
105
  }
111
106
  }
112
- async function validateBundleLayout(dir) {
113
- const apksigner = [join(dir, "apksigner.jar"), join(dir, "lib", "apksigner.jar")];
114
- const zipalign = process.platform === "win32"
115
- ? [join(dir, "zipalign.exe"), join(dir, "bin", "zipalign.exe")]
116
- : [join(dir, "zipalign"), join(dir, "bin", "zipalign")];
117
- for (const candidate of apksigner) {
118
- if (await exists(candidate))
119
- break;
120
- if (candidate === apksigner[apksigner.length - 1]) {
121
- throw new MioToolError("BUNDLE_EXTRACT_FAILED", "Tool bundle is missing apksigner.jar");
122
- }
123
- }
124
- for (const candidate of zipalign) {
125
- if (await exists(candidate))
126
- break;
127
- if (candidate === zipalign[zipalign.length - 1]) {
128
- throw new MioToolError("BUNDLE_EXTRACT_FAILED", "Tool bundle is missing zipalign");
129
- }
130
- }
107
+ async function componentPresent(dir, component) {
108
+ if (component === "tools") {
109
+ const jar = [join(dir, "apksigner.jar"), join(dir, "lib", "apksigner.jar")];
110
+ const align = process.platform === "win32"
111
+ ? [join(dir, "zipalign.exe"), join(dir, "bin", "zipalign.exe")]
112
+ : [join(dir, "zipalign"), join(dir, "bin", "zipalign")];
113
+ return (await anyExists(jar)) && (await anyExists(align));
114
+ }
115
+ const java = process.platform === "win32" ? "java.exe" : "java";
116
+ return await exists(join(dir, "jre", "bin", java));
131
117
  }
132
- /**
133
- * Download, verify, extract, and cache a Mio Android tools bundle.
134
- *
135
- * The bundle is a .tar.gz containing apksigner.jar, zipalign[.exe], and
136
- * optionally jre/. The archive is authenticated by SHA-256 before extraction.
137
- */
138
- export async function installToolBundle(options) {
139
- const proxy = options.proxy ?? defaultProxy();
140
- const manifest = await loadManifest(options.manifest, proxy);
141
- const version = options.version ?? manifest.latest;
142
- const platform = options.platform ?? platformKeyOf(process.platform, process.arch);
143
- const entry = selectBundle(manifest, version, platform);
144
- const cacheDir = options.cacheDir ?? defaultCacheDir();
145
- const dest = join(cacheDir, version, platform);
146
- const markerPath = join(dest, MANIFEST_FILE);
147
- await mkdir(cacheDir, { recursive: true });
148
- if (!options.force) {
149
- const marker = await readMarker(markerPath);
150
- if (marker?.sha256 === entry.sha256 && (await exists(dest))) {
151
- try {
152
- const tools = await discoverAndroidTools({
153
- env: { ...process.env, MIO_ANDROID_TOOLS_DIR: dest },
154
- });
155
- return { tools, dir: dest, version, platform };
156
- }
157
- catch {
158
- // Cached bundle is incomplete or corrupt; fall through and reinstall.
159
- await rm(dest, { recursive: true, force: true });
160
- }
161
- }
118
+ async function anyExists(paths) {
119
+ for (const path of paths) {
120
+ if (await exists(path))
121
+ return true;
162
122
  }
163
- const tempRoot = await mkdtemp(join(cacheDir, ".download-"));
164
- const archivePath = join(tempRoot, "tools.tar.gz");
123
+ return false;
124
+ }
125
+ async function extractComponent(entry, proxy, target) {
126
+ const tempRoot = await mkdtemp(join(target, "..", ".download-"));
127
+ const archivePath = join(tempRoot, "component.tar.gz");
165
128
  const extractDir = join(tempRoot, "extracted");
166
129
  try {
167
130
  await mkdir(extractDir, { recursive: true });
@@ -181,24 +144,74 @@ export async function installToolBundle(options) {
181
144
  strict: true,
182
145
  preservePaths: false,
183
146
  });
184
- await validateBundleLayout(extractDir);
185
- await rm(dest, { recursive: true, force: true });
186
- await mkdir(dirname(dest), { recursive: true });
187
- await rename(extractDir, dest);
188
- await writeFile(markerPath, JSON.stringify({
189
- version,
190
- platform,
191
- sha256: entry.sha256,
192
- installedAt: new Date().toISOString(),
193
- }, null, 2));
194
- const tools = await discoverAndroidTools({
195
- env: { ...process.env, MIO_ANDROID_TOOLS_DIR: dest },
196
- });
197
- return { tools, dir: dest, version, platform };
147
+ await rm(target, { recursive: true, force: true });
148
+ await mkdir(dirname(target), { recursive: true });
149
+ await rename(extractDir, target);
198
150
  }
199
151
  finally {
200
152
  await rm(tempRoot, { recursive: true, force: true });
201
153
  }
202
154
  }
203
- export { platformKeyOf };
155
+ /**
156
+ * Download, verify and cache the requested components of a tool bundle.
157
+ *
158
+ * Components whose cached digest still matches are kept; only the missing ones
159
+ * are fetched. Pass `force` to reinstall everything.
160
+ */
161
+ export async function installToolBundle(options) {
162
+ const log = options.log ?? (() => { });
163
+ const proxy = options.proxy ?? defaultProxy();
164
+ const manifest = await loadManifest(options.manifest, proxy);
165
+ const version = options.version ?? manifest.latest;
166
+ const platform = options.platform ?? platformKeyOf(process.platform, process.arch);
167
+ const entry = selectPlatform(manifest, version, platform);
168
+ const cacheDir = options.cacheDir ?? defaultCacheDir();
169
+ const dest = join(cacheDir, version, platform);
170
+ const requested = options.components ?? ["tools", "jre"];
171
+ await mkdir(dest, { recursive: true });
172
+ const markerPath = join(dest, MARKER_FILE);
173
+ const marker = options.force ? undefined : await readMarker(markerPath);
174
+ const components = {};
175
+ const installed = [];
176
+ for (const component of requested) {
177
+ const source = entry[component];
178
+ if (!source) {
179
+ throw new MioToolError("BUNDLE_DOWNLOAD_FAILED", `Tool bundle ${version} has no "${component}" component for ${platform}`);
180
+ }
181
+ const cachedDigest = marker?.components[component];
182
+ const present = await componentPresent(dest, component);
183
+ if (!options.force &&
184
+ cachedDigest === source.sha256.toLowerCase() &&
185
+ present) {
186
+ components[component] = cachedDigest;
187
+ log(`${component}: cached`);
188
+ continue;
189
+ }
190
+ const target = component === "tools" ? join(dest, "tools-root") : join(dest, "jre");
191
+ log(`downloading ${component} (${source.url})`);
192
+ await extractComponent(source, proxy, target);
193
+ if (component === "tools") {
194
+ // Move the flat tools archive into the bundle root.
195
+ for (const name of ["apksigner.jar", "zipalign", "zipalign.exe"]) {
196
+ const from = join(target, name);
197
+ if (await exists(from))
198
+ await rename(from, join(dest, name));
199
+ }
200
+ await rm(target, { recursive: true, force: true });
201
+ }
202
+ if (!(await componentPresent(dest, component))) {
203
+ throw new MioToolError("BUNDLE_EXTRACT_FAILED", `Tool bundle is missing files for "${component}"`);
204
+ }
205
+ components[component] = source.sha256.toLowerCase();
206
+ installed.push(component);
207
+ }
208
+ const now = new Date().toISOString();
209
+ await writeFile(markerPath, JSON.stringify({
210
+ version,
211
+ platform,
212
+ components: { ...(marker?.components ?? {}), ...components },
213
+ installedAt: now,
214
+ }, null, 2));
215
+ return { dir: dest, version, platform, installed };
216
+ }
204
217
  //# sourceMappingURL=tool-bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-bundle.js","sourceRoot":"","sources":["../src/tool-bundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-bundle.js","sourceRoot":"","sources":["../src/tool-bundle.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iyexin/mio-android-tools",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Android APK alignment, signing and verification for Mio",