Top Related Projects
A Matrix collaboration client for Android.
A private messenger for Android.
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
A private messenger for Android.
Quick Overview
DeltaChat Android is an open-source email-based instant messaging app for Android devices. It uses existing email servers for communication, providing end-to-end encryption and a chat-like interface while maintaining compatibility with standard email clients.
Pros
- Uses existing email infrastructure, eliminating the need for additional servers
- End-to-end encryption for secure communication
- Decentralized architecture, enhancing privacy and reducing single points of failure
- Compatible with standard email clients, allowing communication with non-DeltaChat users
Cons
- Requires an email account for each user
- May have slower message delivery compared to dedicated messaging platforms
- Limited support for rich media features compared to some modern chat apps
- Learning curve for users accustomed to traditional messaging apps
Getting Started
To get started with DeltaChat Android:
- Download the app from the Google Play Store or F-Droid
- Install and open the app
- Enter your email address and password
- Wait for the app to configure your account
- Start chatting with other DeltaChat users or invite contacts via email
For developers interested in contributing:
- Fork the repository on GitHub
- Clone your fork:
git clone https://github.com/your-username/deltachat-android.git
- Set up the development environment following the instructions in the project's README
- Make changes and submit pull requests for review
Competitor Comparisons
A Matrix collaboration client for Android.
Pros of Element
- More active development with frequent updates and contributions
- Larger community support and user base
- Extensive feature set, including end-to-end encryption and cross-platform synchronization
Cons of Element
- Higher complexity and steeper learning curve for new users
- Larger codebase, potentially leading to more maintenance challenges
- Heavier resource usage due to advanced features
Code Comparison
Element Android:
private fun handleSyncRequestStateChange(action: SyncAction) {
setState {
copy(
syncRequestState = syncRequestState.copy(
isRunning = action.isRunning,
incrementalSyncRequests = action.incrementalSyncRequests
)
)
}
}
DeltaChat Android:
private void handleSyncRequestStateChange(SyncAction action) {
setState(state -> state.copy(
syncRequestState = state.syncRequestState.copy(
isRunning = action.isRunning(),
incrementalSyncRequests = action.getIncrementalSyncRequests()
)
));
}
The code snippets show similar functionality for handling sync request state changes. Element uses Kotlin, while DeltaChat uses Java. Element's implementation appears more concise due to Kotlin's language features.
A private messenger for Android.
Pros of Signal-Android
- More robust end-to-end encryption implementation
- Larger user base and more active development community
- Advanced features like disappearing messages and voice/video calls
Cons of Signal-Android
- Requires phone number for registration, potentially compromising user privacy
- Centralized server architecture, which may be less resilient to censorship
- Less flexible in terms of server choice and customization options
Code Comparison
Signal-Android (Kotlin):
private fun initializeSignalProtocolStore() {
val protocolStore = SignalProtocolStore(context)
val preKeyStore = PreKeyStore(context)
val sessionStore = SessionStore(context)
val identityKeyStore = IdentityKeyStore(context)
SignalProtocolStoreImpl(protocolStore, preKeyStore, sessionStore, identityKeyStore)
}
DeltaChat-Android (Java):
private void initializeDeltaChatCore() {
DcContext dcContext = new DcContext(getApplicationContext());
dcContext.open(accountDir);
dcContext.configure();
DcHelper.setContext(dcContext);
}
The code snippets show different approaches to initializing the core functionality. Signal-Android focuses on setting up the encryption protocol stores, while DeltaChat-Android initializes its core context and configuration.
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
Pros of Berty
- Decentralized architecture using IPFS for peer-to-peer communication
- Built-in support for offline messaging and mesh networks
- Cross-platform development with Go and React Native
Cons of Berty
- Relatively newer project with potentially less stability
- Smaller community and ecosystem compared to Delta Chat
- More complex setup due to its decentralized nature
Code Comparison
Delta Chat (Java):
public class DcChat extends DcObject {
public DcChat(long chatId) {
super(chatId);
}
// ...
}
Berty (Go):
type ProtocolService struct {
protocolClient protocol.Client
// ...
}
func NewProtocolService(client protocol.Client) *ProtocolService {
return &ProtocolService{protocolClient: client}
}
Delta Chat uses Java for its Android app, focusing on a more traditional client-server model. Berty, on the other hand, utilizes Go for its core protocol implementation, emphasizing its decentralized architecture.
Both projects aim to provide secure messaging, but their approaches differ significantly. Delta Chat leverages existing email infrastructure, while Berty builds a completely new decentralized network. This fundamental difference is reflected in their codebases and overall project structures.
A private messenger for Android.
Pros of Session Android
- Focuses on privacy and anonymity with decentralized architecture
- Implements end-to-end encryption for all communications
- Supports group chats with enhanced privacy features
Cons of Session Android
- Less mature project with potentially fewer features
- May have a steeper learning curve for users new to privacy-focused messaging
- Smaller user base compared to more established messaging apps
Code Comparison
Session Android:
private fun createOnionRequestAPI(): OnionRequestAPI {
return OnionRequestAPI.create(this, database)
}
DeltaChat Android:
private void initCore() {
core = new DcContext(dcDir.getAbsolutePath());
core.setStockTranslations();
}
Both projects use different programming languages (Kotlin vs Java) and have distinct approaches to their core functionality. Session Android focuses on creating an onion request API for enhanced privacy, while DeltaChat Android initializes its core context for messaging operations.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Delta Chat Android Client
This is the Android client for Delta Chat. It is available on F-Droid and the Google Play Store. The APK can also be downloaded from get.delta.chat.
For the core library and other common info, please refer to the Delta Chat Core Library.
For general contribution hints, please refer to CONTRIBUTING.md.
Check Out Repository
When checking out deltachat-android, make sure also to check out the subproject deltachat-core-rust:
- When using Git, you can do this initially by
$ git clone --recursive https://github.com/deltachat/deltachat-android
or later bygit submodule update --init --recursive
. If you do this in your home directory, this results in the folder~/deltachat-android
which is just fine.
Build Using Nix
The repository contains Nix development environment
described in flake.nix
file.
If you don't have Nix installed,
the easiest way is to use The Determinate Nix Installer
which installs Nix with Flakes feature enabled out of the box
and can be cleanly uninstalled with /nix/nix-installer uninstall
once you don't need it anymore.
Once you have Nix with Flakes feature set up start the development environment shell:
nix develop
Nix development environment contains Rust with cross-compilation toolchains and Android SDK.
To build an APK run the following 2 steps.
Note that the first step may take some time to build for all architectures. You can optionally read
the first comment block in the ndk-make.sh
script
for pointers on how to build for a specific architecture.
$ scripts/ndk-make.sh
$ ./gradlew assembleDebug
Resulting APK files can be found in
build/outputs/apk/gplay/debug/
and
build/outputs/apk/fat/debug/
.
Build Using Dockerfile
Another way to build APK is to use provided Dockerfile
with Docker or Podman.
Podman is a drop-in replacement for Docker that does not require root privileges.
If you don't have Docker or Podman setup yet, read how to setup Podman below. If you don't want to use Docker or Podman, read how to manually install the build environment.
First, build the image deltachat-android
by running
podman build --build-arg UID=$(id -u) --build-arg GID=$(id -g) . -t deltachat-android
or
docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) . -t deltachat-android
Then, run the image:
podman run --userns=keep-id -it --name deltachat -v $(pwd):/home/app:z -w /home/app localhost/deltachat-android
or
docker run -it --name deltachat -v $(pwd):/home/app:z -w /home/app localhost/deltachat-android
You can leave the container with Ctrl+D or by typing exit
and re-enter it with
docker start -ia deltachat
or podman start -ia deltachat
.
Within the container, install toolchains and build the native library:
deltachat@6012dcb974fe:/home/app$ scripts/install-toolchains.sh
deltachat@6012dcb974fe:/home/app$ scripts/ndk-make.sh
Then, build an APK:
deltachat@6012dcb974fe:/home/app$ ./gradlew assembleDebug
Troubleshooting
-
Executing
./gradlew assembleDebug
inside the container fails withThe SDK directory '/home/user/Android/Sdk' does not exist.
:The problem is that Android Studio (outside the container) automatically creates a file
local.properties
with a content likesdk.dir=/home/username/Android/Sdk
, so, Gradle-inside-the-container looks for the Sdk at/home/username/Android/Sdk
, where it can't find it. You could:- either: remove the file or just the line starting with
sdk.dir
- or: run
./gradlew assembleDebug
from outside the container (however, there may be incompatibility issues if different versions are installed inside and outside the container)
- either: remove the file or just the line starting with
-
Running the image fails with
ERRO[0000] The storage 'driver' option must be set in /etc/containers/storage.conf, guarantee proper operation.
:In /etc/containers/storage.conf, replace the line:
driver = ""
with:driver = "overlay"
. You can also set thedriver
option to something else, you just need to set it to something. Read about possible options here.
Setup Podman
These instructions were only tested on a Manjaro machine so far. If anything doesn't work, please open an issue.
First, Install Podman.
Then, if you want to run Podman without root, run:
sudo touch /etc/subgid
sudo touch /etc/subuid
sudo usermod --add-subuids 165536-231072 --add-subgids 165536-231072 yourusername
(replace yourusername
with your username).
See https://wiki.archlinux.org/index.php/Podman#Rootless_Podman for more information.
Install Build Environment (without Docker or Podman)
To setup build environment manually:
- Either, in Android Studio, go to "Tools / SDK Manager / SDK Tools", enable "Show Package Details", select "CMake" and the desired NDK (install the same NDK version as the Dockerfile), hit "Apply".
- Or read Dockerfile and mimic what it does.
Then, in both cases, install Rust using rustup
and Rust toolchains for cross-compilation by executing scripts/install-toolchains.sh
.
Then, configure ANDROID_NDK_ROOT
environment variable to point to the Android NDK
installation directory e.g. by adding this to your .bashrc
:
export ANDROID_NDK_ROOT=${HOME}/Android/Sdk/ndk/[version] # (or wherever your NDK is) Note that there is no `/` at the end!
export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}
After that, call scripts/ndk-make.sh
in the root directory to build core-rust.
Afterwards run the project in Android Studio. The project requires API 25.
With chance, that's it :) - if not, read on how to set up a proper development environment.
Install Development Environment
-
Some libs required by Android Studio may be missing on 64 bit Linux machines Source], so for Ubuntu execute
$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
and for Fedora execute$ sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686
. -
Download Android Studio from https://developer.android.com (android-studio-ide-...-linux.zip) and unpack the archive which contains a single folder called
android-studio
; move this folder e.g. to~/android-studio
. -
To launch Android Studio for the first time, open a terminal, navigate to
~/android-studio/bin
, execute./studio.sh
and use all the standard values from the wizard. -
Android Studio now asks you if you want to open an existing project; choose
~/deltachat-android
as created in the "Build" chapter (Android Studio starts to build the project, however, there are some steps missing before this will succeed). -
If components are missing, click on the corresponding error message and install eg. required SDKs and the "Build-Tools" (you should also find the option at "Tools / Android / SDK Manager / SDK Platforms"). Now the build should succeed - but the app still misses the native part.
-
Download Android NDK from NDK Archives and extract the archive containing a single folder called something like
android-ndk-r23b-linux
; move this folder e.g. to~/android-ndk
. -
Export the folder path to your environment as
ANDROID_NDK_ROOT
and add it toPATH
. You can achieve this e.g. by adding this to your.bashrc
export ANDROID_NDK_ROOT=${HOME}/android-ndk export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}
Run UI Tests and Benchmarks
-
You don't necessarily need a dedicated testing device. Backup your current account first, maybe there are some bugs in switching accounts.
-
You can run benchmarks on either an emulated device or a real device. You need at least Android 9. For better benchmark results, you should run the benchmark on a real device and make sure that the core is compiled in release mode.
-
Disable animations on your device, otherwise the test may fail: at "Developer options" set all of "Window animation scale", "Transition animation scale" and "Animator duration scale" to 0x
-
In Android Studio: "File" / "Sync project with gradle files"
-
In Android Studio: "Run" / "Edit configurations" / "+" / "Android Instrumented test": Either select a specific class or select "All in Module" / "OK" / Select your configuration in the toolbar / Click on the green "run" button in the toolbar to run the tests
Get the benchmark results
When the benchmark is done, you will get a result like
MEASURED RESULTS (Benchmark) - Going thorough all 10 chats: 11635,11207,11363,11352,11279,11183,11137,11145,11032,11057
.
You can paste 11635,11207,11363,11352,11279,11183,11137,11145,11032,11057
into a cell in a LibreOffice spreadsheet, do "Data" / "Text to columns",
choose ,
as a separator, hit "OK", and create a diagram.
Run online tests
For some tests, you need to provide the credentials to an actual email account. You have 2 ways to do this:
-
(Recommended): Put them into the file ~/.gradle/gradle.properties (create it if it doesn't exist):
TEST_ADDR=youraccount@yourdomain.org TEST_MAIL_PW=youpassword
-
Or set them via environment variables.
Translations
Android metadata and changelogs are translated using Weblate.
Credits
The user interface classes are based on the Signal messenger.
License
Licensed GPLv3+, see the LICENSE file for details.
Copyright © 2022 Delta Chat contributors.
Top Related Projects
A Matrix collaboration client for Android.
A private messenger for Android.
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
A private messenger for Android.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot