Repository navigation
v2.1.0
EVLauncher v2.1.0
This build has no auto-updater and no silent installer. The EVSuite screen
checks allowlisted GitHub releases only after the user opens it, shows the
changelog, and exports verified APKs for manual installation.
Install
Copy the APK to a USB stick, open the car's Files app and tap it. Then set it
as the default home from Android settings.
Note
Signed with the EVSuite platform key. If you are coming from a build signed
with the old author key, uninstall the previous version first — Android refuses
an in-place update across a key change.
Changelog
Added
- A third home page, showing what the car itself is doing. Swipe once more past the system
information and the launcher shows state of charge, remaining range and charging state. It is
a page of its own rather than three more cards beside the RAM and storage figures for two
reasons: seven cards across the panel leaves about 253 dp each, which ellipsizes exactly the
two numbers the page exists for, and the head unit's memory and the car's battery are not the
same kind of fact. The reasoning, the wireframe and the rejected alternatives are in
docs/CR-010-vehicle-page.md.
A value the car does not report shows as—, never as0, with a caption distinguishing
"the vehicle layer is not answering" from "this car does not publish that one". Nothing is
read while the page is off-screen, nothing is written to disk, and a driver who never swipes
that far never binds the vehicle layer at all. - The suite's shared vehicle layer, as a submodule.
EVHardwareis now included as the
:evhardwaresubproject and is the only way this app reaches the car. Clone with
--recurse-submodules, or rungit submodule update --initbefore the first build.
Security
- Two read-only car permissions, and a test that keeps them the only ones.
android.car.permission.CAR_ENERGYandandroid.car.permission.CAR_VENDOR_EXTENSIONare the
minimum the three displayed values need, and neither permits a write.CAR_SPEED,
CAR_EXTERIOR_ENVIRONMENTandCONTROL_CAR_CLIMATE— all held by EVChargePilot — were
deliberately refused: this page shows no speed, no outside temperature and no climate state,
and the app that owns the home screen holds no permission whose name containsCONTROL.
VehicleBoundaryTestnow fails the build on a directandroid.carreference, on a
CarPropertyManager, on an EVHardware import outside the read-only telemetry surface, on
sharedUserId, and on any car permission the boundary review did not name. - No now-playing card, and the reason is written down. Reading what another app is playing
needsMEDIA_CONTENT_CONTROL(signature/privileged) or notification-listener access, which
would let the launcher read every notification on the head unit. Both are far larger grants
than a track title is worth, so media was left out rather than paid for with a permission.
Changed
- AGP 9.1.1 / Gradle 9.3.1,
compileSdk 36, and the Kotlin plugin is gone. Not
housekeeping: AGP 9's built-in Kotlin compilation is whatEVHardware/librelies on, and it
is the toolchain every other EVSuite app already runs. The launcher's own sources remain
Java.