Skip to main content

Starting to Contribute

Setting up the Development Environment

Requirements

You'll need a recent:

  • Rustup setup for Rust
  • Android NDK / XCode setup for the target - and device or simulator set up
  • flutter
  • on Linux you additionally need: libsecret-1-0 ( & libsecret-1-dev), mpv (& libmpv-dev) and libjsoncpp-devon Ubuntu with apton Arch with pamac

Setup

You need cargo make for managing and building the native core artifacts. Install via cargo install cargo-make

Then you run the init once in the root of the repository:

cargo make setup

You also need to build the core SDK once first:

Building for SDK

Whenever the native SDK changed, you need to (re)build the artifacts. To do that you can use the one of following commands

cargo make android

cargo make ios

cargo make desktop

.Note: currently only android is fully supported. Plumbing for iOS is existing but not tested, Web, Linux, Mac, Windows and are platforms have not been configured yet.

Running the App

Once the SDK is rebuilt, you can run the flutter as usual on your device or emulator per:

F5 in VS Code or flutter run in app directory

If you want to run flutter as desktop in windows:

flutter run -d windows

Speed up Building

It takes a long time to execute full build. You can rebuild only changes of source files to save your building time meaningfully.

cargo make android-dev It can reduce the size in architecture. This will build only x86_64 of rust library. (build only rust) 682.6s -> 120.31s

cargo make --profile release android-dev It can reduce the size by release mode. It can reduce the size to about a half, because size in release mode is smaller than one in debug mode.

flutter run --no-build (only flutter changed) 85.0s -> 42.6s


Troubleshooting

NDK compile error

The setup required NDK of 25 and cargo-ndk > 3.0. It has been tested and its nightly is built against 25.2.9519653 with cargo-ndk 3.2.0.

Android Build in Windows

  1. 35GB of HDD needed for project building. It doesn't cover android emulator vm.
  2. Run cargo install cargo-make so that cargo make can be executed.
  3. Run cargo make android in root directory.
  4. Open sdk manager in android studio and install Google Play x86_64 API 30 image and Android SDK Platform 30.
  • API 31+ image is not launching in windows for now.
  • This apk is not working on x86 image of API 30.
  • API 32 doesn't contain x86 image now.
  1. Open virtual device manager in android studio and create vm using Google Play x86_64 API 30 image.
  • 4GB of internal storage is recommended, because apk size of this project is 500+MB.
  1. Launch android emulator.
  2. Change to app directory and run flutter run.

Flutter package file_picker error in android 6.0

FilePickerDelegate occurs error in getSlotFromBufferLocked() under android 6.0. This issue was fixed android 7.0. Please read this comment. Now minimum version of android is 7.0.

iOS Build

The iOS build doesn't work right now, see #10. Please install the Android SDK and use the aformentioned emulator for development and testing.

The following is iOS build steps. Unlike android, ios needs small space of 2~3 GB.

  1. Install flutter v2.10.5. v3+ seems to have some problem in macos.
  2. Install the latest version of rust.
  3. Install cargo-make.
  4. Run cargo make ios in root directory of this project.
  5. Run flutter pub get in app directory of this project.
  6. Uncomment # platform :ios, '9.0' in Podfile of app/ios directory.
  7. Run flutter run.

CocoaPods issue in iOS build

You may get the error message Invalid argument @ io_fread during compilation of rust library. cocoapods is using ruby-macho and ruby-macho occurs the crash about big input file. iOS simulator uses x86_64-apple-ios architecture. The size of our library libacter.a is as following: Debug build: 717MB Release build: 223MB When using release build of libacter.a, the error Invalid argument @ io_fread disappeared. The compile command of release build is the following: cargo make --profile release ios