SDK Manager无法启动
首先cmd切换到android-sdk-windows\tools\lib,找到find_java.bat
打开回显:rem @echo off,再运行find_java.bat,若输出的set java_exe=同jdk安装路径不符,则需要检查环境变量JAVA_HOME和PATH中java.exe是否设置正确,其逻辑在于android/platform/sdk/find_java/src/source/find_java_lib.cpp中的函数findJavaInEnvPath:
// Search java.exe in the environment
int findJavaInEnvPath(CPath *outJavaPath, bool isJdk, int minVersion) {
SetLastError(0); const char* envPath = getenv("JAVA_HOME");
if (envPath != NULL) {
CPath p(envPath); if (!isJdk || isJdkPath(p)) {
int v = checkBinPath(&p);
if (v >= minVersion) {
if (gIsDebug) {
fprintf(stderr, "Java %d found via JAVA_HOME: %s\n", v, p.cstr());
}
*outJavaPath = p;
// As an optimization for runtime, if we find a suitable java
// version in JAVA_HOME we won't waste time looking at the PATH.
return v;
}
}
} int currVersion = 0;
envPath = getenv("PATH");
if (!envPath) return currVersion; // Otherwise look at the entries in the current path.
// If we find more than one, keep the one with the highest version. CArray<CString> *paths = CString(envPath).split(';');
for(int i = 0; i < paths->size(); i++) {
CPath p((*paths)[i].cstr()); if (isJdk && !isJdkPath(p)) {
continue;
} int v = checkPath(&p);
if (v >= minVersion && v > currVersion) {
if (gIsDebug) {
fprintf(stderr, "Java %d found via env PATH: %s\n", v, p.cstr());
} currVersion = v;
*outJavaPath = p;
}
} delete paths;
return currVersion;
}
可看到其逻辑是在环境变量中先查找JAVA_HOME,若没有则再查找PATH中最高版本的java.exe,当然java.exe的版本最小为6.1。
若环境变量中java.exe设置无误,则检查批处理find_java.bat是否有误,这是因为SDK Manager.exe源码android/platform/sdk/sdklauncher/src/source/sdklauncher.c显示其是调用android-sdk-windows\tools\android.bat
int sdk_launcher() {
int result = 0;
STARTUPINFO startup;
PROCESS_INFORMATION pinfo;
CHAR program_dir[MAX_PATH];
int ret, pos;
ZeroMemory(&pinfo, sizeof(pinfo));
ZeroMemory(&startup, sizeof(startup));
startup.cb = sizeof(startup);
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = SW_HIDE|SW_MINIMIZE;
/* get path of current program, to switch dirs here when executing the command. */
ret = GetModuleFileName(NULL, program_dir, sizeof(program_dir));
if (ret == 0) {
display_error("Failed to get program's filename:");
result = 1;
} else {
/* Remove the last segment to keep only the directory. */
pos = ret - 1;
while (pos > 0 && program_dir[pos] != '\\') {
--pos;
}
program_dir[pos] = 0;
}
if (!result) {
dprintf("Program dir: %s\n", program_dir);
// SDK Manager.exe is installed by the Windows Installer just below
// the tools directory and needs to access tools\android.bat
ret = CreateProcess(
NULL, /* program path */
"tools\\android.bat 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 */
program_dir, /* use parent's starting directory */
&startup, /* startup info, i.e. std handles */
&pinfo);
if (!ret) {
dprintf("CreateProcess returned %d\n", ret);
// In the ADT bundle, SDK Manager.exe is located in the sdk folder
// and needs to access sdk\tools\android.bat
ret = CreateProcess(
NULL, /* program path */
"sdk\\tools\\android.bat 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 */
program_dir, /* use parent's starting directory */
&startup, /* startup info, i.e. std handles */
&pinfo);
}
dprintf("CreateProcess returned %d\n", ret);
if (!ret) {
display_error("Failed to execute tools\\android.bat:");
result = 1;
}
}
dprintf("Cleanup.\n");
return result;
}
SDK Manager无法启动的更多相关文章
- Android 的 SDK Manager 无法启动 闪退解决方法
[故障描述] 做 Android 开发就要下载 Android SDK,其中的 SDK Manager.exe 无法启动,一闪而过. 尝试重装 JDK.重新从官网下载 Android SDK.添加环境 ...
- Android SDK 的SDK Manager打不开,一闪就退,无法启动,解决方法
前一分钟还能打开,在eclipse中点了更新SDK后就启不动了 看下目录的修改时间,tool目录已经是今天的时间, 在升级过程中修改过了,给他改名 tempToolsDir 改名为tool 再尝试下启 ...
- ADT SDK Manager启动时一闪而过
原因为使用了Android Studio的绿色JRE,必须要安装安装版JDK或者JRE,绿色版JRE放在ADT目录虽然能启动ADT但是不能启动SDK Manager
- ubuntu 中启动SDK manager
Android SDK安装后,目录结构如下: root@localhost:/home/ranxf/Android/Sdk/android-sdk-linux# ll 总用量 drwxrwxr-x r ...
- 解决Android SDK Manager下载问题和android studio每次启动都要在fetching Android sdk compoment information
1.能解决国内访问Google服务器的困难启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manager - ...
- linux===启动sdk manager下载配置sdk的时候报错的解决办法
当启动sdk manager下载配置sdk的时候,报错如下: botoo@botoo-virtual-machine:/opt/android-sdk-linux/tools$ sudo ./and ...
- Android Studio 1.5启动出现“SDK Manager: failed to install”问题的解决
问题描述 Android Studio 1.5是当前最新Android手机应用开发平台,下载bundle版安装后,启动Studio后出现“SDK Manager: failed to install” ...
- 安卓虚拟机启动后报错: 类似 SDK Manager] Error: Error parsing .....devices.xml 解决方案
昨天用android sdk manager 更新了android sdk, 我是在eclipse上面安装adt来开发android的, 而且我每次打开虚拟机的时候也报错.报错的信息都是一样的. ...
- [转]安卓虚拟机启动后报错: 类似 SDK Manager] Error: Error parsing .devices.xml 解决方案
昨天用android sdk manager 更新了android sdk, 我是在myeclipse上面安装adt来开发android的现在每次打开myeclipse都报错, 而且我每次打开虚拟机的 ...
随机推荐
- [XML] resources的Xml配置文件 (转载)
<?xml version="1.0" encoding="utf-8" ?> <resources> <language> ...
- iis7.5 应用程序池 经典模式和集成模式的区别
在 IIS 7.5 中,应用程序池有两种运行模式:集成模式和经典模式. 应用程序池模式会影响服务器处理托管代码请求的方式. 如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ...
- iOS 正则表达式-判断邮箱、手机号
判断是否是邮箱 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[ ...
- DBA 培训相应内容笔记
014-12-23 slow hang lock 三种常见性能问题 hang;整个数据库不响应,无法创建新连接. hanganalyze输出. dump文件是否有问题信息, 文件是否有其他信息 工具: ...
- SVM(支持向量机)算法
第一步.初步了解SVM 1.0.什么是支持向量机SVM 要明白什么是SVM,便得从分类说起. 分类作为数据挖掘领域中一项非常重要的任务,它的目的是学会一个分类函数或分类模型(或者叫做分类器),而支持向 ...
- Windows phone 之 UserControl的应用
一.新建一个UserControl.xaml页面 MyUserControl.xaml 添加代码如下: <UserControl x:Class="bodypicture.MyUse ...
- tomcat gc问题总结
Java内存泄露监控工具:JVM监控工具介绍 http://developer.51cto.com/art/201203/321431.htm 关于施用full gc频繁的分析及解决 http:/ ...
- 20 Valid Parentheses(匹配括号)
题目意思:判断一个字符串(){}[]是否符合 思路:用栈ps:实习一个多月了,代码也刷不动了,状态真不是一般的差 class Solution { public: bool isValid(strin ...
- Android DropBoxManager Service
Android DropBoxManager Service 什么是 DropBoxManager ? Enqueues chunks of data (from various sources – ...
- python基础之元组(Tuple)、字典(Dictionary)详解
元组定义 元组是另一个数据类型,类似于List(列表). 元组用”()”标识.内部元素用逗号隔开.但是元素不能二次赋值,相当于只读列表. 举例: tuple = ( ‘abcd’, 786 , 2.2 ...