2012-09-05 3 views
0

나는 안드로이드 에뮬레이터를 실행하는 것에 관한 질문을 만난다. 고마워요!"execve"를 사용하여 Linux에서 Android 에뮬레이터 프로세스를 실행하지만 "avd"경로가 잘못 되었습니까?

는 내가 자동으로 안드로이드 에뮬레이터를 실행, 그래서 리눅스에서 execve을 사용하는 경향이 필요

는 소스 코드는 다음과 같습니다 :

/*initailize passed command line\*/ 

char *binary = (char*)malloc(8*sizeof(char)); 
char **newargv = (char **)malloc(16*sizeof(char *)); 

newargv[0] = "/media/career/android/source/out/host/linux-x86/sdk/android-sdk_eng.corey_linux-x86/tools/emulator"; 
newargv[1] = "-avd"; 

newargv[2] = "new1"; 

newargv[3] = "-system"; 

newargv[4] = "/media/career/android/source/out/target/product/generic/system.img"; 

newargv[5] = "-ramdisk"; 

newargv[6] = "/media/career/android/source/out/target/product/generic/ramdisk.img"; 

newargv[7] = "-data"; 

newargv[8] = "/media/career/android/source/out/target/product/generic/userdata.img"; 

newargv[9] = NULL;   

/*initialize the env value of new process(emulator) */ 

const char *temp = getenv("ANDROID_AVD_HOME"); 

envp[0] = temp; 

envp[1] = getenv("PATH"); 

envp[2] = NULL; 

/*main function*/ 
if (execve (binary, (char **)newargv, (char **)envp) < 0) 

environment variable: 
declare -x ANDROID_AVD_HOME="/home/corey/.android/avd" 
declare -x PATH="/media/career/android/source/out/host/linux-x86/sdk/android-sdk_eng.corey_linux-x86/platform-tools:/media/career/android/source/out/host/linux-x86/sdk/android-sdk_eng.corey_linux-x86/tools: 

콘솔을 보여줍니다 PANIC: Could not open: /tmp/.android/avd/new1.ini

내 AVD 저장 경로는 기본적으로 ~/.android/avd입니다 . 그러나 새로운 프로세스는 이식성이 나쁜 avd 파일을 읽을 수있는 루트 파일 시스템 경로 만 찾습니다. 실제로 에뮬레이터의 프로세스가 실행되었습니다. env 변수 설정에 초점을 맞추었지만 실패했습니다.

환경 변수를 어떻게 설정해야합니까?

답변

0

당신은 안전 strcat와 함께 + 교체 잘못된 envp는

const char *temp = getenv("ANDROID_AVD_HOME"); 
envp[0] = "ANDROID_AVD_HOME=" + temp; 
envp[1] = "PATH=" + getenv("PATH"); 
envp[2] = NULL; 

을 통과

관련 문제