Flutter: Difference between revisions

F44 (talk | contribs)
Add node regarding Linux Desktop compilation requirements.
m Replaced `ANDROID_SDK_ROOT` with its non-deprecated counterpart
 
(10 intermediate revisions by 4 users not shown)
Line 46: Line 46:
       devShell =
       devShell =
         with pkgs; mkShell rec {
         with pkgs; mkShell rec {
           ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
           ANDROID_HOME = "${androidSdk}/libexec/android-sdk";
           buildInputs = [
           buildInputs = [
             flutter
             flutter
Line 81: Line 81:
       devShell =
       devShell =
         with pkgs; mkShell rec {
         with pkgs; mkShell rec {
           ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
           ANDROID_SDK = "${androidSdk}/libexec/android-sdk";
           buildInputs = [
           buildInputs = [
             flutter
             flutter
             androidsdk
             androidSdk
             jdk17
             jdk17
           ];
           ];
Line 108: Line 108:


Use [https://github.com/NixOS/nixpkgs/blob/cfe96dbfce8bd62dcd4a8ad62cb79dec140b1a62/pkgs/development/compilers/flutter/flutter.nix#L168 buildFlutterApplication from nixpkgs].
Use [https://github.com/NixOS/nixpkgs/blob/cfe96dbfce8bd62dcd4a8ad62cb79dec140b1a62/pkgs/development/compilers/flutter/flutter.nix#L168 buildFlutterApplication from nixpkgs].
== Troubleshooting ==
* The default Gradle template for android captures the Android and Flutter SDK paths in <code>android/local.properties</code> preventing future updates to the SDK from participating in the build. Example:<syntaxhighlight lang="shell-session">$ cat android/local.properties
sdk.dir=/nix/store/m5ygjwkz8brwkw9anx9kbwssymwvlaxl-androidsdk/libexec/android-sdk
flutter.sdk=/nix/store/rga4z7r7x705lns431b89gwxx47zs1zp-flutter-wrapped-3.29.3-sdk-links
flutter.buildMode=debug
flutter.versionName=6.3.2</syntaxhighlight>This manifests itself as Gradle failing to install SDK components registered in the shell. To fix, simply delete the properties file and run the build again. NOTE: this assumes that the shell correctly reflects the requirements of the build. If it doesn't correct that first, otherwise deleting <code>android/local.properties</code> achieves nothing.<syntaxhighlight lang="shell-session">FAILURE: Build failed with an exception.
* Where:
Build file /xxx/android/build.gradle.kts' line: 16
* What went wrong:
A problem occurred configuring project ':app'.
> com.android.builder.sdk.InstallFailedException: Failed to install the following SDK components:
      ndk;26.3.11579264 NDK (Side by side) 26.3.11579264
  The SDK directory is not writable (/nix/store/1xw5npxd7isrl50pl7y82anhdapnfs6p-androidsdk/libexec/android-sdk)</syntaxhighlight>
* There might be cases where setting the <code>ANDROID_HOME</code> environment variable will have no effect on Flutter's ability to assess the validity of Android SDK's installation. This behavior may be caused by an existing configuration file (<code>$XDG_CONFIG_HOME/settings</code> or <code>$XDG_CONFIG_HOME/flutter/settings</code>) containing an incorrectly set <code>"android-sdk"</code> key-value pair. Once removed, the environment variable should no longer be overridden, and should function correctly.


== See also ==
== See also ==