Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
36 lines
2.4 KiB
Plaintext
36 lines
2.4 KiB
Plaintext
android: the keep rules for a release build nobody has made
|
|
|
|
Every APK this port has produced is `assembleArm64Debug`, and the generated
|
|
project turns R8 on for `release` and only for `release` — while tauri finds a
|
|
plugin class by string, files every `@Command` under `commands[method.name]`,
|
|
and lets Jackson fill every `@InvokeArg` field by field. Minification breaks
|
|
exactly that, and it breaks it without a word: the app compiles, installs,
|
|
launches, shows Home, and then a tap on Library folder answers "No command
|
|
pickFolder found for plugin ..." in logcat and nothing on screen. So each
|
|
plugin module now carries its own `consumer-rules.pro` naming its own
|
|
reflected surface — the shape tauri-android and tauri-plugin-dialog already
|
|
use in this build, and one that travels with the plugin into a regenerated
|
|
`gen/android`, which a rule written into that gitignored tree would not.
|
|
|
|
What belongs to no single plugin is in `src-tauri/android/proguard-soulstream.pro`,
|
|
copied into the generated project by the build script because the app's own
|
|
Gradle file is regenerated: the runtime annotation attributes, a `-dontwarn`
|
|
pair for the two `java.beans` classes jackson-databind references and Android
|
|
does not have (R8 turns a missing class into a build error, so without them
|
|
there may be no APK at all), and a keep for the four `@Command` methods
|
|
declared on `app.tauri.plugin.Plugin` itself. Tauri's own rule matches classes
|
|
annotated `@TauriPlugin` and the members they declare; the base class carries
|
|
no such annotation, so nothing names `registerListener` — which is what the
|
|
lock-screen card's buttons and the download notice's Cancel and Open ride on.
|
|
|
|
`build.sh` grows `--release`: the release profile, `--features tauri/devtools`
|
|
so the walk can still attach at all, `assembleArm64Release`, and a zipalign and
|
|
sign with the same debug key the phone already trusts, so the APK installs over
|
|
the app rather than forcing an uninstall that would take Kyle's settings with
|
|
it. With no argument the script is what it has always been, cargo line for
|
|
cargo line, so deploy.sh and ship.sh keep the path they run every twenty
|
|
minutes. None of this has been built: Gradle, Kotlin and R8 do not run on this
|
|
machine, the rules are a precaution against a silent failure rather than a fix
|
|
for an observed one, and ANDROID.md says so and lists what to test by hand,
|
|
command by command, on the first release build anyone makes.
|