From 7805c44cafceb88751b38a6c0ab84e8ab4978b5e Mon Sep 17 00:00:00 2001 From: Raphael Date: Sun, 11 Oct 2009 22:32:49 -0700 Subject: [PATCH] New "SDK Launcher" for Windows. This simple .exe will sit at the root of the Windows SDK and currently simply executes tools\android.bat It uses the same icon as the emulator. Eventually it should simply replace the batch file. Change-Id: I5359971fd476d6809d4ccb6bc0a0bcd34e30a3e6 --- tools/sdklauncher/.gitignore | 1 + tools/sdklauncher/Android.mk | 43 +++++++++++ tools/sdklauncher/images/android_icon.ico | Bin 0 -> 300318 bytes tools/sdklauncher/images/android_icon.rc | 3 + tools/sdklauncher/sdklauncher.c | 88 ++++++++++++++++++++++ 5 files changed, 135 insertions(+) create mode 100644 tools/sdklauncher/.gitignore create mode 100644 tools/sdklauncher/Android.mk create mode 100644 tools/sdklauncher/images/android_icon.ico create mode 100644 tools/sdklauncher/images/android_icon.rc create mode 100644 tools/sdklauncher/sdklauncher.c diff --git a/tools/sdklauncher/.gitignore b/tools/sdklauncher/.gitignore new file mode 100644 index 000000000..0c25b2a5a --- /dev/null +++ b/tools/sdklauncher/.gitignore @@ -0,0 +1 @@ +images/android_icon.o diff --git a/tools/sdklauncher/Android.mk b/tools/sdklauncher/Android.mk new file mode 100644 index 000000000..3e92ea8f2 --- /dev/null +++ b/tools/sdklauncher/Android.mk @@ -0,0 +1,43 @@ +# Copyright 2009 The Android Open Source Project +# +# Android.mk for sdklauncher +# +# The "SDK Launcher" is for Windows only. +# This simple .exe will sit at the root of the Windows SDK +# and currently simply executes tools\android.bat. +# Eventually it should simply replace the batch file. + +ifeq ($(HOST_OS),windows) + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + sdklauncher.c + +LOCAL_CFLAGS += -Wall -Wno-unused-parameter +LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE -DSH_HISTORY +LOCAL_MODULE := sdklauncher + +# Link the Windows icon file as well into the executable, based on the technique +# used in external/qemu/Makefile.android. +# +INTERMEDIATE := $(call intermediates-dir-for,EXECUTABLES,$(LOCAL_MODULE),true) +ANDROID_ICON_OBJ := android_icon.o +ANDROID_ICON_PATH := $(LOCAL_PATH)/images +$(ANDROID_ICON_PATH)/$(ANDROID_ICON_OBJ): $(ANDROID_ICON_PATH)/android_icon.rc + windres $< -I $(ANDROID_ICON_PATH) -o $@ + +# seems to be the only way to add an object file that was not generated from +# a C/C++/Java source file to our build system. and very unfortunately, +# $(TOPDIR)/$(LOCALPATH) will always be prepended to this value, which forces +# us to put the object file in the source directory... +# +LOCAL_PREBUILT_OBJ_FILES += images/$(ANDROID_ICON_OBJ) + +include $(BUILD_HOST_EXECUTABLE) + +$(call dist-for-goals,droid,$(LOCAL_BUILT_MODULE)) + +endif diff --git a/tools/sdklauncher/images/android_icon.ico b/tools/sdklauncher/images/android_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bd25179011673a5044a38d02b581851bd9c13ddf GIT binary patch literal 300318 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 WS< +#include + +int sdk_launcher() { + STARTUPINFO startup; + PROCESS_INFORMATION pinfo; + char program_path[MAX_PATH]; + int ret; + + ZeroMemory(&startup, sizeof(startup)); + startup.cb = sizeof(startup); + + ZeroMemory(&pinfo, sizeof(pinfo)); + + /* get path of current program */ + GetModuleFileName(NULL, program_path, sizeof(program_path)); + + ret = CreateProcess( + NULL, /* program path */ + "tools\\android.bat update sdk", /* command-line */ + NULL, /* process handle is not inheritable */ + NULL, /* thread handle is not inheritable */ + TRUE, /* yes, inherit some handles */ + CREATE_NO_WINDOW, /* we don't want a console */ + NULL, /* use parent's environment block */ + NULL, /* use parent's starting directory */ + &startup, /* startup info, i.e. std handles */ + &pinfo); + + if (!ret) { + DWORD err = GetLastError(); + fprintf(stderr, "CreateProcess failure, error %ld\n", err); + + LPSTR s; + if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | /* dwFlags */ + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, /* lpSource */ + err, /* dwMessageId */ + 0, /* dwLanguageId */ + (LPSTR)&s, /* lpBuffer */ + 0, /* nSize */ + NULL) != 0) { /* va_list args */ + fprintf(stderr, "%s", s); + LocalFree(s); + } + + return -1; + } + + return 0; +} + +int main(int argc, char **argv) { + return sdk_launcher(); +} + +#endif /* _WIN32 */