0

Androidエミュレーターの実行について質問があります。詳細は以下のとおりです。どうもありがとう!

Androidエミュレーターを自動的に実行する必要があるため、Linuxで使用する傾向があるため、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 ファイルを読み取るためのルート ファイルシステムのパスしか見つけません。実際にエミュレーターのプロセスが実行されました。環境変数の設定に集中しましたが、失敗しました。

環境変数の設定方法を教えてください。

4

1 に答える 1

0

間違った envp を渡しました

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

+安全な strcatに置き換えます

于 2012-09-05T10:48:57.657 に答える