---
tags: [mobile, vision, sdk]
dataset: [CIFAR-10]
framework: [Android, Kotlin, TensorFlowLite]
---
# Flower Android Client Example with Kotlin and TensorFlow Lite 2022
[](https://github.com/adap/flower/blob/main/examples/android-kotlin)
This example is similar to the Flower Android Example in Java:
> This example demonstrates a federated learning setup with Android Clients. The training on Android is done on a CIFAR10 dataset using TensorFlow Lite. The setup is as follows:
>
> - The CIFAR10 dataset is randomly split across 10 clients. Each Android client holds a local dataset of 5000 training examples and 1000 test examples.
> - The FL server runs in Python but all the clients run on Android.
> - We use a strategy called FedAvgAndroid for this example.
> - The strategy is vanilla FedAvg with a custom serialization and deserialization to handle the Bytebuffers sent from Android clients to Python server.
## Set up
Start by cloning the example project. We prepared a single-line command that you can copy into your shell which will checkout the example for you:
```sh
git clone --depth=1 https://github.com/adap/flower.git && mv flower/examples/android-kotlin . && rm -rf flower && cd android-kotlin
```
Download the training and testing data from and extract them to `client/app/src/main/assets/data`.
Download the TFLite model from to `client/app/src/main/assets/model/cifar10.tflite`.
Alternatively, see `gen_tflite/README.md` for information on how to convert the CIFAR10 models to a `.tflite` file.
### Install dependencies
Project dependencies (such as `tensorflow` and `flwr`) are defined in `pyproject.toml`. We recommend [Poetry](https://python-poetry.org/docs/) to install those dependencies and manage your virtual environment ([Poetry installation](https://python-poetry.org/docs/#installation)), but feel free to use a different way of installing dependencies and managing virtual environments if you have other preferences.
```sh
poetry install
poetry shell
```
Poetry will install all your dependencies in a newly created virtual environment. To verify that everything works correctly you can run the following command:
```sh
poetry run python3 -c "import flwr"
```
If you don't see any errors you're good to go!
Alternatively, with Pip.
```sh
python3 -m pip install -r requirements.txt
```
## Run the demo
Start the Flower server at `./`:
```sh
python3 server.py
```
Or without the "3" on windows.
```sh
python server.py
```
Install the app on *physical* Android devices and launch it.
*Note*: the highest tested JDK version the app supports is 16; it fails to build using JDK 19 on macOS.
In the user interface, fill in:
- Device number: a unique number among 1 ~ 10.
This number is used to choose the partition of the training dataset.
- Server IP: an IPv4 address of the computer your backend server is running on. You can probably find it in your system network settings.
- Server port: 8080.
Push the first button and load the dataset. This may take a minute.
Push the second button and start the training.