11 androidPlatformVersion = "34";
12 androidBuildToolsVersion = "34.0.0";
13 androidCmakeVersion = "3.22.1";
15 #cmakeVersions = [ androidCmakeVersion ];
16 platformVersions = [ androidPlatformVersion ];
22 #platformToolsVersion = "35.0.2";
23 #ndkVersions = [ "23.1.7779620" ];
24 buildToolsVersions = [ androidBuildToolsVersion ];
26 includeEmulator = false;
28 # avdmanager create avd --force -n device -k 'system-images;android-36;google_apis_playstore;x86_64'
29 #emulatorVersion = "35.6.2";
30 includeSystemImages = true;
33 "google_apis_playstore"
39 #"android-sdk-preview-license"
40 #"android-googletv-license"
41 #"android-sdk-arm-dbt-license"
42 #"intel-android-extra-license"
43 #"intel-android-sysimage-license"
44 #"mips-android-sysimage-license"
47 androidEmulateAppArgs = rec {
48 name = "android-emulate-app";
49 androidUserHome = null;
50 #androidUserHome = "/var/lib/android";
51 deviceName = "device-${androidPlatformVersion}";
53 sdkExtraArgs = androidSdkArgs // {
54 includeEmulator = true;
55 #emulatorVersion = "35.6.2";
57 platformVersion = androidPlatformVersion;
58 systemImageType = "google_apis_playstore";
60 # PortabilityNote: workaround `-gpu host` not working
61 # on my Vulkan system.
62 androidEmulatorFlags = "-gpu guest";
65 "hw.keyboard" = "yes";
66 #"sdcard.path" = "${androidUserHome}/avd/${deviceName}.sdcard.img";
67 # FixMe: Not working for me:
68 # WARNING | emuglConfig_get_vulkan_hardware_gpu: Failed to create vulkan instance error code: -9
69 # See https://issuetracker.google.com/issues/356896486
70 #"hw.gpu.enabled" = "yes";
73 ANDROID_SDK_ROOT = "${androidComposition.androidsdk}/libexec/android-sdk";
74 ANDROID_NDK_ROOT = "${androidComposition.androidsdk}/libexec/android-sdk/ndk-bundle";
75 androidComposition = pkgs.androidenv.composeAndroidPackages config.androidSdkArgs;
83 (pkgs.android-studio.withSdk config.androidComposition.androidsdk)
84 config.androidComposition.androidsdk
85 config.androidComposition.platform-tools
86 config.androidComposition.emulator # For mksdcard
92 # ExplanationNote: ANDROID_HOME is deprecated. Use ANDROID_SDK_ROOT.
93 export ANDROID_SDK_ROOT="${config.ANDROID_SDK_ROOT}"
94 export ANDROID_NDK_ROOT="${config.ANDROID_NDK_ROOT}"
96 lib.concatStringsSep ":" [
97 "$ANDROID_SDK_ROOT/cmake/${config.androidCmakeVersion}/bin"
98 "$ANDROID_SDK_ROOT/build-tools/${config.androidBuildToolsVersion}"
103 # Use the same androidBuildToolsVersion
104 # and a statically linked aapt2 to workaround a dynamic linking failure.
105 export GRADLE_OPTS="-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_SDK_ROOT/build-tools/${config.androidBuildToolsVersion}/aapt2";
110 default = pkgs.stdenv.mkDerivation (finalAttrs: {
111 pname = "${mainLynxBundle.pname}-apk";
112 version = mainLynxBundle.version;
118 (fileFilter (file: lib.any file.hasExt [ "java" "kt" "xml" "toml" ]) ./app)
123 app/proguard-rules.pro
125 gradle/libs.versions.toml
133 nativeBuildInputs = [
138 mitmCache = gradle.fetchDeps {
139 pkg = finalAttrs.finalPackage;
140 # MaintenanceNote: nix -L run .#default.update-deps
145 update-deps = pkgs.writeShellApplication {
146 name = "update-deps.sh";
148 exec ${finalAttrs.finalPackage.mitmCache.updateScript}
153 # this is required for using mitm-cache on Darwin
154 __darwinAllowLocalNetworking = true;
157 "-Dfile.encoding=utf-8"
158 # Use the same androidBuildToolsVersion
159 # and a statically linked aapt2 to workaround a dynamic linking failure.
160 "-Dorg.gradle.project.android.aapt2FromMavenOverride=${config.ANDROID_SDK_ROOT}/build-tools/${config.androidBuildToolsVersion}/aapt2"
163 #gradleBuildTask = "shadowJar";
164 gradleBuildTask = "assemble";
166 # MaintenanceToDo: remove this `gradleUpdateScript`
167 # if https://github.com/NixOS/nixpkgs/pull/383115
169 gradleUpdateScript = ''
171 gradle help --write-verification-metadata sha256
174 # will run the gradleCheckTask (defaults to "test")
179 ${mainLynxBundle}/main.lynx.bundle \
180 app/src/main/assets/main.lynx.bundle
185 if finalAttrs.gradleBuildTask == "bundleRelease" then
186 "cp -RL app/build/outputs/bundle/release/*.aab $out"
188 "cp -RL app/build/outputs/apk/*/*.apk $out"
192 meta.sourceProvenance = with lib.sourceTypes; [
194 binaryBytecode # mitm cache
197 android-emulator-x86_64 = pkgs.androidenv.emulateApp (
198 config.androidEmulateAppArgs
200 abiVersion = "x86_64";
201 app = "${default}/app-debug.apk";
202 #app = "${default}/app-release-unsigned.apk";
203 package = "com.lynx.javaemptyproject";
204 activity = ".MainActivity";