From b9a24753a09678034c9a2e9423d02c68c54ed218 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 21 Feb 2023 18:13:02 +0100 Subject: [PATCH] Android: Fix opening of package location after build Fixes and consolidates into one common function the package path retrieval for the eight combinations of: (apk|aab)(debug|release)(signed|unsigned) Fixes: QTCREATORBUG-28791 Change-Id: I6e8c54f555b95aca448032783938f9f7f89bc653 Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidbuildapkstep.cpp | 10 +----- src/plugins/android/androiddeployqtstep.cpp | 2 +- src/plugins/android/androidmanager.cpp | 35 ++++++++++++++++----- src/plugins/android/androidmanager.h | 2 +- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 436a58c39ac..adf96eb68d7 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -533,15 +533,7 @@ bool AndroidBuildApkStep::init() m_openPackageLocationForRun = m_openPackageLocation; const FilePath outputDir = AndroidManager::androidBuildDirectory(target()); - - if (m_buildAAB) { - const QString bt = buildType() == BuildConfiguration::Release ? QLatin1String("release") - : QLatin1String("debug"); - m_packagePath = outputDir.pathAppended( - QString("build/outputs/bundle/%1/android-build-%1.aab").arg(bt)); - } else { - m_packagePath = AndroidManager::apkPath(target()); - } + m_packagePath = AndroidManager::packagePath(target()); qCDebug(buildapkstepLog).noquote() << "APK or AAB path:" << m_packagePath.toUserOutput(); diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index df081b092c9..c305987a502 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -251,7 +251,7 @@ bool AndroidDeployQtStep::init() } else { m_uninstallPreviousPackageRun = true; m_command = AndroidConfigurations::currentConfig().adbToolPath(); - m_apkPath = AndroidManager::apkPath(target()); + m_apkPath = AndroidManager::packagePath(target()); m_workingDirectory = bc ? AndroidManager::buildDirectory(target()): FilePath(); } m_environment = bc ? bc->environment() : Utils::Environment(); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 8b81907220e..e4d47be7337 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -268,7 +268,31 @@ FilePath AndroidManager::buildDirectory(const Target *target) return {}; } -FilePath AndroidManager::apkPath(const Target *target) +enum PackageFormat { + Apk, + Aab +}; + +QString packageSubPath(PackageFormat format, BuildConfiguration::BuildType buildType, bool sig) +{ + const bool deb = (buildType == BuildConfiguration::Debug); + + if (format == Apk) { + if (deb) + return sig ? packageSubPath(Apk, BuildConfiguration::Release, true) // Intentional + : QLatin1String("apk/debug/android-build-debug.apk"); + else + return QLatin1String(sig ? "apk/release/android-build-release-signed.apk" + : "apk/release/android-build-release-unsigned.apk"); + } else { + return QLatin1String(deb ? "bundle/debug/android-build-debug.aab" + : "bundle/release/android-build-release.aab"); + } + + return {}; +} + +FilePath AndroidManager::packagePath(const Target *target) { QTC_ASSERT(target, return {}); @@ -279,13 +303,10 @@ FilePath AndroidManager::apkPath(const Target *target) if (!buildApkStep) return {}; - QString apkPath("build/outputs/apk/android-build-"); - if (buildApkStep->signPackage()) - apkPath += QLatin1String("release.apk"); - else - apkPath += QLatin1String("debug.apk"); + const QString subPath = packageSubPath(buildApkStep->buildAAB() ? Aab : Apk, + bc->buildType(), buildApkStep->signPackage()); - return androidBuildDirectory(target) / apkPath; + return androidBuildDirectory(target) / "build/outputs" / subPath; } bool AndroidManager::matchedAbis(const QStringList &deviceAbis, const QStringList &appAbis) diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index cf03c31e938..d468ec3279e 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -78,7 +78,7 @@ public: static Utils::FilePath manifestPath(const ProjectExplorer::Target *target); static void setManifestPath(ProjectExplorer::Target *target, const Utils::FilePath &path); static Utils::FilePath manifestSourcePath(const ProjectExplorer::Target *target); - static Utils::FilePath apkPath(const ProjectExplorer::Target *target); + static Utils::FilePath packagePath(const ProjectExplorer::Target *target); static bool matchedAbis(const QStringList &deviceAbis, const QStringList &appAbis); static QString devicePreferredAbi(const QStringList &deviceAbis, const QStringList &appAbis); static ProjectExplorer::Abi androidAbi2Abi(const QString &androidAbi);