# MrbWebLibre for Google Pixel 10 This fork keeps WebLibre's upstream behavior and adds a focused build profile for the Google Pixel 10 family. ## What is optimized - **ARM64 only:** Pixel 10 uses a 64-bit Tensor G5 platform. The `pixel10` flavor excludes unused 32-bit native libraries, reducing the APK size and eliminating accidental 32-bit packaging. - **Impeller enabled:** the Flutter renderer remains enabled for smooth GPU rendering on the 60–120 Hz Pixel display. - **High refresh rate by default:** WebLibre's existing `RefreshRateMode.high` default is retained. It can still be changed under General settings when battery life matters more than maximum smoothness. - **16 KB page-size gate:** every native ARM64 library in the final APK is checked for 16 KB-compatible ELF LOAD-segment alignment. This catches an incompatible Gecko, Flutter, Tor, or proxy binary before the APK is shipped. - **Separate app identity:** `cc.mrblake.mrbweblibre` installs alongside the upstream `eu.weblibre.gecko` app and cannot overwrite an upstream-signed APK. The fork deliberately does not spoof the device model or change Gecko web preferences only for Pixels. Those changes would increase fingerprinting and make upstream security updates harder to merge. ## Build Use the Flutter and Android versions pinned by the upstream CI workflow, build the generated assets and native runtime, then run: ```bash melos run build-browser-pixel10 --no-select ``` The command asks Flutter for a split ARM64 artifact, verifies that no other ABI is packaged, and publishes it under the stable path: ```text apps/weblibre/build/app/outputs/flutter-apk/app-pixel10-release.apk ``` Release builds require the same signing environment variables as upstream: `KEY_PATH`, `KEY_ALIAS`, and `KEY_PASSWORD`. ## Gitea Actions The workflow at `.gitea/workflows/pixel10.yml` runs on every push to the `pixel10` branch and can also be started manually. It needs an Actions runner with the `ubuntu-latest` label and these repository secrets: | Secret | Value | | --- | --- | | `PIXEL10_KEY_JKS` | Base64-encoded Android signing keystore | | `PIXEL10_KEY_ALIAS` | Alias of the signing key | | `PIXEL10_KEY_PASSWORD` | Keystore and key password | Create a dedicated key once and keep both the keystore and password backed up. Losing the signing key makes it impossible to install future updates over an existing MrbWebLibre installation. ```bash keytool -genkeypair -v \ -keystore pixel10-release.jks \ -alias mrbweblibre \ -keyalg RSA -keysize 4096 -validity 10000 base64 -w 0 pixel10-release.jks ``` Add the resulting one-line Base64 value as `PIXEL10_KEY_JKS`; do not commit the keystore itself. The workflow removes the decoded file even when a build fails. ## Verify an existing APK ```bash scripts/verify-pixel10-apk.sh path/to/app-pixel10-release.apk ``` The verifier requires `unzip` and GNU `readelf` (usually supplied by the `binutils` package). ## Keeping the fork current The upstream remote should point at `https://github.com/FaFre/WebLibre.git`. Rebase the `pixel10` branch on upstream `main`, run the full test suite, build the APK, and do a real-device smoke test before publishing an update.