Bitwarden mobile apps (Password Manager and Authenticator) for Android.
Bitwarden Android
Contents
Compatibility
- Minimum SDK: 29 (Android 10)
- Target SDK: 37 (Android 17)
- Device Types Supported: Phone and Tablet
- Orientations Supported: Portrait and Landscape
Setup
- Clone the repository:
$ git clone https://github.com/bitwarden/android
- Create a
user.propertiesfile in the root directory of the project and add the following properties:
gitHubToken: A "classic" Github Personal Access Token (PAT) with the read:packages scope (ex: gitHubToken=gphxx...xx). These can be generated by going to the Github tokens page. See the Github Packages user documentation concerning authentication for more details.
- localSdk: A boolean value to determine if the SDK should be loaded from the local maven artifactory (ex: localSdk=true). This is particularly useful when developing new SDK capabilities. Review Linking SDK to clients for more details.
- Setup the code style formatter:
docs/bitwarden-style.xml as their code style scheme. In IntelliJ / Android Studio:
- Navigate to Preferences > Editor > Code Style. - Hit the Manage button next to Scheme. - Select Import. - Find the bitwarden-style.xml file in the project's docs/ directory. - Import "from" BitwardenStyle "to" BitwardenStyle. - Hit Apply and OK to save the changes and exit Preferences.
Note that in some cases you may need to restart Android Studio for the changes to take effect.
All code should be formatted before submitting a pull request. This can be done manually but it can also be helpful to create a macro with a custom keyboard binding to auto-format when saving. In Android Studio on OS X:
- Select Edit > Macros > Start Macro Recording - Select Code > Optimize Imports - Select Code > Reformat Code - Select File > Save All - Select Edit > Macros > Stop Macro Recording
This can then be mapped to a set of keys by navigating to Android Studio > Preferences and editing the macro under Keymap (ex : shift + command + s).
Please avoid mixing formatting and logical changes in the same commit/PR. When possible, fix any large formatting issues in a separate PR before opening one to make logical changes to the same code. This helps others focus on the meaningful code changes when reviewing the code.
- Setup JDK
Version21:
Preferences > Build, Execution, Deployment > Build Tools > Gradle.
- Hit the selected Gradle JDK next to Gradle JDK:.
- Select a 21.x version or hit Download JDK... if not present.
- Select Version 21.
- Select your preferred Vendor.
- Hit Download.
- Hit Apply.
- Setup
detektpre-commit hook (optional):
echo "Writing detekt pre-commit hook..."
cat << 'EOL' > .git/hooks/pre-commit
#!/usr/bin/env bash
echo "Running detekt check..." OUTPUT="/tmp/detekt-$(date +%s)" ./gradlew -Pprecommit=true detekt > $OUTPUT EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then cat $OUTPUT rm $OUTPUT echo "*" echo " detekt failed " echo " Please fix the above issues before committing " echo "*" exit $EXIT_CODE fi rm $OUTPUT EOL echo "detekt pre-commit hook written to .git/hooks/pre-commit" echo "Making the hook executable" chmod +x .git/hooks/pre-commit
echo "detekt pre-commit hook installed successfully to .git/hooks/pre-commit"
Dependencies
Application Dependencies
The following is a list of all third-party dependencies included as part of the application beyond the standard Android SDK.
- AndroidX Activity
- AndroidX Appcompat
- AndroidX Autofill
- AndroidX Biometrics
- AndroidX Browser
- AndroidX Camera
- AndroidX Compose
- AndroidX Core
- AndroidX Credentials
- AndroidX Lifecycle
- AndroidX Navigation
- AndroidX Room
- AndroidX Security
- AndroidX WorkManager
- Dagger Hilt
- Glide
- kotlinx.collections.immutable
- kotlinx.coroutines
- kotlinx.serialization
- OkHttp 3
- Retrofit 2
- Timber
- ZXing
The following is an additional list of third-party dependencies that are only included in the non-F-Droid build variants of the application.
- Firebase Cloud Messaging
- Firebase Crashlytics
- Google Play Reviews
Development Environment Dependencies
The following is a list of additional third-party dependencies used as part of the local development environment. This includes test-related artifacts as well as tools related to code quality and linting. These are not present in the final packaged application.
- detekt
- JUnit 5
- MockK
- Robolectric
- Turbine
CI/CD Dependencies
The following is a list of additional third-party dependencies used as part of the CI/CD workflows. These are not present in the final packaged application.
- Fastlane
- Kover