sdklauncher.c revision 6508be1224ddec08910c464d2a905c4c2e1f7d80
16508be1224ddec08910c464d2a905c4c2e1f7d80Raphael/* 26508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Copyright (C) 2009 The Android Open Source Project 36508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * 46508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Licensed under the Apache License, Version 2.0 (the "License"); 56508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * you may not use this file except in compliance with the License. 66508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * You may obtain a copy of the License at 76508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * 86508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * http://www.apache.org/licenses/LICENSE-2.0 96508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * 106508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Unless required by applicable law or agreed to in writing, software 116508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * distributed under the License is distributed on an "AS IS" BASIS, 126508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * See the License for the specific language governing permissions and 146508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * limitations under the License. 156508be1224ddec08910c464d2a905c4c2e1f7d80Raphael */ 166508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 176508be1224ddec08910c464d2a905c4c2e1f7d80Raphael/* 186508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * The "SDK Launcher" is for Windows only. 196508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * This simple .exe will sit at the root of the Windows SDK 206508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * and currently simply executes tools\android.bat. 216508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * Eventually it should simply replace the batch file. 226508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * 236508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * TODO: 246508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - detect that java is installed; error dialog if not, explaning where to get it. 256508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - create temp dir, always copy *.jar there, exec android.jar 266508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - get jars to copy from some file 276508be1224ddec08910c464d2a905c4c2e1f7d80Raphael * - use a version number to copy jars only if needed (tools.revision?) 286508be1224ddec08910c464d2a905c4c2e1f7d80Raphael */ 296508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 306508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#ifdef _WIN32 316508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 326508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#include <stdio.h> 336508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#include <windows.h> 346508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 356508be1224ddec08910c464d2a905c4c2e1f7d80Raphaelint sdk_launcher() { 366508be1224ddec08910c464d2a905c4c2e1f7d80Raphael STARTUPINFO startup; 376508be1224ddec08910c464d2a905c4c2e1f7d80Raphael PROCESS_INFORMATION pinfo; 386508be1224ddec08910c464d2a905c4c2e1f7d80Raphael char program_path[MAX_PATH]; 396508be1224ddec08910c464d2a905c4c2e1f7d80Raphael int ret; 406508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 416508be1224ddec08910c464d2a905c4c2e1f7d80Raphael ZeroMemory(&startup, sizeof(startup)); 426508be1224ddec08910c464d2a905c4c2e1f7d80Raphael startup.cb = sizeof(startup); 436508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 446508be1224ddec08910c464d2a905c4c2e1f7d80Raphael ZeroMemory(&pinfo, sizeof(pinfo)); 456508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 466508be1224ddec08910c464d2a905c4c2e1f7d80Raphael /* get path of current program */ 476508be1224ddec08910c464d2a905c4c2e1f7d80Raphael GetModuleFileName(NULL, program_path, sizeof(program_path)); 486508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 496508be1224ddec08910c464d2a905c4c2e1f7d80Raphael ret = CreateProcess( 506508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL, /* program path */ 516508be1224ddec08910c464d2a905c4c2e1f7d80Raphael "tools\\android.bat update sdk", /* command-line */ 526508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL, /* process handle is not inheritable */ 536508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL, /* thread handle is not inheritable */ 546508be1224ddec08910c464d2a905c4c2e1f7d80Raphael TRUE, /* yes, inherit some handles */ 556508be1224ddec08910c464d2a905c4c2e1f7d80Raphael CREATE_NO_WINDOW, /* we don't want a console */ 566508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL, /* use parent's environment block */ 576508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL, /* use parent's starting directory */ 586508be1224ddec08910c464d2a905c4c2e1f7d80Raphael &startup, /* startup info, i.e. std handles */ 596508be1224ddec08910c464d2a905c4c2e1f7d80Raphael &pinfo); 606508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 616508be1224ddec08910c464d2a905c4c2e1f7d80Raphael if (!ret) { 626508be1224ddec08910c464d2a905c4c2e1f7d80Raphael DWORD err = GetLastError(); 636508be1224ddec08910c464d2a905c4c2e1f7d80Raphael fprintf(stderr, "CreateProcess failure, error %ld\n", err); 646508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 656508be1224ddec08910c464d2a905c4c2e1f7d80Raphael LPSTR s; 666508be1224ddec08910c464d2a905c4c2e1f7d80Raphael if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | /* dwFlags */ 676508be1224ddec08910c464d2a905c4c2e1f7d80Raphael FORMAT_MESSAGE_FROM_SYSTEM, 686508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL, /* lpSource */ 696508be1224ddec08910c464d2a905c4c2e1f7d80Raphael err, /* dwMessageId */ 706508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 0, /* dwLanguageId */ 716508be1224ddec08910c464d2a905c4c2e1f7d80Raphael (LPSTR)&s, /* lpBuffer */ 726508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 0, /* nSize */ 736508be1224ddec08910c464d2a905c4c2e1f7d80Raphael NULL) != 0) { /* va_list args */ 746508be1224ddec08910c464d2a905c4c2e1f7d80Raphael fprintf(stderr, "%s", s); 756508be1224ddec08910c464d2a905c4c2e1f7d80Raphael LocalFree(s); 766508be1224ddec08910c464d2a905c4c2e1f7d80Raphael } 776508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 786508be1224ddec08910c464d2a905c4c2e1f7d80Raphael return -1; 796508be1224ddec08910c464d2a905c4c2e1f7d80Raphael } 806508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 816508be1224ddec08910c464d2a905c4c2e1f7d80Raphael return 0; 826508be1224ddec08910c464d2a905c4c2e1f7d80Raphael} 836508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 846508be1224ddec08910c464d2a905c4c2e1f7d80Raphaelint main(int argc, char **argv) { 856508be1224ddec08910c464d2a905c4c2e1f7d80Raphael return sdk_launcher(); 866508be1224ddec08910c464d2a905c4c2e1f7d80Raphael} 876508be1224ddec08910c464d2a905c4c2e1f7d80Raphael 886508be1224ddec08910c464d2a905c4c2e1f7d80Raphael#endif /* _WIN32 */ 89