Flutter: Difference between revisions

From NixOS Wiki
imported>Jmarmstrong1207
m Add reference to android wiki page
imported>Jmarmstrong1207
Add more to the flake.nix to show you can use preconfigured androidSDKs. Add alternatives to making a dev shell.
Line 5: Line 5:
== Development ==
== Development ==


Create following <code>flake.nix</code> in a new project directory
The easiest way is to install Android Studio by adding <code>pkgs.androidstudio</code> to your list of packages in configuration.nix.
 
If you prefer [[Vscode|VSCode]], you can create a [[Development environment with nix-shell|dev-shell]] with the packages "jdk", "flutter", "sdkmanager", and a preferred android sdk such as the preconfigured one "androidenv.androidPkgs_9_0.androidsdk" (mentioned in the Android wiki page). Add other packages if missing any.
 
 
Below is an example [[Flakes|flake.nix]] for creating a dev shell. Create following <code>flake.nix</code> in a new project directory


{{file|flake.nix|nix|<nowiki>
{{file|flake.nix|nix|<nowiki>
Line 38: Line 43:
           buildInputs = [
           buildInputs = [
             flutter
             flutter
             androidSdk
            sdkmanager
             androidSdk # The customized SDK that we've made above
            jdk17
          ];
        };
    });
}
</nowiki>}}
 
If you don't want to customize the android sdk, you can instead use the predefined packages, as mentioned [https://nixos.org/manual/nixpkgs/unstable/#using-predefined-android-package-compositions in this section on the manual], such as <code>androidenv.androidPkgs_9_0.androidsdk</code>:
 
{{file|flake.nix|nix|<nowiki>
{
description = "Flutter 3.13.x";
inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/23.11";
  flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
  flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import nixpkgs {
        inherit system;
        config = {
          android_sdk.accept_license = true;
          allowUnfree = true;
        };
      };
    in
    {
      devShell =
        with pkgs; mkShell rec {
          ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
          buildInputs = [
            flutter
            sdkmanager
            androidenv.androidPkgs_9_0.androidsdk
             jdk17
             jdk17
           ];
           ];
Line 45: Line 86:
}
}
</nowiki>}}
</nowiki>}}


Run following commands to start a new demo project and run the "hello world" application
Run following commands to start a new demo project and run the "hello world" application

Revision as of 01:01, 2 March 2024

Flutter is an open-source mobile application development framework created by Google. It allows developers to build high-performance, cross-platform apps for iOS and Android using a single codebase.

In order to understand the sections below more for Android development on NixOS, check out the Android wiki page.

Development

The easiest way is to install Android Studio by adding pkgs.androidstudio to your list of packages in configuration.nix.

If you prefer VSCode, you can create a dev-shell with the packages "jdk", "flutter", "sdkmanager", and a preferred android sdk such as the preconfigured one "androidenv.androidPkgs_9_0.androidsdk" (mentioned in the Android wiki page). Add other packages if missing any.


Below is an example flake.nix for creating a dev shell. Create following flake.nix in a new project directory

flake.nix
{
description = "Flutter 3.13.x";
inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/23.11";
  flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
  flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import nixpkgs {
        inherit system;
        config = {
          android_sdk.accept_license = true;
          allowUnfree = true;
        };
      };
      buildToolsVersion = "34.0.0";
      androidComposition = pkgs.androidenv.composeAndroidPackages {
        buildToolsVersions = [ buildToolsVersion "28.0.3" ];
        platformVersions = [ "34" "28" ];
        abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
      };
      androidSdk = androidComposition.androidsdk;
    in
    {
      devShell =
        with pkgs; mkShell rec {
          ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
          buildInputs = [
            flutter
            sdkmanager
            androidSdk # The customized SDK that we've made above
            jdk17
          ];
        };
    });
}

If you don't want to customize the android sdk, you can instead use the predefined packages, as mentioned in this section on the manual, such as androidenv.androidPkgs_9_0.androidsdk:

flake.nix
{
description = "Flutter 3.13.x";
inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/23.11";
  flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
  flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import nixpkgs {
        inherit system;
        config = {
          android_sdk.accept_license = true;
          allowUnfree = true;
        };
      };
    in
    {
      devShell =
        with pkgs; mkShell rec {
          ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
          buildInputs = [
            flutter
            sdkmanager
            androidenv.androidPkgs_9_0.androidsdk
            jdk17
          ];
        };
    });
}


Run following commands to start a new demo project and run the "hello world" application

# nix develop
# flutter create my_app
# cd my_app
# flutter run

Packaging

Use buildFlutterApplication from nixpkgs.

See also

  • The team working on flutter in nixpkgs maintains several pieces of infrastructure related to the cause. The documentation is lacking as of now, but there are plans to improve it.