|
| 1 | +with (import ./default.nix); let |
| 2 | + pkgs = android-pkgs; |
| 3 | + repo = toString ./.; |
| 4 | + android-sdk = |
| 5 | + (pkgs.androidenv.composeAndroidPackages android-sdk-args).androidsdk; |
| 6 | + app-keygen-android = pkgs.writeShellApplication { |
| 7 | + name = "app-keygen-android"; |
| 8 | + text = '' |
| 9 | + if [ ! -f ~/keys/app-key.jks ]; then |
| 10 | + mkdir -p ~/keys |
| 11 | + ${pkgs.zulu}/bin/keytool -genkey -v \ |
| 12 | + -keystore ~/keys/app-key.jks \ |
| 13 | + -keyalg RSA \ |
| 14 | + -keysize 2048 \ |
| 15 | + -validity 10000 \ |
| 16 | + -alias app-key |
| 17 | + fi |
| 18 | + ''; |
| 19 | + }; |
| 20 | + app-sign-apk = pkgs.writeShellApplication { |
| 21 | + name = "app-sign-apk"; |
| 22 | + text = '' |
| 23 | + ${pkgs.apksigner}/bin/apksigner sign \ |
| 24 | + --ks ~/keys/app-key.jks \ |
| 25 | + --out ${repo}/android/app.apk \ |
| 26 | + ${repo}/android/app/build/outputs/apk/release/app-release-unsigned.apk |
| 27 | + ''; |
| 28 | + }; |
| 29 | + app-sign-aab = pkgs.writeShellApplication { |
| 30 | + name = "app-sign-aab"; |
| 31 | + text = '' |
| 32 | + ${pkgs.zulu}/bin/jarsigner \ |
| 33 | + -verbose \ |
| 34 | + -keystore ~/keys/app-key.jks \ |
| 35 | + -signedjar ${repo}/android/app.aab \ |
| 36 | + ${repo}/android/app/build/outputs/bundle/release/app-release.aab \ |
| 37 | + app-key |
| 38 | + ''; |
| 39 | + }; |
| 40 | + app-prepare-android = pkgs.writeShellApplication rec { |
| 41 | + name = "app-prepare-android"; |
| 42 | + text = '' |
| 43 | + ( |
| 44 | + cd ${repo} |
| 45 | + ${pkgs.nodejs}/bin/npm i --prefer-offline |
| 46 | + ${pkgs.nodejs}/bin/npx cap add android || true |
| 47 | + ${pkgs.nodejs}/bin/npx cap sync |
| 48 | + cp ./lib/Clipboard.java ./node_modules/@capacitor/clipboard/android/src/main/java/com/capacitorjs/plugins/clipboard/Clipboard.java |
| 49 | + cp ${repo}/static/android-chrome-512x512.png ${repo}/static/logo.png |
| 50 | + ${pkgs.nodejs}/bin/npx @capacitor/assets generate \ |
| 51 | + --android --assetPath static |
| 52 | + ${pkgs.nodejs}/bin/npx trapeze run trapeze.yaml -y \ |
| 53 | + --android-project android |
| 54 | + ) |
| 55 | + ''; |
| 56 | + }; |
| 57 | + app-release-apk = pkgs.writeShellApplication rec { |
| 58 | + name = "app-release-apk"; |
| 59 | + text = '' |
| 60 | + ( |
| 61 | + cd ${repo} |
| 62 | + ${app-prepare-android}/bin/app-prepare-android |
| 63 | + cd ./android |
| 64 | + ./gradlew assembleRelease |
| 65 | + ${app-keygen-android}/bin/app-keygen-android |
| 66 | + rm ${repo}/android/app.apk || true |
| 67 | + rm ${repo}/android/${label}-v${vsn}.apk || true |
| 68 | + ${app-sign-apk}/bin/app-sign-apk |
| 69 | + cp ${repo}/android/app.apk ${repo}/android/${label}-v${vsn}.apk |
| 70 | + ls -la ${repo}/android/app.apk |
| 71 | + ls -la ${repo}/android/${label}-v${vsn}.apk |
| 72 | + ) |
| 73 | + ''; |
| 74 | + }; |
| 75 | + app-release-aab = pkgs.writeShellApplication rec { |
| 76 | + name = "app-release-aab"; |
| 77 | + text = '' |
| 78 | + ( |
| 79 | + cd ${repo} |
| 80 | + ${app-prepare-android}/bin/app-prepare-android |
| 81 | + cd ./android |
| 82 | + ./gradlew bundleRelease |
| 83 | + ${app-keygen-android}/bin/app-keygen-android |
| 84 | + rm ${repo}/android/app.aab || true |
| 85 | + ${app-sign-aab}/bin/app-sign-aab |
| 86 | + ls -la ${repo}/android/app.aab |
| 87 | + ) |
| 88 | + ''; |
| 89 | + }; |
| 90 | +in |
| 91 | + pkgs.mkShell rec { |
| 92 | + buildInputs = with pkgs; [ |
| 93 | + alejandra |
| 94 | + android-sdk |
| 95 | + glibc |
| 96 | + jdk |
| 97 | + zulu |
| 98 | + kotlin |
| 99 | + nodejs |
| 100 | + app-release-apk |
| 101 | + app-release-aab |
| 102 | + ]; |
| 103 | + GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${android-sdk}/libexec/android-sdk/build-tools/34.0.0/aapt2"; |
| 104 | + ANDROID_SDK_ROOT = "${android-sdk}/libexec/android-sdk"; |
| 105 | + ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle"; |
| 106 | + } |
0 commit comments