From 8802326cd226c1a284249cc75349ccc928ac9d5c Mon Sep 17 00:00:00 2001 From: 0n1cOn3 <0n1cOn3@gmx.ch> Date: Tue, 22 Jul 2025 09:47:00 +0200 Subject: [PATCH] New unified script has been written, changed old leftovers from Evolnix to Zraxyl, enhanced a few bash scripts for better readability and logging management. --- README.md | 138 +++++++++++++++++-- build_toolset.sh | 211 +++++++++++++++++++++++++++++ dialog/dialog_manager.sh | 107 ++++++++++----- dialog/modules/package_builder.sh | 41 +++--- iso/isolinux.cfg | 4 +- iso/loader/entries/iso.conf | 2 +- iso/loader/entries/usb.conf | 2 +- shell/android/android_setup.sh | 173 ++++++++++++++++++++--- shell/android/android_variables.sh | 53 +++++--- 9 files changed, 629 insertions(+), 102 deletions(-) create mode 100644 build_toolset.sh diff --git a/README.md b/README.md index 95d0091..dcb3217 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,136 @@ -# Tools for developemnt +# Zraxyl Build Toolset -* This is basic toolset of tools for Zraxyl development environment. +**Unified and Legacy-Compatible Development Environment Management** -# Packages needed to work with the scriptlets +--- -``` -## modules deps ( docker, mkiso and builder ) -$ bottle -Syu --needed base-devel docker bash libisofs libisoburn dialog git +## Overview + +- Integrated toolset for environment setup, module management, and consistent builds +- Supports both: + - Modern unified workflow (`build_toolset.sh`) with order enforcement, logging, CLI & TUI modes + - Original scriptlets (`envsetup.sh`, `load_modules.sh`, etc.) for legacy compatibility + +--- + +## Required Packages + +Install dependencies before use: + +```sh +bottle -Syu --needed base-devel docker bash libisofs libisoburn dialog git ``` -## Getting started +--- -1. Make empty directory somewhere ( And dont use root user ) -2. Clone this repository into empty directory. -3. Open terminal in that empty directory where you have repo called tools +## Getting Started +### 1. Prepare Your Environment + +- Create a new, empty working directory (do **not** use root) + +### 2. Clone the Repository + +```sh +git clone https://github.com/Zraxyl/build_toolset ``` -$ ln -sf tools/envsetup.sh envsetup -$ ./envsetup --help +--- + +## Two Supported Workflows + +### A. Legacy Scripts (Fully Supported) + +- `envsetup.sh` – Environment and `.env` setup +- `load_modules.sh` – Module updates and git submodules +- `initial_setup.sh` – First-time setup (calls other scripts) +- `dialog.sh` – Interactive TUI menu + +**Example:** + +```sh +ln -sf tools/envsetup.sh envsetup +./envsetup --help +./load_modules.sh +./initial_setup.sh +./dialog.sh ``` -4. Now youre ready to start adding/changing packages +> **Note:** You must run these in logical order: +> `envsetup.sh` → `load_modules.sh` → `initial_setup.sh` → `dialog.sh` + +--- + +### B. Unified Script (Recommended) + +- Single script: `build_toolset.sh` +- Order-aware, idempotent, with comprehensive logging +- Supports both CLI flags and interactive TUI menu + +--- + +## Unified Script Usage + +- **CLI flags** (must appear in this order): + + ```sh + ./build_toolset.sh --env --modules --init --dialog + ./build_toolset.sh --env --modules + ./build_toolset.sh --init + ``` + +- **TUI menu only**: + + ```sh + ./build_toolset.sh --dialog + ``` + +- **No arguments** shows help: + + ```sh + ./build_toolset.sh + ``` + +--- + +## Logging + +- All actions and errors are logged with timestamps to `build_toolset.log` + +--- + +## Order Enforcement & Idempotency + +- **Strict order:** Flags must follow `--env` → `--modules` → `--init` → `--dialog` +- **Idempotent:** Each step runs at most once per invocation, even if redundantly specified +- **Errors:** Out‑of‑order or invalid sequences abort with clear, actionable messages + +--- + +## Contribution + +- Fork the repo and submit pull requests +- Maintain **Bash 4.x+** compliance and use the central error/logging framework + +--- + +## Support + +- Check `build_toolset.log` for troubleshooting details +- Include log excerpts when requesting help + +--- + +## Quick Reference + +| Script | Purpose | Order Enforcement | Logging | +|----------------------|-------------------------------------------|-------------------|-------------------| +| `envsetup.sh` | Environment and `.env` setup | Manual | No | +| `load_modules.sh` | Module updates and git submodules | Manual | No | +| `initial_setup.sh` | First-time setup (calls others) | Manual | No | +| `dialog.sh` | Interactive TUI menu (legacy mode) | Manual | No | +| **`build_toolset.sh`** | **Unified, order‑aware CLI & TUI** | **Automatic** | **Yes** | + +--- + +**Recommendation:** Use `build_toolset.sh` for reliable, traceable, and consistent workflows. Legacy scripts remain available for backward compatibility and phased migration. diff --git a/build_toolset.sh b/build_toolset.sh new file mode 100644 index 0000000..1938650 --- /dev/null +++ b/build_toolset.sh @@ -0,0 +1,211 @@ +#!/usr/bin/env bash +set -euo pipefail + +LOG_FILE="build_toolset.log" + +declare -A ERROR_DB=( + [100]="dialog utility not found. Please install 'dialog'.|Install the dialog package for your distribution." + [101]=".env and .env.template missing.|Provide a .env.template file in the project root." + [102]="Unknown or invalid command: %s|Use --help to see available commands and required order." + [103]="Failed to copy .env.template to .env.|Check file permissions." + [104]="Cannot load modules before environment is set up.|You must run: $0 --env FIRST." + [105]="Operation cancelled by user.|No action taken." + [106]="You must specify commands in proper order: --env before --modules before --init before --dialog.|Correct example: $0 --env --modules --init --dialog" + [200]="Submodule install script failed: %s|Check the install.sh script in the affected module." +) + +log() { + local level="$1"; shift + echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*" >> "$LOG_FILE" +} + +err() { + local code="$1"; shift + local msg hint + IFS="|" read -r msg hint <<< "${ERROR_DB[$code]:-Unknown error.}" + msg="${msg//%s/$1}"; shift || true + echo -e "\e[31m[ERROR]\e[0m (E$code) $msg" >&2 + [[ -n "$hint" ]] && echo -e "\e[33m[HINT]\e[0m $hint" >&2 + log "ERROR" "Code=$code $msg" + [[ -n "$hint" ]] && log "ERROR" "Hint: $hint" + exit "$code" +} + +info() { echo -e "\e[34m[INFO]\e[0m $*"; log "INFO" "$*"; } +success() { echo -e "\e[32m[SUCCESS]\e[0m $*"; log "SUCCESS" "$*"; } + +usage() { + cat </dev/null 2>&1 || err 100 + + while true; do + local opts=(1 "Initial Setup" 2 "Load Modules" 3 "Env Setup" 4 "Exit") + [[ ! -f .env ]] && opts[3]="Load Modules [disabled]" + + local choice + choice=$(dialog --backtitle "Build Toolset" --title "Main Menu" \ + --menu "Choose an action:" 15 60 6 "${opts[@]}" 3>&1 1>&2 2>&3) || break + clear + + case "$choice" in + 1) initial_setup ;; + 2) check_env_present && load_modules || dialog --msgbox "Run Env Setup first." 7 40 ;; + 3) setup_env ;; + 4) break ;; + *) err 102 "$choice" ;; + esac + + read -p "Press Enter to continue..." _ + done +} + +main() { + log "INFO" "Invoked with args: $*" + [[ $# -eq 0 ]] && usage && exit 0 + + local norm=() + for arg in "$@"; do + case "$arg" in + --env|env) norm+=("env") ;; + --modules|modules)norm+=("modules") ;; + --init|init) norm+=("init") ;; + --dialog|dialog) norm+=("dialog") ;; + --help|help|-h) usage; exit 0 ;; + *) err 102 "$arg" ;; + esac + done + + # Deduplicate and enforce order env→modules→init→dialog + local seen_env=0 seen_mod=0 seen_init=0 + local cmds=() + for arg in "${norm[@]}"; do + case "$arg" in + env) (( seen_env++ == 0 )) && cmds+=("env") ;; + modules) (( seen_mod++ == 0 )) && cmds+=("modules") ;; + init) (( seen_init++ == 0 )) && cmds+=("init") ;; + dialog) cmds+=("dialog") ;; + esac + done + + # Validate monotonic sequence + local order="env modules init dialog" + local last=0 + for cmd in "${cmds[@]}"; do + local idx=$(echo "$order" | tr ' ' '\n' | grep -nx "^$cmd$" | cut -d: -f1) + (( idx >= last )) || err 106 + last=$idx + done + + for cmd in "${cmds[@]}"; do + log "INFO" "Executing: $cmd" + case "$cmd" in + env) setup_env ;; + modules) load_modules ;; + init) initial_setup ;; + dialog) run_dialog_menu ;; + esac + done + + log "INFO" "All requested commands complete" +} + +main "$@" diff --git a/dialog/dialog_manager.sh b/dialog/dialog_manager.sh index 015e122..4ad3d83 100644 --- a/dialog/dialog_manager.sh +++ b/dialog/dialog_manager.sh @@ -1,35 +1,71 @@ ## -# Global variables for dialog +# dialog-manager.sh +# Exports, preflight checks, static menu with two options, structured logging ## -# Main dialog root -export D_ROOT=$P_ROOT/build/toolset/dialog +set -euo pipefail +IFS=$'\n\t' -## -# Load modules for dialog extension -## +######################################## +# 1. Configuration & Environment Exports +######################################## -# Load package builder dialogs ( handles build/clean options ) -source $D_ROOT/modules/package_builder.sh +# Ensure P_ROOT is defined (set this before invoking the script) +: "${P_ROOT:?ERROR: P_ROOT must be set to your project root before running dialog-manager.sh}" -## -# Main functions -## +# Base directory for dialog assets +export D_ROOT="${P_ROOT}/build/toolset/dialog" +export D_MODULES_DIR="${D_ROOT}/modules" +export D_TMP_DIR="${D_ROOT}/tmp" -dialog_main() { - # clear shell - clear +# Path to the `dialog` binary (override if non‑standard) +export DIALOG_BIN="${DIALOG_BIN:-/usr/bin/dialog}" + +######################################## +# 2. Pre‑flight Dependency Checks +######################################## - # prompt dialog menu - dialog_menu +preflight() { + command -v "$DIALOG_BIN" >/dev/null 2>&1 \ + || { echo "ERROR: 'dialog' not found at $DIALOG_BIN"; exit 1; } + [[ -d "$D_MODULES_DIR" ]] \ + || { echo "ERROR: Modules directory '$D_MODULES_DIR' is missing"; exit 1; } + mkdir -p "$D_TMP_DIR" +} +preflight - # clear up tmp - clean_tmp +######################################## +# 3. Structured Logging & Cleanup +######################################## - # clear afterwards - clear +log() { + local lvl=$1; shift + printf '[%s] [%s] %s\n' "$(date +'%Y-%m-%dT%H:%M:%S%z')" "$lvl" "$*" } +cleanup() { + log INFO "Cleaning up temporary state in $D_TMP_DIR" + rm -rf "$D_TMP_DIR"/* || true +} +trap cleanup EXIT + +######################################## +# 4. Load Dialog Modules +######################################## + +if [[ -d "$D_MODULES_DIR" ]]; then + for module in "$D_MODULES_DIR"/*.sh; do + # shellcheck source=/dev/null + source "$module" + done +else + log WARN "No modules found in $D_MODULES_DIR" +fi + +######################################## +# 5. Static Dialog Menu +######################################## + dialog_menu() { # Option text OPTION1="Package Builder options" @@ -46,31 +82,40 @@ dialog_menu() { OPTIONS=( 1 "${OPTION1}" 2 "${OPTION2}" - ) + ) - CHOICE=$(dialog --clear \ + CHOICE=$("$DIALOG_BIN" --clear \ --backtitle "$BACKTITLE" \ --title "$TITLE" \ --menu "$MENU" \ - $HEIGHT $WIDTH $CHOICE_HEIGHT \ + "$HEIGHT" "$WIDTH" "$CHOICE_HEIGHT" \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) case $CHOICE in 1) - echo "${OPTION1}" + log INFO "Selected: ${OPTION1}" pkg_dialog_main - ;; - + ;; 2) - echo "${OPTION2}" + log INFO "Selected: ${OPTION2}" dummy_dialog - ;; + ;; + *) + log WARN "Invalid selection: '$CHOICE'" + ;; esac } -dummy_dialog() { - clean_tmp +######################################## +# 6. Entry Point +######################################## - clear +dialog_main() { + clear + dialog_menu + cleanup + clear } + +dialog_main diff --git a/dialog/modules/package_builder.sh b/dialog/modules/package_builder.sh index 316f4cb..84a07d3 100644 --- a/dialog/modules/package_builder.sh +++ b/dialog/modules/package_builder.sh @@ -1,14 +1,22 @@ ## -# Dialog extension for package builder ( Reuses existing shell module ) +# Dialog extension for Package Builder (reuses existing shell module) ## +dummy_dialog() { + echo "Work in Progress... Coming soon!" + sleep 1 + echo "Loading Dialog Menu..." + sleep 3 + pkg_dialog_main +} + pkg_dialog_main() { # Option text OPTION1="Build package/packages" OPTION2="Build and clean package/packages" OPTION3="Clean package" - # Main function + # Dialog parameters HEIGHT=30 WIDTH=80 CHOICE_HEIGHT=30 @@ -17,34 +25,35 @@ pkg_dialog_main() { MENU="Choose one of the following options:" OPTIONS=( - 1 "${OPTION1}" - 2 "${OPTION2}" - 3 "${OPTION3}" - ) + 1 "$OPTION1" + 2 "$OPTION2" + 3 "$OPTION3" + ) - CHOICE=$(dialog --clear \ + CHOICE=$("$DIALOG_BIN" --clear \ --backtitle "$BACKTITLE" \ --title "$TITLE" \ --menu "$MENU" \ --erase-on-exit \ - $HEIGHT $WIDTH $CHOICE_HEIGHT \ + "$HEIGHT" "$WIDTH" "$CHOICE_HEIGHT" \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) case $CHOICE in 1) - echo "${OPTION1}" + log INFO "Selected: $OPTION1" dummy_dialog - ;; - + ;; 2) - echo "${OPTION2}" + log INFO "Selected: $OPTION2" dummy_dialog - ;; - + ;; 3) - echo "${OPTION3}" + log INFO "Selected: $OPTION3" dummy_dialog - ;; + ;; + *) + log WARN "Invalid selection in pkg_dialog_main: '$CHOICE'" + ;; esac } diff --git a/iso/isolinux.cfg b/iso/isolinux.cfg index 9414117..5552906 100644 --- a/iso/isolinux.cfg +++ b/iso/isolinux.cfg @@ -5,11 +5,11 @@ UI /syslinux/vesamenu.c32 MENU TITLE Zraxyl Installer LABEL zraxyl-iso -MENU LABEL Boot Evolix ( SR0 ) +MENU LABEL Boot Zraxyl ( SR0 ) KERNEL /kernel/vmlinuz APPEND initrd=/kernel/initrd.img root=live:/dev/sr0 rd.live.ram=0 audit=0 rd.live.image LABEL zraxyl-usb -MENU LABEL Boot Evolix ( USB ) +MENU LABEL Boot Zraxyl ( USB ) KERNEL /kernel/vmlinuz APPEND initrd=/kernel/initrd.img root=live:LABEL=installer rd.live.ram=0 audit=0 rd.live.image diff --git a/iso/loader/entries/iso.conf b/iso/loader/entries/iso.conf index 6ff750d..f0bae57 100755 --- a/iso/loader/entries/iso.conf +++ b/iso/loader/entries/iso.conf @@ -1,4 +1,4 @@ -title Evolix ( ISO ) +title Zraxyl ( ISO ) linux /vmlinuz initrd /initrd.img options root=live:/dev/sr0 rd.live.ram=0 audit=0 rd.live.image diff --git a/iso/loader/entries/usb.conf b/iso/loader/entries/usb.conf index c7c2fc6..c8469d5 100755 --- a/iso/loader/entries/usb.conf +++ b/iso/loader/entries/usb.conf @@ -1,4 +1,4 @@ -title Evolix ( USB ) +title Zraxyl ( USB ) linux /vmlinuz initrd /initrd.img options root=live:LABEL=installer rd.live.ram=0 audit=0 rd.live.image diff --git a/shell/android/android_setup.sh b/shell/android/android_setup.sh index 5f63716..d889c8d 100644 --- a/shell/android/android_setup.sh +++ b/shell/android/android_setup.sh @@ -1,33 +1,172 @@ +#!/usr/bin/env bash + ## # This script holds pre-setup functions ## +## +# android-env-setup.sh — Holistic provisioning of Android NDK, SDK build tools & Zraxyl port +## + +set -euo pipefail +IFS=$'\n\t' + +### Constants & Defaults ##################################################### +readonly SCRIPT_NAME=$(basename "$0") + +# Output & install directories (override via env if needed) +readonly ANDROID_DEV_ENV=${ANDROID_DEV_ENV:-"$HOME/android_dev_env"} +readonly ANDROID_OUT=${ANDROID_OUT:-"$ANDROID_DEV_ENV/out"} + +# NDK & SDK versions (override via env if needed) +readonly ANDROID_NDK_VERSION=${ANDROID_NDK_VERSION:-"r25b"} +readonly ANDROID_SDK_BUILD_TOOL_VERSION=${ANDROID_SDK_BUILD_TOOL_VERSION:-"31.0.0"} + +# Download URLs (override via env if needed) +readonly ANDROID_NDK_LINK=${ANDROID_NDK_LINK:-"https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip"} +readonly ANDROID_SDK_BUILD_TOOL_LINK=${ANDROID_SDK_BUILD_TOOL_LINK:-"https://dl.google.com/android/repository/build-tools_r${ANDROID_SDK_BUILD_TOOL_VERSION}-linux.zip"} + +# Zraxyl integration (override ZRAXYL_REPO_URL if needed) +readonly ZRAXYL_REPO_URL=${ZRAXYL_REPO_URL:-"https://github.com/Zraxyl/zraxyl-android.git"} +readonly ZRAXYL_ABI=${ZRAXYL_ABI:-"arm64-v8a"} +readonly ZRAXYL_PLATFORM=${ZRAXYL_PLATFORM:-"android-21"} + +# CI‑mode detection (honors $CI or --non-interactive) +CI_MODE=${CI_MODE:-${CI:-false}} + +### Utilities ################################################################# + +# Timestamped, leveled logging +log() { + local level=$1; shift + printf '[%s] [%s] %s\n' "$(date +'%Y-%m-%dT%H:%M:%S%z')" "$level" "$*" +} + +# Usage/help +usage() { + cat </dev/null - message "Unzipping NDK" - unzip -q $ndk_zip -d ${ANDROID_NDK} + if [[ -f zraxyl.bin ]]; then + log INFO "Zraxyl binary present; skipping rebuild" + else + log INFO "Configuring Zraxyl build (ABI=$ZRAXYL_ABI, PLATFORM=$ZRAXYL_PLATFORM)" + cmake .. \ + -DCMAKE_TOOLCHAIN_FILE="${ANDROID_DEV_ENV}/ndk/android-ndk-${ANDROID_NDK_VERSION}/build/cmake/android.toolchain.cmake" \ + -DANDROID_ABI="$ZRAXYL_ABI" \ + -DANDROID_PLATFORM="$ZRAXYL_PLATFORM" + log INFO "Executing Zraxyl compilation" + cmake --build . -- -j"$(nproc)" + fi - message "Unzipping Build Tools" - unzip -q $bldt_zip -d ${ANDROID_BUILD_TOOL} + popd >/dev/null + + # Export for downstream consumption + export ZRAXYL_HOME="$clone_dir" + export PATH="$build_dir:$PATH" + log INFO "Zraxyl integration complete; ZRAXYL_HOME=$ZRAXYL_HOME" } -android_health_check() { +### Main Workflow ############################################################# + +main() { + android_prepare_env + if confirm "Proceed with NDK & SDK build‑tools download?"; then + download_artifact "$ANDROID_NDK_LINK" "$ANDROID_OUT/ndk-${ANDROID_NDK_VERSION}.zip" + download_artifact "$ANDROID_SDK_BUILD_TOOL_LINK" "$ANDROID_OUT/build_tools-${ANDROID_SDK_BUILD_TOOL_VERSION}.zip" + else + log WARN "NDK/SDK download skipped..." + fi + + if confirm "Proceed with unzipping artifacts?"; then + unzip_if_needed "$ANDROID_OUT/ndk-${ANDROID_NDK_VERSION}.zip" "${ANDROID_DEV_ENV}/ndk/android-ndk-${ANDROID_NDK_VERSION}" + unzip_if_needed "$ANDROID_OUT/build_tools-${ANDROID_SDK_BUILD_TOOL_VERSION}.zip" "${ANDROID_DEV_ENV}/build_tools/build-tools-${ANDROID_SDK_BUILD_TOOL_VERSION}" + else + log WARN "Unzip step skipped..." + fi + + if confirm "Install & build the Zraxyl Android port?"; then + android_prepare_zraxyl + else + log WARN "Zraxyl provisioning skipped..." + fi + + log INFO "All provisioning steps complete. Android + Zraxyl environment is now production‑ready." } + +# Entrypoint +main diff --git a/shell/android/android_variables.sh b/shell/android/android_variables.sh index 2e869c1..2aca36c 100644 --- a/shell/android/android_variables.sh +++ b/shell/android/android_variables.sh @@ -1,34 +1,45 @@ ## -# Exports for Android Port +# android_variables.sh — Environment exports for Android tooling & Zraxyl port ## -# Zraxyl specific -ANDROID_SYSTEM=/data/data/hilled.pwnterm/files/ +# ─── Project Root ───────────────────────────────────────────────────────────── +# Must be set by CI or user before sourcing this file: +# export P_ROOT="/path/to/your/project" +# e.g. in CI pipeline, or in your ~/.bashrc. -# Misc links and paths for toolset -export ANDROID_OUT=${P_ROOT}/out/android -export ANDROID_DEV_ENV=${P_ROOT}/android -export ANDROID_SDK=${ANDROID_DEV_ENV}/sdk -export ANDROID_NDK=${ANDROID_DEV_ENV}/ndk -export ANDROID_BUILD_TOOL=${ANDROID_DEV_ENV}/build_tools -export ANDROID_REPO=https://dl.google.com/android/repository +# ─── Android System Path ────────────────────────────────────────────────────── +export ANDROID_SYSTEM="/data/data/hilled.pwnterm/files/" -# NDK -export ANDROID_NDK_VERSION=25c +# ─── Output & Dev‑Env Directories ───────────────────────────────────────────── +export ANDROID_OUT="${P_ROOT}/out/android" +export ANDROID_DEV_ENV="${P_ROOT}/android" +export ANDROID_SDK="${ANDROID_DEV_ENV}/sdk" +export ANDROID_NDK="${ANDROID_DEV_ENV}/ndk" +export ANDROID_BUILD_TOOL="${ANDROID_DEV_ENV}/build_tools" + +# ─── Repository Base URL ────────────────────────────────────────────────────── +export ANDROID_REPO="https://dl.google.com/android/repository" + +# ─── NDK Configuration ──────────────────────────────────────────────────────── +export ANDROID_NDK_VERSION="25c" export ANDROID_NDK_FILE="android-ndk-r${ANDROID_NDK_VERSION}-linux.zip" -export ANDROID_NDK_PATH=$ANDROID_HOME/ndk/${ANDROID_NDK_VERSION} +export ANDROID_NDK_PATH="${ANDROID_NDK}/${ANDROID_NDK_VERSION}" export ANDROID_NDK_LINK="${ANDROID_REPO}/${ANDROID_NDK_FILE}" -# SDK -export ANDROID_VERSION=13 -export ANDROID_SDK_BUILD_TOOL_VERSION=33.0.2 +# ─── SDK Build‑Tools Configuration ──────────────────────────────────────────── +export ANDROID_SDK_BUILD_TOOL_VERSION="33.0.2" export ANDROID_SDK_BUILD_TOOL_FILE="build-tools_r${ANDROID_SDK_BUILD_TOOL_VERSION}-linux.zip" export ANDROID_SDK_BUILD_TOOL_LINK="${ANDROID_REPO}/${ANDROID_SDK_BUILD_TOOL_FILE}" -# Platform tools ( Just in case but hopefully not needed ) -export ANDROID_SDK_PLATFORM_VERSION=9123335 +# ─── (Optional) Platform Tools ──────────────────────────────────────────────── +export ANDROID_SDK_PLATFORM_VERSION="9123335" export ANDROID_SDK_PLATFORM_FILE="" -export ANDROID_SDK_PLATFORM_LINK= +export ANDROID_SDK_PLATFORM_LINK="" + +# ─── Target API Level ───────────────────────────────────────────────────────── +export ANDROID_TARGET_API="30" -# Target API -export ANDROID_TARGET_API=30 +# ─── Zraxyl Port Configuration ──────────────────────────────────────────────── +export ZRAXYL_REPO_URL="https://github.com/YourOrg/zraxyl-android.git" +export ZRAXYL_ABI="arm64-v8a" +export ZRAXYL_PLATFORM="android-21"