From 6508be1224ddec08910c464d2a905c4c2e1f7d80 Mon Sep 17 00:00:00 2001 From: Raphael Date: Sun, 11 Oct 2009 22:32:49 -0700 Subject: 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 --- sdklauncher/.gitignore | 1 + sdklauncher/Android.mk | 43 ++++++++++++++++++ sdklauncher/images/android_icon.ico | Bin 0 -> 300318 bytes sdklauncher/images/android_icon.rc | 3 ++ sdklauncher/sdklauncher.c | 88 ++++++++++++++++++++++++++++++++++++ 5 files changed, 135 insertions(+) create mode 100644 sdklauncher/.gitignore create mode 100644 sdklauncher/Android.mk create mode 100644 sdklauncher/images/android_icon.ico create mode 100644 sdklauncher/images/android_icon.rc create mode 100644 sdklauncher/sdklauncher.c (limited to 'sdklauncher') diff --git a/sdklauncher/.gitignore b/sdklauncher/.gitignore new file mode 100644 index 0000000..0c25b2a --- /dev/null +++ b/sdklauncher/.gitignore @@ -0,0 +1 @@ +images/android_icon.o diff --git a/sdklauncher/Android.mk b/sdklauncher/Android.mk new file mode 100644 index 0000000..3e92ea8 --- /dev/null +++ b/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/sdklauncher/images/android_icon.ico b/sdklauncher/images/android_icon.ico new file mode 100644 index 0000000..bd25179 Binary files /dev/null and b/sdklauncher/images/android_icon.ico differ diff --git a/sdklauncher/images/android_icon.rc b/sdklauncher/images/android_icon.rc new file mode 100644 index 0000000..df468ac --- /dev/null +++ b/sdklauncher/images/android_icon.rc @@ -0,0 +1,3 @@ +1 ICON "../images/android_icon.ico" + + diff --git a/sdklauncher/sdklauncher.c b/sdklauncher/sdklauncher.c new file mode 100644 index 0000000..d052284 --- /dev/null +++ b/sdklauncher/sdklauncher.c @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * 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. + * + * TODO: + * - detect that java is installed; error dialog if not, explaning where to get it. + * - create temp dir, always copy *.jar there, exec android.jar + * - get jars to copy from some file + * - use a version number to copy jars only if needed (tools.revision?) + */ + +#ifdef _WIN32 + +#include +#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 */ -- cgit v1.1