# Unix (Linux/Mac)

Install [rustup](rustup.rs) and `cargo install cargo-limit`, then run:

```
make
```

# Windows

Install [rustup](rustup.rs) and follow the instructions.

If you get the error "VCRUNTIME140.dll was not found", then
install [Microsoft Visual C++ Redistributable][msvc++].

[msvc++]: https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022

# Android

Make sure you have podman installed. Then run:

```
# You only need to build the container once
podman build -t apk .

make android
```

To debug any issues, you can enter an interactive terminal using `make podman-cli`.

To delete everything, run `podman system reset`.

Users who prefer to build locally can follow the commands in the `Dockerfile`.
Note that the `build.rs` hardcodes the SDK/NDK paths so either you follow it
exactly (recommended) or modify `build.rs`.

## GrapheneOS

```
$ adb shell pm list users
    UserInfo{10:Work:30}
$ adb install --user 10 darkfi-app.apk
```

# ADB Over Wifi

Useful for reading the logs without having to be plugged in.
First get your local IP addr using `adb shell ip -f inet a show wlan0`.
Make sure "Wireless debugging" is enabled in Developer options.
Then run:

```
adb tcpip 5555
adb connect IPADDR
```

Copying the APK takes a long time over wifi so best to install
APK via USB, then use this just for debugging the app.

In the Makefile, make sure to put the USB device for `ADB_DEVICES`
so the ADB commands work over USB.

# Useful Dev Commands

This is just for devs. Users ignore this.

## Debugging Missing Symbols

```
"hb_ft_font_create_referenced"

nm libharfbuzz_rs-5d6b743170eb0207.rlib | grep hb_ | less
```

## Resolve Dependency Issues

```
cargo tree --target aarch64-linux-android --invert openssl-sys
```

## Examine the APK

```
apktool d target/android-artifacts/release/apk/darkwallet.apk -o dw-apk
```
