notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 272da6ccedc07370c7f3024f0fd6cfc1681a2c86
parent 116ba27f3f5445c152d9a24425b5bda9be1f0908
Author: kernelkind <kernelkind@gmail.com>
Date:   Thu,  4 Apr 2024 14:50:39 -0400

Add nix-shell for macos android development

Co-authored-by: William Casarin <jb55@jb55.com>
Link: 20240404185039.3738-1-kernelkind@gmail.com
Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
M.envrc | 3---
MREADME.md | 39++++++++++++++++++++++++++++++++-------
Mshell.nix | 73++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
3 files changed, 80 insertions(+), 35 deletions(-)

diff --git a/.envrc b/.envrc @@ -1,7 +1,4 @@ - -if [[ "$OSTYPE" == "linux-gnu"* ]]; then use nix -fi export PATH=$PATH:$HOME/.cargo/bin export JB55=32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245 diff --git a/README.md b/README.md @@ -10,29 +10,54 @@ Look it actually runs on android! <img src="https://cdn.jb55.com/s/bebeeadf7001fae1.png" height="500px" /> -## Compiling +# Developer Setup + +## Linux/MacOS + +First, install [nix][nix] if you don't have it. The `shell.nix` provides a reproducible build environment for android and rust. I recommend using [direnv][direnv] to load this environment when you `cd` into the directory. +If you don't have [direnv][direnv], enter the dev shell via: + +```bash +$ nix-shell +``` + Once you have your dev shell setup, you can build with this command: ```bash -$ cargo apk run --release +$ cargo run --release ``` -This will build and run the app on your android device. If you don't have the `aarch64-linux-android` rust target yet, you can install it with: +## Android + +The dev shell should also have all of the android-sdk dependencies needed for development, but you still need the `aarch64-linux-android` rustup target installed: ``` $ rustup target add aarch64-linux-android ``` -You can also just type +To run on a real device, just type: + +```bash +$ cargo apk run --release +``` + +## Android Emulator + +- Install [Android Studio](https://developer.android.com/studio) +- Open 'Device Manager' in Android Studio +- Add a new device with API level `34` and ABI `arm64-v8a` (even though the app uses 30, the 30 emulator can't find the vulkan adapter, but 34 works fine) +- Start up the emulator + +while the emulator is running, run: ```bash -$ cargo run --release +cargo apk run --release ``` -To run the multiplatform desktop version of the app called NoteDeck. - +The app should appear on the emulator [direnv]: https://direnv.net/ +[nix]: https://nixos.org/download/ diff --git a/shell.nix b/shell.nix @@ -1,34 +1,57 @@ -{ pkgs ? import <nixpkgs> {}, use_android ? true }: +{ pkgs ? import <nixpkgs> { } +, android ? fetchTarball "https://github.com/tadfisher/android-nixpkgs/archive/refs/tags/2024-04-02.tar.gz" +, use_android ? true }: with pkgs; + let x11libs = lib.makeLibraryPath [ xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi libglvnd vulkan-loader vulkan-validation-layers libxkbcommon ]; + android-nixpkgs = callPackage android { }; ndk-version = "24.0.8215888"; - androidComposition = androidenv.composeAndroidPackages { - includeNDK = true; - ndkVersions = [ ndk-version ]; - platformVersions = [ "28" "29" "30" ]; - useGoogleAPIs = false; - #useGoogleTVAddOns = false; - #includeExtras = [ - # "extras;google;gcm" - #]; - }; - androidsdk = androidComposition.androidsdk; - android-home = "${androidsdk}/libexec/android-sdk"; - ndk-home = "${android-home}/ndk/${ndk-version}"; -in -mkShell ({ - nativeBuildInputs = [ - cargo-udeps cargo-edit cargo-watch rustup rustfmt libiconv pkg-config cmake fontconfig - brotli wabt gdb heaptrack + android-sdk = android-nixpkgs.sdk (sdkPkgs: with sdkPkgs; [ + cmdline-tools-latest + build-tools-34-0-0 + platform-tools + platforms-android-30 + emulator + ndk-24-0-8215888 + ]); - heaptrack + android-sdk-path = "${android-sdk.out}/share/android-sdk"; + android-ndk-path = "${android-sdk-path}/ndk/${ndk-version}"; - ] ++ pkgs.lib.optional use_android [ jre openssl libiconv androidsdk cargo-apk ] ; +in +mkShell ({ + buildInputs = [] ++ pkgs.lib.optional use_android [ + android-sdk + ]; + nativeBuildInputs = [ + #cargo-udeps + #cargo-edit + #cargo-watch + #rustup + #rustfmt + libiconv + pkg-config + #cmake + fontconfig + #brotli + #wabt + #gdb + #heaptrack + ] ++ lib.optional use_android [ + jre + openssl + libiconv + cargo-apk + ] ++ lib.optional stdenv.isDarwin [ + darwin.apple_sdk.frameworks.Security + darwin.apple_sdk.frameworks.OpenGL + darwin.apple_sdk.frameworks.CoreServices + darwin.apple_sdk.frameworks.AppKit + ]; + ANDROID_NDK_ROOT = android-ndk-path; +} // (if !stdenv.isDarwin then { LD_LIBRARY_PATH="${x11libs}"; -} // (if !use_android then {} else { - ANDROID_HOME = android-home; - NDK_HOME = ndk-home; -})) +} else {}))