diff --git a/Makefile b/Makefile index 64a039e..df007be 100644 --- a/Makefile +++ b/Makefile @@ -69,6 +69,36 @@ export GOBIN export PATH := $(PWD)/tool:$(GOBIN):$(JAVA_HOME)/bin:$(ANDROID_HOME)/cmdline-tools/latest/bin:$(ANDROID_HOME)/platform-tools:$(PATH) export GOROOT := # Unset +base_image := "system-images;android-33;google_apis;" +AVD := "tailscale-android" + +select-image: + @echo "Determining machine architecture..." + $(eval machine_arch := $(shell uname -m)) + @if [ "$(machine_arch)" = "x86_64" ]; then \ + echo "Using x86_64 system image"; \ + AVD_IMAGE="$(base_image)x86_64"; \ + elif [ "$(machine_arch)" = "aarch64" ]; then \ + echo "Checking for ARM64 v8a system image..."; \ + $(eval arm64_v8a_exists := $(shell $(ANDROID_HOME)/cmdline-tools/latest/bin/sdkmanager --list | grep -q "arm64-v8a" && echo yes)) \ + if [ "$(arm64_v8a_exists)" = "yes" ]; then \ + echo "Selected ARM64 v8a System Image"; \ + AVD_IMAGE="$(base_image)arm64-v8a"; \ + else \ + echo "ARM64 v8a system image not available, defaulting to x86_64"; \ + AVD_IMAGE="$(base_image)x86_64"; \ + fi; \ + else \ + echo "Unsupported architecture: $(machine_arch)"; \ + exit 1; \ + fi; \ + echo "Fallback to system architecture: $$AVD_IMAGE"; \ + export AVD_IMAGE=$$AVD_IMAGE; + +all: select-image + @echo "Using AVD Image: $(AVD_IMAGE)" + @echo "AVD set to: $(AVD)" + all: tailscale-debug.apk test $(DEBUG_APK) ## Build and test everything env: @@ -166,12 +196,33 @@ ANDROID_TEST_INTERMEDIARY=./android/build/outputs/apk/androidTest/applicationTes $(ANDROID_TEST_INTERMEDIARY): $(ANDROID_SOURCES) $(LIBTAILSCALE) cd android && ./gradlew assembleApplicationTestAndroidTest -tailscale-test.apk: $(ANDROID_TEST_INTERMEDIARY) +tailscale-test.apk: $(ANDROID_TEST_INTERMEDIARY) ## Build the test APK mv $(ANDROID_TEST_INTERMEDIARY) $@ test: $(LIBTAILSCALE) ## Run the Android tests (cd android && ./gradlew test) +emulator: select-image + @echo "Checking installed SDK packages..." + @if ! $(ANDROID_HOME)/cmdline-tools/latest/bin/sdkmanager --list_installed | grep -q "$(AVD_IMAGE)"; then \ + echo "$(AVD_IMAGE) not found, installing..."; \ + $(ANDROID_HOME)/cmdline-tools/latest/bin/sdkmanager "$(AVD_IMAGE)"; \ + fi + @echo "Checking if AVD exists..." + @if ! $(ANDROID_HOME)/cmdline-tools/latest/bin/avdmanager list avd | grep -q "$(AVD)"; then \ + echo "AVD $(AVD) not found, creating..."; \ + $(ANDROID_HOME)/cmdline-tools/latest/bin/avdmanager create avd -n "$(AVD)" -k "$(AVD_IMAGE)"; \ + fi + @echo "Starting emulator..." + @$(ANDROID_HOME)/emulator/emulator -avd "$(AVD)" -logcat-output /dev/stdout -netdelay none -netspeed full & + @echo "Waiting for emulator to fully boot..." + @$(ANDROID_HOME)/platform-tools/adb wait-for-device + @echo "Emulator booted, installing APK..." + @$(ANDROID_HOME)/platform-tools/adb install -r tailscale-debug.apk + @echo "APK installed, launching app..." + @$(ANDROID_HOME)/platform-tools/adb shell am start -n "com.tailscale.ipn/com.tailscale.ipn.MainActivity" + @echo "Tailscale launched." + install: tailscale-debug.apk ## Install the debug APK on a connected device adb install -r $<