Download Home Assistant (minimal version) (Android Automotive) APK 2025.3.5-minimal arm64-v8a, armeabi-v7a, x86, x86_64 · Android 21+
arm64-v8a, armeabi-v7a, x86, x86_64
Native (Java/Kotlin)
35.57 MB
Download APK
Verified Safe
This is the arm64-v8a, armeabi-v7a, x86, x86_64 build of Home Assistant (minimal version) (Android Automotive) 2025.3.5-minimal. Pick this build if your device's primary ABI matches.
File size: 35.6 MB • Min Android: 21 • Target Android: 34 • Version code: 15660 • Framework: Native (Java/Kotlin) • Permissions: 40
File Information
| Package Name | io.homeassistant.companion.android.minimal |
|---|---|
| Version Name | 2025.3.5-minimal |
| Version Code | 15660 |
| Architecture | arm64-v8a, armeabi-v7a, x86, x86_64 |
| Min Android Version | Android 21 (API 34) |
| Main Activity | io.homeassistant.companion.android.launch.LaunchActivity |
| Framework | Native (Java/Kotlin) |
| File Size | 35.57 MB |
| Signature (SHA1) | F21C5AA894F278D4E769CBD9BBC6FF276934F37D |
| File Hash (SHA256) | 5fffa7e0cb57ac0c2592034e78b9c3664f51d37b976d35da613b8836f99d17bc |
What's New
What's Changed
Remove assistant app/Assist with button on Automotive by
@jpelgrom
in
#4965
Bump androidPlugin from 8.7.3 to 8.8.0 by
@dependabot
in
#4967
Bump hilt from 2.54 to 2.55 by
@dependabot
in
#4966
Avoid duplicate LazyColumn SSID keys by
@jpelgrom
in
#4976
Support ?server=name in homeassistant navigate deeplink by
@jpelgrom
in
#4969
Bump activity-compose from 1.9.3 to 1.10.0 by
@dependabot
in
#4982
Bump androidx.health.connect:connect-client from 1.1.0-alpha10 to 1.1.0-alpha11 by
@dependabot
in
#4980
Use Gradle Build Action by
@runningcode
in
#4986
Bump androidx.wear.compose:compose-material3 from 1.0.0-alpha30 to 1.0.0-alpha31 by
@dependabot
in
#4987
Add battery cycle count sensor by
@jpelgrom
in
#4992
Validate input for battery power sensor by
@jpelgrom
in
#4990
Bump com.google.firebase.appdistribution from 5.0.0 to 5.1.0 by
@dependabot
in
#4988
Update change log week of 1/17 by
@dshokouhi
in
#4993
Bump androidx.recyclerview:recyclerview from 1.3.2 to 1.4.0 by
@dependabot
in
#4996
Bump io.sentry:sentry-android from 7.20.0 to 7.20.1 by
@dependabot
in
#4998
Update Gradle wrapper files by
@runningcode
in
#4985
Bump androidx.compose:compose-bom from 2024.12.01 to 2025.01.00 by
@dependabot
in
#4981
Clean up location manager after making updates suspend by
@dshokouhi
in
#4818
Bump io.sentry:sentry-android from 7.20.1 to 8.0.0 by
@dependabot
in
#5003
Replace checkbox with switch in shortcuts tile name on/off by
@jpelgrom
in
#5009
Show more info on QS tile long press by
@jpelgrom
in
#5008
Bump actions/setup-java from 4.6.0 to 4.7.0 by
@dependabot
in
#5016
Bump androidx.navigation:navigation-compose from 2.8.5 to 2.8.6 by
@dependabot
in
#5020
Bump androidx.wear.compose:compose-material3 from 1.0.0-alpha31 to 1.0.0-alpha32 by
@dependabot
in
#5021
Try for more health connect sensors again by
@dshokouhi
in
#5022
Do not require a wifi password to connect Improv. by
@abliss
in
#5019
Bump androidx.compose:compose-bom from 2025.01.00 to 2025.01.01 by
@dependabot
in
#5025
Bump io.sentry:sentry-android from 8.0.0 to 8.1.0 by
@dependabot
in
#5026
Bump com.google.firebase.appdistribution from 5.1.0 to 5.1.1 by
@dependabot
in
#5035
New thermostat tile for Wear OS by
@Martreides
in
#4959
Convert floats to longs for 'when' in notification data by
@jpelgrom
in
#5036
Check session state in registered check to avoid using transferred servers more by
@jpelgrom
in
#5037
Update change log week of 2/8 by
@dshokouhi
in
#5029
Bump com.google.firebase:firebase-bom from 33.8.0 to 33.9.0 by
@dependabot
in
#5039
Skip some more notification data items if they are blank by
@jpelgrom
in
#5041
Bump androidx.navigation:navigation-compose from 2.8.6 to 2.8.7 by
@dependabot
in
#5042
Bump androidPlugin from 8.8.0 to 8.8.1 by
@dependabot
in
#5043
Bump paging from 3.3.5 to 3.3.6 by
@dependabot
in
#5047
Bump androidx.fragment:fragment-ktx from 1.8.5 to 1.8.6 by
@dependabot
in
#5049
GitHub: Add dependency uploading by
@colin-foster-in-advantage
in
#5048
Bump io.sentry:sentry-android from 8.1.0 to 8.2.0 by
@dependabot
in
#5052
Bump androidx.compose:compose-bom from 2025.01.01 to 2025.02.00 by
@dependabot
in
#5053
Bump wear-compose-foundation from 1.4.0 to 1.4.1 by
@dependabot
in
#5057
Bump com.android.tools:desugar_jdk_libs from 2.1.4 to 2.1.5 by
@dependabot
in
#5062
Bump androidx.navigation:navigation-compose from 2.8.7 to 2.8.8 by
@dependabot
in
#5063
Bump changelog to 2025.3.1 by
@jpelgrom
in
#5067
Bump androidx.wear:wear-phone-interactions from 1.0.1 to 1.1.0 by
@dependabot
in
#5070
Bump activity-compose from 1.10.0 to 1.10.1 by
@dependabot
in
#5072
Bump com.google.firebase:firebase-bom from 33.9.0 to 33.10.0 by
@dependabot
in
#5073
Bump androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1 by
@dependabot
in
#5076
Configure Renovate by
@renovate
in
#5084
Bump androidx.health.connect:connect-client from 1.1.0-alpha11 to 1.1.0-alpha12 by
@dependabot
in
#5082
Improve renovate configuration and introduce gradle lockfile by
@TimoPtr
in
#5091
Update dependency gradle to v8.13 by
@renovate
in
#5098
Introduce convention gradle plugin for apps by
@TimoPtr
in
#5078
Update dependency io.sentry:sentry-android to v8.3.0 by
@renovate
in
#5103
Add new android common gradle convention plugin and update common module by
@TimoPtr
in
#5107
Exclude androidx wear package from compose and androidx groups by
@TimoPtr
in
#5111
Update renovate config to avoid 429 by
@TimoPtr
in
#5112
Add missing requestLimit for other repo by
@TimoPtr
in
#5113
Add jitpack to global list of repositories by
@TimoPtr
in
#5118
Extract setup build steps into a dedicated Github Action and export lint reports by
@TimoPtr
in
#5099
Apply gitattributes by
@TimoPtr
in
#5115
Introduce instrumentation test by
@TimoPtr
in
#5108
Update dependency androidx.health:health-services-client to v1.1.0-alpha05 by
@renovate
in
#5100
Disable dependabot update feature by
@TimoPtr
in
#5121
Add 'Reset frontend cache' option (using new WebStorageCompat) by
@jpelgrom
in
#5119
Apply KTLint settings to all projects by
@TimoPtr
in
#5120
Update com.android.* to v8.9.0 by
@renovate
in
#5101
Update plugin dev.panuszewski.typesafe-conventions to v0.5.1 by
@renovate
in
#5123
Update dependency org.jlleitschuh.gradle.ktlint to v12.2.0 by
@renovate
in
#5122
Move from java folders to kotlin folders for sources by
@TimoPtr
in
#5128
Add yamllint by
@TimoPtr
in
#5129
Update gitignore and commit .idea folder by
@TimoPtr
in
#5117
Add dummy instrumentation test for app/tv/wear by
@TimoPtr
in
#5126
Assist continue conversation feature while using microphone by
@TimoPtr
in
#5083
Remove gradle tasks dependency to ktlint for typesafe plugin in builld-logic by
@TimoPtr
in
#5131
Support intent-progress for Assist by
@TimoPtr
in
#5132
Update dependency fastlane to v2.227.0 by
@renovate
in
#5097
Update dependency org.junit:junit-bom to v5.12.1 by
@renovate
in
#5141
Add leakCanary for debug builds by
@TimoPtr
in
#5136
Replace android.util.Log with timber.log.Timber by
@TimoPtr
in
#5140
Improve grouping for compose libraries and change renovate config extension to json5 by
@TimoPtr
in
#5144
Remove iPhone icon in README.md by
@fpetrovski
in
#5143
Update lint configuration to be less permissive by
@TimoPtr
in
#5139
Update dependency com.google.firebase:firebase-bom to v33.11.0 by
@renovate
in
#5142
Disable lint tasks in release for automotive module by
@TimoPtr
in
#5145
Update dependency androidx.health.connect:connect-client to v1.1.0-beta01 by
@renovate
in
#5124
Update dependency io.sentry:sentry-android to v8.5.0 by
@renovate
in
#5149
Update dependency androidx.wear.compose:compose-material3 to v1.0.0-alpha34 by
@renovate
in
#5089
Use file separator to be compatible with different OS by
@dshokouhi
in
#5151
Update plugin org.ajoberstar.reckon.settings to v0.19.1 by
@renovate
in
#5150
Detect missing lockfile update on CI by
@TimoPtr
in
#5154
Merge SARIF reports by
@TimoPtr
in
#5156
Add missing gitignore entries by
@TimoPtr
in
#5146
Add a test to introduce compose screenshot testing by
@dshokouhi
in
#4835
Update com.android.* to v8.9.1 by
@renovate
in
#5158
Update androidx.compose.* by
@renovate
in
#5147
Move screenshot test to be later in the flow by
@dshokouhi
in
#5159
Update dependency org.altbeacon:android-beacon-library to v2.21.1 by
@renovate
in
#5104
AudioUrlPlayer invoke donePlaying directly if the volume is 0 by
@TimoPtr
in
#5133
Update change log week of 3/28 by
@dshokouhi
in
#5162
Update dependency com.google.guava:guava to v33.4.6-android by
@renovate
in
#5090
New Contributors
@abliss
made their first contribution in
#5019
@Martreides
made their first contribution in
#4959
@colin-foster-in-advantage
made their first contribution in
#5048
@renovate
made their first contribution in
#5084
@TimoPtr
made their first contribution in
#5091
@fpetrovski
made their first contribution in
#5143
Full Changelog
:
2025.1.2...2025.3.5
Remove assistant app/Assist with button on Automotive by
@jpelgrom
in
#4965
Bump androidPlugin from 8.7.3 to 8.8.0 by
@dependabot
in
#4967
Bump hilt from 2.54 to 2.55 by
@dependabot
in
#4966
Avoid duplicate LazyColumn SSID keys by
@jpelgrom
in
#4976
Support ?server=name in homeassistant navigate deeplink by
@jpelgrom
in
#4969
Bump activity-compose from 1.9.3 to 1.10.0 by
@dependabot
in
#4982
Bump androidx.health.connect:connect-client from 1.1.0-alpha10 to 1.1.0-alpha11 by
@dependabot
in
#4980
Use Gradle Build Action by
@runningcode
in
#4986
Bump androidx.wear.compose:compose-material3 from 1.0.0-alpha30 to 1.0.0-alpha31 by
@dependabot
in
#4987
Add battery cycle count sensor by
@jpelgrom
in
#4992
Validate input for battery power sensor by
@jpelgrom
in
#4990
Bump com.google.firebase.appdistribution from 5.0.0 to 5.1.0 by
@dependabot
in
#4988
Update change log week of 1/17 by
@dshokouhi
in
#4993
Bump androidx.recyclerview:recyclerview from 1.3.2 to 1.4.0 by
@dependabot
in
#4996
Bump io.sentry:sentry-android from 7.20.0 to 7.20.1 by
@dependabot
in
#4998
Update Gradle wrapper files by
@runningcode
in
#4985
Bump androidx.compose:compose-bom from 2024.12.01 to 2025.01.00 by
@dependabot
in
#4981
Clean up location manager after making updates suspend by
@dshokouhi
in
#4818
Bump io.sentry:sentry-android from 7.20.1 to 8.0.0 by
@dependabot
in
#5003
Replace checkbox with switch in shortcuts tile name on/off by
@jpelgrom
in
#5009
Show more info on QS tile long press by
@jpelgrom
in
#5008
Bump actions/setup-java from 4.6.0 to 4.7.0 by
@dependabot
in
#5016
Bump androidx.navigation:navigation-compose from 2.8.5 to 2.8.6 by
@dependabot
in
#5020
Bump androidx.wear.compose:compose-material3 from 1.0.0-alpha31 to 1.0.0-alpha32 by
@dependabot
in
#5021
Try for more health connect sensors again by
@dshokouhi
in
#5022
Do not require a wifi password to connect Improv. by
@abliss
in
#5019
Bump androidx.compose:compose-bom from 2025.01.00 to 2025.01.01 by
@dependabot
in
#5025
Bump io.sentry:sentry-android from 8.0.0 to 8.1.0 by
@dependabot
in
#5026
Bump com.google.firebase.appdistribution from 5.1.0 to 5.1.1 by
@dependabot
in
#5035
New thermostat tile for Wear OS by
@Martreides
in
#4959
Convert floats to longs for 'when' in notification data by
@jpelgrom
in
#5036
Check session state in registered check to avoid using transferred servers more by
@jpelgrom
in
#5037
Update change log week of 2/8 by
@dshokouhi
in
#5029
Bump com.google.firebase:firebase-bom from 33.8.0 to 33.9.0 by
@dependabot
in
#5039
Skip some more notification data items if they are blank by
@jpelgrom
in
#5041
Bump androidx.navigation:navigation-compose from 2.8.6 to 2.8.7 by
@dependabot
in
#5042
Bump androidPlugin from 8.8.0 to 8.8.1 by
@dependabot
in
#5043
Bump paging from 3.3.5 to 3.3.6 by
@dependabot
in
#5047
Bump androidx.fragment:fragment-ktx from 1.8.5 to 1.8.6 by
@dependabot
in
#5049
GitHub: Add dependency uploading by
@colin-foster-in-advantage
in
#5048
Bump io.sentry:sentry-android from 8.1.0 to 8.2.0 by
@dependabot
in
#5052
Bump androidx.compose:compose-bom from 2025.01.01 to 2025.02.00 by
@dependabot
in
#5053
Bump wear-compose-foundation from 1.4.0 to 1.4.1 by
@dependabot
in
#5057
Bump com.android.tools:desugar_jdk_libs from 2.1.4 to 2.1.5 by
@dependabot
in
#5062
Bump androidx.navigation:navigation-compose from 2.8.7 to 2.8.8 by
@dependabot
in
#5063
Bump changelog to 2025.3.1 by
@jpelgrom
in
#5067
Bump androidx.wear:wear-phone-interactions from 1.0.1 to 1.1.0 by
@dependabot
in
#5070
Bump activity-compose from 1.10.0 to 1.10.1 by
@dependabot
in
#5072
Bump com.google.firebase:firebase-bom from 33.9.0 to 33.10.0 by
@dependabot
in
#5073
Bump androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1 by
@dependabot
in
#5076
Configure Renovate by
@renovate
in
#5084
Bump androidx.health.connect:connect-client from 1.1.0-alpha11 to 1.1.0-alpha12 by
@dependabot
in
#5082
Improve renovate configuration and introduce gradle lockfile by
@TimoPtr
in
#5091
Update dependency gradle to v8.13 by
@renovate
in
#5098
Introduce convention gradle plugin for apps by
@TimoPtr
in
#5078
Update dependency io.sentry:sentry-android to v8.3.0 by
@renovate
in
#5103
Add new android common gradle convention plugin and update common module by
@TimoPtr
in
#5107
Exclude androidx wear package from compose and androidx groups by
@TimoPtr
in
#5111
Update renovate config to avoid 429 by
@TimoPtr
in
#5112
Add missing requestLimit for other repo by
@TimoPtr
in
#5113
Add jitpack to global list of repositories by
@TimoPtr
in
#5118
Extract setup build steps into a dedicated Github Action and export lint reports by
@TimoPtr
in
#5099
Apply gitattributes by
@TimoPtr
in
#5115
Introduce instrumentation test by
@TimoPtr
in
#5108
Update dependency androidx.health:health-services-client to v1.1.0-alpha05 by
@renovate
in
#5100
Disable dependabot update feature by
@TimoPtr
in
#5121
Add 'Reset frontend cache' option (using new WebStorageCompat) by
@jpelgrom
in
#5119
Apply KTLint settings to all projects by
@TimoPtr
in
#5120
Update com.android.* to v8.9.0 by
@renovate
in
#5101
Update plugin dev.panuszewski.typesafe-conventions to v0.5.1 by
@renovate
in
#5123
Update dependency org.jlleitschuh.gradle.ktlint to v12.2.0 by
@renovate
in
#5122
Move from java folders to kotlin folders for sources by
@TimoPtr
in
#5128
Add yamllint by
@TimoPtr
in
#5129
Update gitignore and commit .idea folder by
@TimoPtr
in
#5117
Add dummy instrumentation test for app/tv/wear by
@TimoPtr
in
#5126
Assist continue conversation feature while using microphone by
@TimoPtr
in
#5083
Remove gradle tasks dependency to ktlint for typesafe plugin in builld-logic by
@TimoPtr
in
#5131
Support intent-progress for Assist by
@TimoPtr
in
#5132
Update dependency fastlane to v2.227.0 by
@renovate
in
#5097
Update dependency org.junit:junit-bom to v5.12.1 by
@renovate
in
#5141
Add leakCanary for debug builds by
@TimoPtr
in
#5136
Replace android.util.Log with timber.log.Timber by
@TimoPtr
in
#5140
Improve grouping for compose libraries and change renovate config extension to json5 by
@TimoPtr
in
#5144
Remove iPhone icon in README.md by
@fpetrovski
in
#5143
Update lint configuration to be less permissive by
@TimoPtr
in
#5139
Update dependency com.google.firebase:firebase-bom to v33.11.0 by
@renovate
in
#5142
Disable lint tasks in release for automotive module by
@TimoPtr
in
#5145
Update dependency androidx.health.connect:connect-client to v1.1.0-beta01 by
@renovate
in
#5124
Update dependency io.sentry:sentry-android to v8.5.0 by
@renovate
in
#5149
Update dependency androidx.wear.compose:compose-material3 to v1.0.0-alpha34 by
@renovate
in
#5089
Use file separator to be compatible with different OS by
@dshokouhi
in
#5151
Update plugin org.ajoberstar.reckon.settings to v0.19.1 by
@renovate
in
#5150
Detect missing lockfile update on CI by
@TimoPtr
in
#5154
Merge SARIF reports by
@TimoPtr
in
#5156
Add missing gitignore entries by
@TimoPtr
in
#5146
Add a test to introduce compose screenshot testing by
@dshokouhi
in
#4835
Update com.android.* to v8.9.1 by
@renovate
in
#5158
Update androidx.compose.* by
@renovate
in
#5147
Move screenshot test to be later in the flow by
@dshokouhi
in
#5159
Update dependency org.altbeacon:android-beacon-library to v2.21.1 by
@renovate
in
#5104
AudioUrlPlayer invoke donePlaying directly if the volume is 0 by
@TimoPtr
in
#5133
Update change log week of 3/28 by
@dshokouhi
in
#5162
Update dependency com.google.guava:guava to v33.4.6-android by
@renovate
in
#5090
New Contributors
@abliss
made their first contribution in
#5019
@Martreides
made their first contribution in
#4959
@colin-foster-in-advantage
made their first contribution in
#5048
@renovate
made their first contribution in
#5084
@TimoPtr
made their first contribution in
#5091
@fpetrovski
made their first contribution in
#5143
Full Changelog
:
2025.1.2...2025.3.5
App Description
Home Assistant Companion for Android
Documentation
If you are looking for documentation around the companion applications check out the
Home Assistant Companion Documentation
. This will provide you with instructions on using the applications.
Setup App Development Environment
Download and install
Android Studio
Download / clone this repository to a folder on your computer
Create a Firebase project at
Firebase Console
Create four Android apps, with the following package names
io.homeassistant.companion.android
io.homeassistant.companion.android.debug
io.homeassistant.companion.android.minimal
io.homeassistant.companion.android.minimal.debug
Now download the
google-services.json
file and put it in the project's
/app
,
/automotive
and
/wear
folders. This file contains the configuration of the whole project (all four applications). (
You can also use the mock services file instead of generating your own
. The file should contain client IDs for all packages listed above for debugging to work properly.
If you do not generate your own file, FCM push notification will never work, only websocket notifications will
).
Start Android Studio, open your source code folder, and check if the Gradle build will be successful using Build/Make Module "App". You might have to install the right Android SDK via Tools/SDK Manager first.
Run
gradlew assembleDebug
to build all debug versions, this might take a while.
If the build is successful, you can run the app by doing the following: click
Run
->
Run 'app'
.
Connect your phone or create a new virtual device following on-screen instructions.
🎉
If you get stuck while setting up your own environment, you can ask questions in the
#devs_mobile_apps
channel on
Discord
.
Push Notifications
If you want to work on push notifications or use a development build with push notifications, please go to the server-side code
HERE
and deploy it to your Firebase project. Once you have your androidV1 URL to the deployed service, set it in to your
${GRADLE_USER_HOME}/gradle.properties
file, e.g.:
homeAssistantAndroidPushUrl
=
mydomain.cloudfunctions.net/androidV1
You can also define the rate limit function URL, e.g.:
homeAssistantAndroidRateLimitUrl
=
mydomain.cloudfunctions.net/checkRateLimits
App Flavors
The Android app has a
full
flavor that uses Google Play Services to offer features like location tracking and notifications. There is also a
minimal
flavor that does not require Google Play Services and can be found in the releases section. The minimal flavor does not have location tracking or notifications.
Building for publishing
To build the app for publishing, you will need to sign the app. To do this, do the following:
Create a keystore containing a keypair for debug application signing. In Android Studio: Menu/Build/Generate signed APK, then use a button to create a new keystore. Remember the passwords and the key alias. Default, the keystore must be named
release_keystore.keystore
and should be placed in the
home-assistant-Android/app
and
home-assistant-Android/wear
folder.
Set environmental variables used in
app/build.gradle.kts
:
KEYSTORE_PASSWORD
KEYSTORE_ALIAS
KEYSTORE_ALIAS_PASSWORD
KEYSTORE_PATH
(if your keystore is located differently than stated above)
Run
gradlew build
The signed APK is located in your build folder
Testing Dev Releases
We are using
Github Actions
to perform continuous integration both by unit testing, deploying dev releases to
Play Store Beta
and final releases to the
Play Store
when we release. To help test out a specific feature/fixes users can find the APK on the Actions page for each pull request, this debug APK can be installed side-by-side with the production or beta builds.
Quality
We are using
ktlint
as our linter. You can run a check locally on your machine with:
./gradlew ktlintCheck
This command runs on our CI for every PR to check if it passes all tests. So we strongly recommend running it before committing.
To run a check with an auto-format:
./gradlew ktlintFormat
Translating
The project currently uses
Lokalise
to translate the application. If you are interested in helping translate go to the link and click start translating!
Generating a release to production
Go to the latest Pre-release and edit it
Uncheck the Pre-release box, check the Latest release box, and click Update release
This should cause the
Play Publish Production
Workflow to execute and should handle the rest for Google Play
Some platforms, such as the Amazon App Store, need to be updated manually
F-Droid uses the
version_code.txt
file of the latest release to detect a new production release and build it themselves, this may take some time
Managing Dependencies and Lockfiles
This project utilizes Gradle's
dependency locking
feature to ensure consistent and reproducible builds by tracking the precise versions of all libraries used.
Updating Dependencies and Lockfiles
When adding or updating a dependency in
gradle/libs.versions.toml
, it's crucial to also update the corresponding lockfiles. This is necessary because the lockfiles capture the exact versions of all direct and transitive dependencies.
To update the lockfiles, run the following command from the project root
./gradlew alldependencies --write-locks
This command will resolve all dependencies and update the
gradle.lockfile
in each module.
Automated Dependency Updates with Renovate
To streamline dependency management, we've integrated
Renovate
into this repository. Renovate automatically creates pull requests to update dependencies and their associated lockfiles.
Documentation
If you are looking for documentation around the companion applications check out the
Home Assistant Companion Documentation
. This will provide you with instructions on using the applications.
Setup App Development Environment
Download and install
Android Studio
Download / clone this repository to a folder on your computer
Create a Firebase project at
Firebase Console
Create four Android apps, with the following package names
io.homeassistant.companion.android
io.homeassistant.companion.android.debug
io.homeassistant.companion.android.minimal
io.homeassistant.companion.android.minimal.debug
Now download the
google-services.json
file and put it in the project's
/app
,
/automotive
and
/wear
folders. This file contains the configuration of the whole project (all four applications). (
You can also use the mock services file instead of generating your own
. The file should contain client IDs for all packages listed above for debugging to work properly.
If you do not generate your own file, FCM push notification will never work, only websocket notifications will
).
Start Android Studio, open your source code folder, and check if the Gradle build will be successful using Build/Make Module "App". You might have to install the right Android SDK via Tools/SDK Manager first.
Run
gradlew assembleDebug
to build all debug versions, this might take a while.
If the build is successful, you can run the app by doing the following: click
Run
->
Run 'app'
.
Connect your phone or create a new virtual device following on-screen instructions.
🎉
If you get stuck while setting up your own environment, you can ask questions in the
#devs_mobile_apps
channel on
Discord
.
Push Notifications
If you want to work on push notifications or use a development build with push notifications, please go to the server-side code
HERE
and deploy it to your Firebase project. Once you have your androidV1 URL to the deployed service, set it in to your
${GRADLE_USER_HOME}/gradle.properties
file, e.g.:
homeAssistantAndroidPushUrl
=
mydomain.cloudfunctions.net/androidV1
You can also define the rate limit function URL, e.g.:
homeAssistantAndroidRateLimitUrl
=
mydomain.cloudfunctions.net/checkRateLimits
App Flavors
The Android app has a
full
flavor that uses Google Play Services to offer features like location tracking and notifications. There is also a
minimal
flavor that does not require Google Play Services and can be found in the releases section. The minimal flavor does not have location tracking or notifications.
Building for publishing
To build the app for publishing, you will need to sign the app. To do this, do the following:
Create a keystore containing a keypair for debug application signing. In Android Studio: Menu/Build/Generate signed APK, then use a button to create a new keystore. Remember the passwords and the key alias. Default, the keystore must be named
release_keystore.keystore
and should be placed in the
home-assistant-Android/app
and
home-assistant-Android/wear
folder.
Set environmental variables used in
app/build.gradle.kts
:
KEYSTORE_PASSWORD
KEYSTORE_ALIAS
KEYSTORE_ALIAS_PASSWORD
KEYSTORE_PATH
(if your keystore is located differently than stated above)
Run
gradlew build
The signed APK is located in your build folder
Testing Dev Releases
We are using
Github Actions
to perform continuous integration both by unit testing, deploying dev releases to
Play Store Beta
and final releases to the
Play Store
when we release. To help test out a specific feature/fixes users can find the APK on the Actions page for each pull request, this debug APK can be installed side-by-side with the production or beta builds.
Quality
We are using
ktlint
as our linter. You can run a check locally on your machine with:
./gradlew ktlintCheck
This command runs on our CI for every PR to check if it passes all tests. So we strongly recommend running it before committing.
To run a check with an auto-format:
./gradlew ktlintFormat
Translating
The project currently uses
Lokalise
to translate the application. If you are interested in helping translate go to the link and click start translating!
Generating a release to production
Go to the latest Pre-release and edit it
Uncheck the Pre-release box, check the Latest release box, and click Update release
This should cause the
Play Publish Production
Workflow to execute and should handle the rest for Google Play
Some platforms, such as the Amazon App Store, need to be updated manually
F-Droid uses the
version_code.txt
file of the latest release to detect a new production release and build it themselves, this may take some time
Managing Dependencies and Lockfiles
This project utilizes Gradle's
dependency locking
feature to ensure consistent and reproducible builds by tracking the precise versions of all libraries used.
Updating Dependencies and Lockfiles
When adding or updating a dependency in
gradle/libs.versions.toml
, it's crucial to also update the corresponding lockfiles. This is necessary because the lockfiles capture the exact versions of all direct and transitive dependencies.
To update the lockfiles, run the following command from the project root
./gradlew alldependencies --write-locks
This command will resolve all dependencies and update the
gradle.lockfile
in each module.
Automated Dependency Updates with Renovate
To streamline dependency management, we've integrated
Renovate
into this repository. Renovate automatically creates pull requests to update dependencies and their associated lockfiles.
Download Home Assistant (minimal version) (Android Automotive) APK
Fast, free and safe download.
APK Permissions 40
- android.permission.ACCESS_BACKGROUND_LOCATION
- android.permission.ACCESS_COARSE_LOCATION
- android.permission.ACCESS_FINE_LOCATION
- android.permission.ACCESS_NETWORK_STATE
- android.permission.ACCESS_NOTIFICATION_POLICY
- android.permission.ACCESS_WIFI_STATE
- android.permission.ACTIVITY_RECOGNITION
- android.permission.BLUETOOTH
- android.permission.BLUETOOTH_ADMIN
- android.permission.BLUETOOTH_ADVERTISE
- android.permission.BLUETOOTH_CONNECT
- android.permission.BLUETOOTH_SCAN
- android.permission.CALL_PHONE
- android.permission.CAMERA
- android.permission.CHANGE_WIFI_MULTICAST_STATE
- android.permission.FOREGROUND_SERVICE
- android.permission.FOREGROUND_SERVICE_DATA_SYNC
- android.permission.FOREGROUND_SERVICE_LOCATION
- android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING
- android.permission.INTERNET
- android.permission.MODIFY_AUDIO_SETTINGS
- android.permission.NFC
- android.permission.PACKAGE_USAGE_STATS
- android.permission.POST_NOTIFICATIONS
- android.permission.QUERY_ALL_PACKAGES
- android.permission.READ_PHONE_STATE
- android.permission.RECEIVE_BOOT_COMPLETED
- android.permission.RECORD_AUDIO
- android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
- android.permission.SCHEDULE_EXACT_ALARM
- android.permission.SYSTEM_ALERT_WINDOW
- android.permission.USE_BIOMETRIC
- android.permission.USE_FINGERPRINT
- android.permission.VIBRATE
- android.permission.WAKE_LOCK
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.WRITE_SETTINGS
- com.android.alarm.permission.SET_ALARM
- com.google.android.gms.permission.ACTIVITY_RECOGNITION
- io.homeassistant.companion.android.minimal.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
APK Verified
The cryptographic signature guarantees that the file is safe to install and was not tampered with in any way.
More by Home Assistant
Frequently Asked Questions about Home Assistant (minimal version) (Android Automotive) APK
This variant is built for devices that report `arm64-v8a, armeabi-v7a, x86, x86_64` as their primary ABI. If your device's CPU matches, this is the smallest, fastest version to install.
Yes — the APK's signature has been cryptographically verified against the publisher's signing key. The SHA-256 hash is shown in the File Information panel so you can independently confirm the file matches the original release.
Android 21 (API level 34) or newer. Older devices will refuse the install.
Install a free app like 'CPU-Z' or 'Droid Hardware Info' from the Play Store and look at the ABI / Instruction Set row. Most phones made after 2017 are arm64-v8a; if in doubt, download the universal variant.
All variants are functionally identical — same features, same version. They differ only in which CPU architectures the native code is compiled for, and (sometimes) which screen densities the included graphics target. Pick the one that matches your device for the smallest install size, or pick 'Universal' if you're unsure.