86 lines
3.1 KiB
Markdown
86 lines
3.1 KiB
Markdown
# 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.
|