static void _avdInfo_extractBuildProperties(AvdInfo* i) { i->targetArch = propertyFile_getTargetArch(i->buildProperties); if (!i->targetArch) { i->targetArch = ASTRDUP("arm"); D("Cannot find target CPU architecture, defaulting to '%s'", i->targetArch); } i->targetAbi = propertyFile_getTargetAbi(i->buildProperties); if (!i->targetAbi) { i->targetAbi = ASTRDUP("armeabi"); D("Cannot find target CPU ABI, defaulting to '%s'", i->targetAbi); } if (!i->apiLevel) { // Note: for regular AVDs, the API level is already extracted // from config.ini, besides, for older SDK platform images, // there is no build.prop file and the following function // would always return 1000, making the AVD unbootable!. i->apiLevel = propertyFile_getApiLevel(i->buildProperties); if (i->apiLevel < 3) { i->apiLevel = 3; D("Cannot find target API level, defaulting to %d", i->apiLevel); } } }
char* propertyFile_getTargetArch(const FileData* data) { char* ret = propertyFile_getTargetAbi(data); if (ret) { // Translate ABI name into architecture name. // By default, there are the same with a few exceptions. static const struct { const char* input; const char* output; } kData[] = { { "armeabi", "arm" }, { "armeabi-v7a", "arm" }, }; size_t n; for (n = 0; n < sizeof(kData)/sizeof(kData[0]); ++n) { if (!strcmp(ret, kData[n].input)) { free(ret); ret = ASTRDUP(kData[n].output); break; } } } return ret; }