Six interconnected fixes to make Olm/Megolm state persist correctly across restarts: - Fix OlmAccount/OlmSession unpickle argument order (data, key) — was reversed, causing INVALID_BASE64 on every restore - Fix pickle byte encoding: pickle() returns ByteArray, not StringBuffer; encode/decode with ISO_8859_1 - Track publishedOtkCount in SharedPreferences to avoid evicting existing OTKs on restore (only generate MAX - published new keys) - Delay startSync() until after uploadKeys() on fresh login to avoid concurrent OlmAccount access (race condition causing BAD_MESSAGE_KEY_ID) - Persist encryptedRooms to SharedPreferences so rooms stay encrypted across restarts - Check m.room.encryption in both state and timeline events (server returns it in timeline for rooms where encryption was enabled early) Also adds SAS device verification UI, DM naming improvements, and updates state.md with full architecture and debugging notes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
81 lines
2.8 KiB
Nix
81 lines
2.8 KiB
Nix
{
|
|
description = "Nix dev shell for building matrix-android from the CLI";
|
|
|
|
inputs = {
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
};
|
|
|
|
outputs = { self, flake-utils, nixpkgs }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
config.allowUnfree = true;
|
|
config.android_sdk.accept_license = true;
|
|
config.permittedInsecurePackages = [ "olm-3.2.16" ];
|
|
};
|
|
|
|
androidComposition = pkgs.androidenv.composeAndroidPackages {
|
|
platformVersions = [ "31" "35" ];
|
|
buildToolsVersions = [ "30.0.2" "34.0.0" "35.0.0" ];
|
|
includeEmulator = true;
|
|
includeNDK = true;
|
|
includeSources = false;
|
|
includeSystemImages = true;
|
|
systemImageTypes = [ "google_apis" ];
|
|
abiVersions = [ "x86_64" ];
|
|
};
|
|
|
|
androidSdk = androidComposition.androidsdk;
|
|
androidSdkRoot = "${androidSdk}/libexec/android-sdk";
|
|
in
|
|
{
|
|
devShells.default = pkgs.mkShell {
|
|
packages = [
|
|
pkgs.gradle
|
|
pkgs.jdk17
|
|
androidSdk
|
|
pkgs.matrix-commander
|
|
];
|
|
|
|
ANDROID_HOME = androidSdkRoot;
|
|
ANDROID_SDK_ROOT = androidSdkRoot;
|
|
JAVA_HOME = pkgs.jdk17.home;
|
|
|
|
shellHook = ''
|
|
export ANDROID_USER_HOME="$PWD/.android"
|
|
export GRADLE_USER_HOME="$PWD/.gradle"
|
|
export PATH="$ANDROID_SDK_ROOT/platform-tools:$PATH"
|
|
export GRADLE_OPTS="-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_SDK_ROOT/build-tools/35.0.0/aapt2"
|
|
|
|
cat > local.properties <<EOF
|
|
# Generated by nix develop.
|
|
sdk.dir=$ANDROID_SDK_ROOT
|
|
EOF
|
|
|
|
# Launches the Pixel_3a_API_35 AVD. System images come from the nix SDK.
|
|
# The emulator window is shown by default.
|
|
start-avd() {
|
|
local avd_name="Pixel_3a_API_35"
|
|
local avd_dir="$HOME/.android/avd/$avd_name.avd"
|
|
if [ ! -d "$avd_dir" ]; then
|
|
echo "Creating AVD $avd_name..."
|
|
echo "no" | avdmanager create avd \
|
|
-n "$avd_name" \
|
|
-k "system-images;android-35;google_apis;x86_64" \
|
|
-d "pixel_3a" --force
|
|
fi
|
|
emulator -avd "$avd_name" -no-snapshot-load "$@" &
|
|
echo "Emulator starting (PID $!) — run 'adb wait-for-device' to wait for boot"
|
|
}
|
|
|
|
echo "matrix-android dev shell"
|
|
echo " JAVA_HOME=$JAVA_HOME"
|
|
echo " ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
|
|
echo " Build with: gradle assembleDebug"
|
|
echo " Emulator: start-avd"
|
|
'';
|
|
};
|
|
});
|
|
}
|