80 lines
3.6 KiB
Bash
Executable File
80 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Android Development Environment Setup for Jan
|
|
|
|
# Ensure rustup's Rust toolchain is used instead of Homebrew's
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
|
|
# Set JAVA_HOME for Android builds
|
|
export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
|
|
export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"
|
|
|
|
export ANDROID_HOME="$HOME/Library/Android/sdk"
|
|
export ANDROID_NDK_ROOT="$HOME/Library/Android/sdk/ndk/29.0.14033849"
|
|
export NDK_HOME="$HOME/Library/Android/sdk/ndk/29.0.14033849"
|
|
|
|
# Add Android tools to PATH
|
|
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin
|
|
|
|
# Set up CC and CXX for Android compilation
|
|
export CC_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
|
|
export CXX_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang++"
|
|
export AR_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
|
|
export RANLIB_aarch64_linux_android="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ranlib"
|
|
|
|
# Additional environment variables for Rust cross-compilation
|
|
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
|
|
|
|
# Only set global CC and AR for Android builds (when IS_ANDROID is set)
|
|
if [ "$IS_ANDROID" = "true" ]; then
|
|
export CC="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
|
|
export AR="$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
|
|
echo "Global CC and AR set for Android build"
|
|
fi
|
|
|
|
# Create symlinks for Android tools if they don't exist
|
|
mkdir -p ~/.local/bin
|
|
if [ ! -f ~/.local/bin/aarch64-linux-android-ranlib ]; then
|
|
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ranlib ~/.local/bin/aarch64-linux-android-ranlib
|
|
fi
|
|
if [ ! -f ~/.local/bin/aarch64-linux-android-clang ]; then
|
|
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang ~/.local/bin/aarch64-linux-android-clang
|
|
fi
|
|
if [ ! -f ~/.local/bin/aarch64-linux-android-clang++ ]; then
|
|
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang++ ~/.local/bin/aarch64-linux-android-clang++
|
|
fi
|
|
|
|
# Fix the broken clang symlinks by ensuring base clang is available
|
|
if [ ! -f ~/.local/bin/clang ]; then
|
|
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang ~/.local/bin/clang
|
|
fi
|
|
if [ ! -f ~/.local/bin/clang++ ]; then
|
|
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ ~/.local/bin/clang++
|
|
fi
|
|
|
|
# Create symlinks for target-specific ar tools
|
|
if [ ! -f ~/.local/bin/aarch64-linux-android-ar ]; then
|
|
ln -sf $NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar ~/.local/bin/aarch64-linux-android-ar
|
|
fi
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
|
|
echo "Android environment configured:"
|
|
echo "ANDROID_HOME: $ANDROID_HOME"
|
|
echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT"
|
|
echo "PATH includes NDK toolchain: $(echo $PATH | grep -o "ndk.*bin" || echo "NOT FOUND")"
|
|
|
|
# Verify required tools
|
|
echo -e "\nChecking required tools:"
|
|
which adb && echo "✅ adb found" || echo "❌ adb not found"
|
|
which emulator && echo "✅ emulator found" || echo "❌ emulator not found"
|
|
which $CC_aarch64_linux_android && echo "✅ Android clang found" || echo "❌ Android clang not found"
|
|
|
|
# Show available AVDs
|
|
echo -e "\nAvailable Android Virtual Devices:"
|
|
emulator -list-avds 2>/dev/null || echo "No AVDs found"
|
|
|
|
# Execute the provided command
|
|
if [ "$1" ]; then
|
|
echo -e "\nExecuting: $@"
|
|
exec "$@"
|
|
fi |