首页 > 解决方案 > 在 NixOS 下构建一个 gradle Android 应用

问题描述

我有现有的 Android 应用程序,我想在切换到NixOS后继续构建这些应用程序。

我遵循了几条基本上都是基于 Nixpkgs 手册中描述的说明:https ://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/android.section.md

我遇到的问题是:当我用这样的东西构建自己的环境时:

with import <nixpkgs> {};

let
  androidComposition = androidenv.composeAndroidPackages {
    toolsVersion = "25.2.5";
    platformToolsVersion = "27.0.1";
    buildToolsVersions = [ "27.0.3" ];
    includeEmulator = false;
    emulatorVersion = "27.2.0";
    platformVersions = [ "24" ];
    includeSources = false;
    includeDocs = false;
    includeSystemImages = false;
    systemImageTypes = [ "default" ];
    abiVersions = [ "armeabi-v7a" ];
    lldbVersions = [ "2.0.2558144" ];
    cmakeVersions = [ "3.6.4111459" ];
    includeNDK = false;
    ndkVersion = "16.1.4479499";
    useGoogleAPIs = false;
    useGoogleTVAddOns = false;
    includeExtras = [
      "extras;google;gcm"
    ];
  };
in
androidComposition.androidsdk

然后没有定义环境变量 ANDROID_HOME 并且调用gradlew我的项目将失败并抱怨。如果我尝试找到可以手动将 ANDROID_HOME 指向的地方,那么我会失败,因为 gradle build 会抱怨我不接受 SDK 的许可协议。(而且我也不能接受许可证,因为我必须在只读的 nix 商店中这样做。)

我还尝试使用 Nix 构建完整的应用程序,如下所示:

with import <nixpkgs> {};

androidenv.buildApp {
  name = "Tove";
  src = ./tove;
  release = true;

  keyStore = ./tove/release.keystore;
  keyAlias = "ReleaseKey";
  keyStorePassword = "XXXXXXXX";
  keyAliasPassword = "XXXXXXXX";

  platformVersions = [ "28" ];

  includeNDK = false;
}

但在我看来,这只支持基于 Ant 的构建。但是我无法将完整的构建环境更改为 Ant,因为我的同事会抱怨。在这种情况下我得到的错误是:

these derivations will be built:
  /nix/store/1pnd3zra0p6q2w4nij8mp49b1jr6g0p2-Tove.drv
building '/nix/store/1pnd3zra0p6q2w4nij8mp49b1jr6g0p2-Tove.drv'...
unpacking sources
unpacking source archive /nix/store/l1lphdp98cxfhq5dahr63ipjrz9qbn6l-tove
source root is tove
patching sources
configuring
no configure script, doing nothing
building
Buildfile: build.xml does not exist!
Build failed
builder for '/nix/store/1pnd3zra0p6q2w4nij8mp49b1jr6g0p2-Tove.drv' failed with exit code 1
error: build of '/nix/store/1pnd3zra0p6q2w4nij8mp49b1jr6g0p2-Tove.drv' failed

我如何获得一个可以在 NixOS 中使用 gradle 构建 Android 应用程序的环境?是否有任何帮助或教程可用?

标签: androidgradleandroid-gradle-pluginnixos

解决方案


推荐阅读