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 | --- |
M | README.md | | | 39 | ++++++++++++++++++++++++++++++++------- |
M | shell.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 {}))