forked from qt-creator/qt-creator
Android: Refactor Android SDK packages
Introduce a hierarchy for Android SDK packages and refactor the code accordingly. This is ground work for sdk management and automatic android setup Task-number: QTCREATORBUG-18978 Change-Id: Idef545e3b3a8e33e920be52b26094fb8046afcd3 Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
@@ -47,7 +47,7 @@ class AndroidToolOutputParser
|
||||
{
|
||||
public:
|
||||
void parseTargetListing(const QString &output, const FileName &sdkLocation,
|
||||
SdkPlatformList *platformList);
|
||||
SdkPlatformList &platformList);
|
||||
|
||||
QList<SdkPlatform> m_installedPlatforms;
|
||||
};
|
||||
@@ -104,7 +104,7 @@ SdkPlatformList AndroidToolManager::availableSdkPlatforms(bool *ok) const
|
||||
QString targetListing;
|
||||
if (androidToolCommand(m_config.androidToolPath(), QStringList({"list", "target"}),
|
||||
androidToolEnvironment(), &targetListing)) {
|
||||
m_parser->parseTargetListing(targetListing, m_config.sdkLocation(), &list);
|
||||
m_parser->parseTargetListing(targetListing, m_config.sdkLocation(), list);
|
||||
success = true;
|
||||
} else {
|
||||
qCDebug(androidToolLog) << "Android tool target listing failed";
|
||||
@@ -121,8 +121,7 @@ void AndroidToolManager::launchAvdManager() const
|
||||
QProcess::startDetached(m_config.androidToolPath().toString(), QStringList("avd"));
|
||||
}
|
||||
|
||||
QFuture<AndroidConfig::CreateAvdInfo>
|
||||
AndroidToolManager::createAvd(AndroidConfig::CreateAvdInfo info) const
|
||||
QFuture<CreateAvdInfo> AndroidToolManager::createAvd(CreateAvdInfo info) const
|
||||
{
|
||||
return Utils::runAsync(&AndroidToolManager::createAvdImpl, info,
|
||||
m_config.androidToolPath(), androidToolEnvironment());
|
||||
@@ -159,15 +158,14 @@ Environment AndroidToolManager::androidToolEnvironment() const
|
||||
return env;
|
||||
}
|
||||
|
||||
AndroidConfig::CreateAvdInfo AndroidToolManager::createAvdImpl(AndroidConfig::CreateAvdInfo info,
|
||||
FileName androidToolPath,
|
||||
Environment env)
|
||||
CreateAvdInfo AndroidToolManager::createAvdImpl(CreateAvdInfo info, FileName androidToolPath,
|
||||
Environment env)
|
||||
{
|
||||
QProcess proc;
|
||||
proc.setProcessEnvironment(env.toProcessEnvironment());
|
||||
QStringList arguments;
|
||||
arguments << QLatin1String("create") << QLatin1String("avd")
|
||||
<< QLatin1String("-t") << AndroidConfig::apiLevelNameFor(info.target)
|
||||
<< QLatin1String("-t") << AndroidConfig::apiLevelNameFor(info.sdkPlatform)
|
||||
<< QLatin1String("-n") << info.name
|
||||
<< QLatin1String("-b") << info.abi;
|
||||
if (info.sdcardSize > 0)
|
||||
@@ -293,24 +291,36 @@ AndroidDeviceInfoList AndroidToolManager::androidVirtualDevices(const Utils::Fil
|
||||
|
||||
void AndroidToolOutputParser::parseTargetListing(const QString &output,
|
||||
const Utils::FileName &sdkLocation,
|
||||
SdkPlatformList *platformList)
|
||||
SdkPlatformList &platformList)
|
||||
{
|
||||
if (!platformList)
|
||||
return;
|
||||
|
||||
auto addSystemImage = [](const QStringList& abiList, SdkPlatform &platform) {
|
||||
auto addSystemImage = [](const QStringList& abiList, SdkPlatform *platform) {
|
||||
QTC_ASSERT(platform, return);
|
||||
foreach (auto imageAbi, abiList) {
|
||||
SystemImage image;
|
||||
image.abiName = imageAbi;
|
||||
image.apiLevel = platform.apiLevel;
|
||||
platform.systemImages.append(image);
|
||||
auto image = new SystemImage(QVersionNumber(), "", imageAbi, platform);
|
||||
platform->addSystemImage(image);
|
||||
}
|
||||
};
|
||||
|
||||
SdkPlatform platform;
|
||||
QStringList abiList;
|
||||
foreach (const QString &l, output.split('\n')) {
|
||||
const QString line = l.trimmed();
|
||||
class {
|
||||
public:
|
||||
QStringList abiList;
|
||||
QVersionNumber revision;
|
||||
int apiLevel = -1;
|
||||
QString description;
|
||||
Utils::FileName installedLocation;
|
||||
|
||||
void clear() {
|
||||
abiList.clear();
|
||||
revision = QVersionNumber();
|
||||
apiLevel = -1;
|
||||
description.clear();
|
||||
installedLocation.clear();
|
||||
}
|
||||
} platformParams;
|
||||
|
||||
QStringList outputLines = output.split('\n');
|
||||
for (int index = 0; index < outputLines.count(); ++index) {
|
||||
const QString line = outputLines.at(index).trimmed();
|
||||
if (line.startsWith(QLatin1String("id:")) && line.contains(QLatin1String("android-"))) {
|
||||
int index = line.indexOf(QLatin1String("\"android-"));
|
||||
if (index == -1)
|
||||
@@ -319,33 +329,33 @@ void AndroidToolOutputParser::parseTargetListing(const QString &output,
|
||||
const QString tmp = androidTarget.mid(androidTarget.lastIndexOf(QLatin1Char('-')) + 1);
|
||||
Utils::FileName platformPath = sdkLocation;
|
||||
platformPath.appendPath(QString("/platforms/android-%1").arg(tmp));
|
||||
platform.installedLocation = platformPath;
|
||||
platform.apiLevel = AndroidManager::findApiLevel(platformPath);
|
||||
platformParams.installedLocation = platformPath;
|
||||
platformParams.apiLevel = AndroidManager::findApiLevel(platformPath);
|
||||
} else if (line.startsWith(QLatin1String("Name:"))) {
|
||||
platform.name = line.mid(6);
|
||||
platformParams.description = line.mid(6);
|
||||
} else if (line.startsWith(QLatin1String("Revision:"))) {
|
||||
platformParams.revision = QVersionNumber::fromString(line.mid(10));
|
||||
} else if (line.startsWith(QLatin1String("Tag/ABIs :"))) {
|
||||
abiList = cleanAndroidABIs(line.mid(10).trimmed().split(QLatin1String(", ")));
|
||||
platformParams.abiList = cleanAndroidABIs(line.mid(10).trimmed().split(QLatin1String(", ")));
|
||||
} else if (line.startsWith(QLatin1String("ABIs"))) {
|
||||
abiList = cleanAndroidABIs(line.mid(6).trimmed().split(QLatin1String(", ")));
|
||||
} else if (line.startsWith(QLatin1String("---")) || line.startsWith(QLatin1String("==="))) {
|
||||
if (platform.apiLevel == -1)
|
||||
platformParams.abiList = cleanAndroidABIs(line.mid(6).trimmed().split(QLatin1String(", ")));
|
||||
} else if (line.startsWith(QLatin1String("---"))
|
||||
|| line.startsWith(QLatin1String("==="))
|
||||
|| index == outputLines.count() - 1) {
|
||||
if (platformParams.apiLevel == -1)
|
||||
continue;
|
||||
|
||||
addSystemImage(abiList, platform);
|
||||
*platformList << platform;
|
||||
|
||||
platform = SdkPlatform();
|
||||
abiList.clear();
|
||||
auto platform = new SdkPlatform(platformParams.revision,
|
||||
QString("platforms;android-%1").arg(platformParams.apiLevel),
|
||||
platformParams.apiLevel);
|
||||
platform->setState(AndroidSdkPackage::Installed);
|
||||
platform->setDescriptionText(platformParams.description);
|
||||
platform->setInstalledLocation(platformParams.installedLocation);
|
||||
addSystemImage(platformParams.abiList, platform);
|
||||
platformList << platform;
|
||||
platformParams.clear();
|
||||
}
|
||||
}
|
||||
|
||||
// The last parsed Platform.
|
||||
if (platform.apiLevel != -1) {
|
||||
addSystemImage(abiList, platform);
|
||||
*platformList << platform;
|
||||
}
|
||||
|
||||
Utils::sort(*platformList);
|
||||
Utils::sort(platformList);
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user