android - 在 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 应用程序的环境?是否有任何帮助或教程可用?
解决方案
推荐阅读
- angular - NG Prime p-multiSelect 禁用选项不起作用
- json - 通过连接两个变量的 Json 对象值
- android - 服务调用 checkSelfPermission 返回 nullPointerException
- jquery - 如何停止 Jquery-Steps?
- javascript - 在服务器端 javascript 上运行查询
- eclipse - Eclipse Project Explorer 显示对 SVN 外部的修改
- docker - 在 Alpine Linux 上运行“chpasswd”时出现“PAM:身份验证失败”
- ruby-on-rails - 如何在生产中将示例数据填充到我的 Rails 应用程序?
- reactjs - React-Redux - 动作返回未定义
- forms - 具有 bloc 模式的 TextFormField 是 Subbmiting null