@gjsify/gi-runtime-android 0.61.0 → 0.63.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/README.md CHANGED
@@ -14,11 +14,10 @@ Add it as a dependency and `requireGi` works on the device. No `jniLibs` directo
14
14
  }
15
15
  ```
16
16
 
17
- > **NOT ON NPM YET.** The name has never been published, and npm's Trusted Publishing
18
- > cannot create one — the first publish is a manual maintainer action, queued in
19
- > [`status/pending-npm-bootstrap.json`](../../../status/pending-npm-bootstrap.json) with
20
- > its command sequence. Until then the dependency above resolves to nothing; link the
21
- > package locally (`file:` / `workspace:^`) to use it. Nothing in this repository pins
17
+ > **PUBLISHED BY HAND, every release.** No CI job can build the AAR yet (#2179), so
18
+ > `release.yml` never publishes this package and the closure check reds each train
19
+ > until a maintainer does — [§ Releasing](#releasing). Between the tag and that publish,
20
+ > the train's version of this package does not exist; nothing in this repository pins
22
21
  > the name, so the gap costs no other install.
23
22
 
24
23
  Tier 3 (experimental). Stage 4 of
@@ -79,29 +78,46 @@ Same arrangement as the `@gjsify/gtk-runtime-*` bundles' `gtk/`. A fresh checkou
79
78
  AAR, which is what `include.gradle` is committed for: it turns the absence into a gradle
80
79
  failure that names the build command, instead of an APK that dies in `dlopen` at startup.
81
80
 
81
+ The inputs are pinned by sha256 in [`build-inputs.json`](./build-inputs.json): the GLib /
82
+ GObject-Introspection prefix, released per ABI in
83
+ [gjsify/android-sysroot](https://github.com/gjsify/android-sysroot), and the `optimized`
84
+ runtime AAR of the published `@nativescript/android`. Besides them the build needs only the
85
+ pinned NDK.
86
+
82
87
  ```sh
83
88
  NDK=~/Android/Sdk/ndk/27.1.12297006
84
- GI=~/.cache/gjsify-android/gi-probe/.pixiewood
89
+ IN=/tmp/gi-runtime-android-inputs
90
+
91
+ # 0. the pinned inputs: $IN/sysroot and $IN/nativescript
92
+ node scripts/fetch-build-inputs.mjs --out "$IN"
85
93
 
86
- # 1. the addon, per ABI — @gjsify/node-gi's own cross-build
87
- for pair in arm64-v8a:aarch64 x86_64:x86_64; do
88
- abi=${pair%%:*} arch=${pair##*:}
94
+ # 1. the addon, per ABI — @gjsify/node-gi's own cross-build, needing node-addon-api
95
+ (cd ../node-gi && npm install --no-audit --no-fund --ignore-scripts)
96
+ for abi in arm64-v8a x86_64; do
89
97
  node ../node-gi/scripts/build-android.mjs --abi "$abi" --ndk "$NDK" \
90
- --gi-sysroot "$GI/root" --out /tmp/gi-android/"$abi" \
91
- --pkg-config-libdir "$GI/bin-$arch/meson-uninstalled" \
92
- --napi-lib ~/.cache/gjsify-android/ns/aar
98
+ --gi-sysroot "$IN/sysroot" --napi-lib "$IN/nativescript" --out /tmp/gi-android/"$abi"
93
99
  done
94
100
 
95
101
  # 2. the bundle
96
- node scripts/build-gi-runtime-android.mjs --ndk "$NDK" --gi-sysroot "$GI/root" \
97
- --node-gi-lib /tmp/gi-android \
98
- --typelib-dir "arm64-v8a=$GI/typelib-root/lib/arm64-v8a/girepository-1.0" \
99
- --typelib-dir "x86_64=$GI/bin-x86_64/subprojects/glib/girepository/introspection"
102
+ node scripts/build-gi-runtime-android.mjs --ndk "$NDK" --gi-sysroot "$IN/sysroot" \
103
+ --node-gi-lib /tmp/gi-android --license-corpus "$IN/sysroot/share/licenses"
100
104
  ```
101
105
 
102
- `--typelib-dir` is repeatable and per-ABI because a meson build tree has no single
103
- typelib directory: one GI build keeps them in an install root, another one directory per
104
- subproject. Omit it and the default is `<gi-sysroot>/lib/<abi>/girepository-1.0`.
106
+ The prefix is not built in CI because g-ir-scanner has to *run* a dumper compiled for the
107
+ target, which needs an emulator or a device. android-sysroot's README holds that recipe;
108
+ a new prefix is a new release there plus a bump of the tag and both digests here.
109
+
110
+ `--typelib-dir <abi>=<dir>` (repeatable) points at typelibs outside
111
+ `<gi-sysroot>/lib/<abi>/girepository-1.0`, for a GI build tree that is not installed.
112
+
113
+ ## Releasing
114
+
115
+ `release.yml`'s `publish-gi-runtime-android` job runs the three steps above on
116
+ `ubuntu-latest` and publishes through the Trusted Publisher, like every other runtime
117
+ bundle. Its bytes depend on the pinned inputs and the node-gi sources, not on the
118
+ version: built from the 2026.10.12 prefix, the AAR is byte-identical to the 0.62.0 one
119
+ that was published by hand (sha256 `ada5b59b…`); only `THIRD-PARTY-NOTICES.md` beside it
120
+ gained the licence texts.
105
121
 
106
122
  ## What the build decides, and refuses
107
123
 
@@ -139,13 +155,12 @@ seventh and its consequence are recorded in
139
155
  **Every bundled library is attributed.** [`licenses/bundled-projects.json`](./licenses/bundled-projects.json)
140
156
  maps soname → project; a soname the closure grew with no entry fails the notice
141
157
  generation rather than shipping unattributed. The table is a NAME MAP and states no
142
- terms: the Android GI prefix is a meson build tree and ships no licence corpus at all
143
- (measured: zero `COPYING`/`LICENSE` files under the whole prefix), unlike the Homebrew
144
- kegs the darwin bundle reads terms from. So the notice names each project and its
145
- upstream and says plainly that the text is not embedded — an unspecific true claim
146
- instead of an SPDX expression written from recollection, which is what `bundled-license`
147
- refuses on win32 for the same reason. `--license-corpus <dir>` embeds texts when a build
148
- has them.
158
+ terms; the terms are the licence texts android-sysroot copies from every subproject's
159
+ source tree into `share/licenses/`, which `--license-corpus` embeds in the notice. A build
160
+ without a corpus (a bare meson build tree ships none) names each project and its upstream
161
+ and says plainly that the text is not embedded — an unspecific true claim instead of an
162
+ SPDX expression written from recollection, which is what `bundled-license` refuses on
163
+ win32 for the same reason.
149
164
 
150
165
  ## Size
151
166
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/gi-runtime-android",
3
- "version": "0.61.0",
3
+ "version": "0.63.0",
4
4
  "description": "NativeScript plugin that puts the GObject-Introspection runtime into an Android APK — libnode_gi.so plus the GLib/GObject/Gio closure and their typelibs, for arm64-v8a and x86_64. Add it as a dependency and @gjsify/node-gi's `requireGi` works on the device; no hand-copied .so, no jniLibs dir in App_Resources.",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN platforms/THIRD-PARTY-NOTICES.md",