Add the json option to disable the zstd based compression

Need to disable zstd compression if its support is not built in Qt
for Android. The flag is dected when configuring user's project and
is a part of the deployment settings. This partially fixes loading of
android_rcc_bundle.rcc.

Pick-to: 6.2
Task-number: QTBUG-93340
Task-number: QTBUG-95969
Change-Id: I635afb3f9e182a559d53e9344e07f62788f9837d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Alexey Edelev 2021-08-23 15:39:34 +02:00
parent 86d338383e
commit f037357232
2 changed files with 21 additions and 1 deletions

View File

@ -234,6 +234,14 @@ function(qt6_android_generate_deployment_settings target)
string(APPEND file_contents string(APPEND file_contents
" \"extraPrefixDirs\" : [ ${extra_prefix_list} ],\n") " \"extraPrefixDirs\" : [ ${extra_prefix_list} ],\n")
if(QT_FEATURE_zstd)
set(is_zstd_enabled "true")
else()
set(is_zstd_enabled "false")
endif()
string(APPEND file_contents
" \"zstdCompression\": ${is_zstd_enabled},\n")
# Last item in json file # Last item in json file
# base location of stdlibc++, will be suffixed by androiddeploy qt # base location of stdlibc++, will be suffixed by androiddeploy qt

View File

@ -195,6 +195,7 @@ struct Options
QString toolchainPrefix; QString toolchainPrefix;
QString ndkHost; QString ndkHost;
bool buildAAB = false; bool buildAAB = false;
bool isZstdCompressionEnabled = false;
// Package information // Package information
@ -1108,6 +1109,12 @@ bool readInputFile(Options *options)
const QJsonValue qrcFiles = jsonObject.value(QLatin1String("qrcFiles")); const QJsonValue qrcFiles = jsonObject.value(QLatin1String("qrcFiles"));
options->qrcFiles = qrcFiles.toString().split(QLatin1Char(','), Qt::SkipEmptyParts); options->qrcFiles = qrcFiles.toString().split(QLatin1Char(','), Qt::SkipEmptyParts);
} }
{
const QJsonValue zstdCompressionFlag = jsonObject.value(QLatin1String("zstdCompression"));
if (zstdCompressionFlag.isBool()) {
options->isZstdCompressionEnabled = zstdCompressionFlag.toBool();
}
}
options->packageName = packageNameFromAndroidManifest(options->androidSourceDirectory + QLatin1String("/AndroidManifest.xml")); options->packageName = packageNameFromAndroidManifest(options->androidSourceDirectory + QLatin1String("/AndroidManifest.xml"));
if (options->packageName.isEmpty()) if (options->packageName.isEmpty())
options->packageName = cleanPackageName(QLatin1String("org.qtproject.example.%1").arg(options->applicationBinary)); options->packageName = cleanPackageName(QLatin1String("org.qtproject.example.%1").arg(options->applicationBinary));
@ -2086,9 +2093,14 @@ bool createRcc(const Options &options)
if (!res) if (!res)
return false; return false;
QLatin1String noZstd;
if (!options.isZstdCompressionEnabled)
noZstd = QLatin1String("--no-zstd");
QFile::rename(QLatin1String("%1/android_rcc_bundle.qrc").arg(assetsDir), QLatin1String("%1/android_rcc_bundle/android_rcc_bundle.qrc").arg(assetsDir)); QFile::rename(QLatin1String("%1/android_rcc_bundle.qrc").arg(assetsDir), QLatin1String("%1/android_rcc_bundle/android_rcc_bundle.qrc").arg(assetsDir));
res = runCommand(options, QLatin1String("%1 %2 --binary -o %3 android_rcc_bundle.qrc").arg(rcc, shellQuote(QLatin1String("--root=/android_rcc_bundle/")), res = runCommand(options, QLatin1String("%1 %2 %3 --binary -o %4 android_rcc_bundle.qrc").arg(rcc, shellQuote(QLatin1String("--root=/android_rcc_bundle/")),
noZstd,
shellQuote(QLatin1String("%1/android_rcc_bundle.rcc").arg(assetsDir)))); shellQuote(QLatin1String("%1/android_rcc_bundle.rcc").arg(assetsDir))));
if (!QDir::setCurrent(currentDir)) { if (!QDir::setCurrent(currentDir)) {
fprintf(stderr, "Cannot set current dir to: %s\n", qPrintable(currentDir)); fprintf(stderr, "Cannot set current dir to: %s\n", qPrintable(currentDir));