diff options
author | Raphaël Cotty <raphael.cotty@gmail.com> | 2021-01-19 22:40:39 +0100 |
---|---|---|
committer | Raphaël Cotty <raphael.cotty@gmail.com> | 2021-04-01 15:42:44 +0000 |
commit | fd1a0ce5b0bd23bb2121e896c1c2732c3d41884a (patch) | |
tree | c13a5464d0af3046dcd535a3a61e55f726a60452 /tests | |
parent | 517a121ac97032942220acae60f7b93d49d930f9 (diff) |
Android: Code signing module
Android.sdk was already signing the apk package but it was using
hardcoded debug key and could only be used to run the application
locally.
The signing part of the android apk/aab package generation is now
in the new codesign module. By default the same debug key is used.
But it is now also possible to configure a different key.
Task-number: QBS-899
Change-Id: I49c54a4d55578c48363805e927392b3a468805f0
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/blackbox/testdata-android/qt-app/test.keystore | bin | 0 -> 1284 bytes | |||
-rw-r--r-- | tests/auto/blackbox/tst_blackboxandroid.cpp | 108 |
2 files changed, 94 insertions, 14 deletions
diff --git a/tests/auto/blackbox/testdata-android/qt-app/test.keystore b/tests/auto/blackbox/testdata-android/qt-app/test.keystore Binary files differnew file mode 100644 index 000000000..5713d10d2 --- /dev/null +++ b/tests/auto/blackbox/testdata-android/qt-app/test.keystore diff --git a/tests/auto/blackbox/tst_blackboxandroid.cpp b/tests/auto/blackbox/tst_blackboxandroid.cpp index a03c9e318..f8ed8a0b9 100644 --- a/tests/auto/blackbox/tst_blackboxandroid.cpp +++ b/tests/auto/blackbox/tst_blackboxandroid.cpp @@ -268,14 +268,19 @@ void TestBlackboxAndroid::android_data() return result; }; - auto commonFiles = [](bool generateAab) { + auto commonFiles = [](bool generateAab, bool codeSign = true, + QString keyAlias="androiddebugkey") { + QByteArrayList files; if (generateAab) - return (QByteArrayList() - << "base/manifest/AndroidManifest.xml" << "base/dex/classes.dex" - << "BundleConfig.pb"); - return (QByteArrayList() - << "AndroidManifest.xml" << "META-INF/ANDROIDD.RSA" << "META-INF/ANDROIDD.SF" - << "META-INF/MANIFEST.MF" << "classes.dex"); + files << "base/manifest/AndroidManifest.xml" << "base/dex/classes.dex" + << "BundleConfig.pb"; + else + files << "AndroidManifest.xml" << "classes.dex"; + if (codeSign) + files << QByteArray("META-INF/" + keyAlias.toUpper().left(8).toUtf8() + ".RSA") + << QByteArray("META-INF/" + keyAlias.toUpper().left(8).toUtf8() + ".SF") + << "META-INF/MANIFEST.MF"; + return files; }; QTest::addColumn<QString>("projectDir"); @@ -296,10 +301,11 @@ void TestBlackboxAndroid::android_data() bool generateAab = false; bool isIncrementalBuild = false; - auto qtAppExpectedFiles = [&](bool generateAab, bool enableAapt2) { + auto qtAppExpectedFiles = [&](bool generateAab, bool enableAapt2, bool codeSign = true, + QString keyAlias="androiddebugkey") { QByteArrayList expectedFile; if (singleArchQt) { - expectedFile << commonFiles(generateAab) + expandArchs(ndkArchsForQt, { + expectedFile << commonFiles(generateAab, codeSign, keyAlias) + expandArchs(ndkArchsForQt, { cxxLibPath("libgnustl_shared.so", true), "assets/--Added-by-androiddeployqt--/qt_cache_pregenerated_file_list", "lib/${ARCH}/libplugins_imageformats_libqgif.so", @@ -317,7 +323,7 @@ void TestBlackboxAndroid::android_data() "lib/${ARCH}/libQt5Widgets.so", "lib/${ARCH}/libqt-app.so"}, generateAab); } else { - expectedFile << commonFiles(generateAab) + expandArchs(ndkArchsForQt, { + expectedFile << commonFiles(generateAab, codeSign, keyAlias) + expandArchs(ndkArchsForQt, { cxxLibPath("libgnustl_shared.so", true), "lib/${ARCH}/libplugins_imageformats_qgif_${ARCH}.so", "lib/${ARCH}/libplugins_imageformats_qico_${ARCH}.so", @@ -329,7 +335,7 @@ void TestBlackboxAndroid::android_data() "lib/${ARCH}/libqt-app_${ARCH}.so"}, generateAab); } if (generateAab) - expectedFile << "base/resources.pb" << "base/assets.pb" << "base/native.pb"; + expectedFile << "base/resources.pb" << "base/native.pb"; else expectedFile << "resources.arsc"; if (version >= qbs::Version(5, 14)) @@ -346,11 +352,82 @@ void TestBlackboxAndroid::android_data() expectedFile << "res/layout/splash.xml"; return expectedFile; }; + auto codeSignProperties = [&](bool codeSign, QString keyStorePath, QString keystorePassword, + QString keyPassword, QString keyAlias) { + if (!codeSign) + return QStringList{"modules.codesign.enableCodeSigning:false"}; + return QStringList{ + "modules.codesign.enableCodeSigning:true", + "modules.codesign.keystorePath:" + keyStorePath, + "modules.codesign.keystorePassword:" + keystorePassword, + "modules.codesign.keyPassword:" + keyPassword, + "modules.codesign.keyAlias:" + keyAlias, + }; + }; + bool codeSign = true; + QString keyStorePath(testDataDir + "/qt-app/test.keystore"); + QString keystorePassword("qbsKeystoreTest"); + QString keyPassword("qbsKeyTest"); + QString keyAlias("qbsTest"); QTest::newRow("qt app") << "qt-app" << QStringList("qt-app") << (QList<QByteArrayList>() << (QByteArrayList() << qtAppExpectedFiles(generateAab, - enableAapt2))) - << QStringList{aaptVersion(enableAapt2), packageType(generateAab)} + enableAapt2, + codeSign, + keyAlias))) + << (QStringList() << codeSignProperties(codeSign, keyStorePath, keystorePassword, + keyPassword, keyAlias) + << aaptVersion(enableAapt2) + << packageType(generateAab)) + << enableAapt2 << generateAab << isIncrementalBuild; + codeSign = false; + QTest::newRow("qt app no signing") + << "qt-app" << QStringList("qt-app") + << (QList<QByteArrayList>() << (QByteArrayList() << qtAppExpectedFiles(generateAab, + enableAapt2, + codeSign, + keyAlias))) + << (QStringList() << codeSignProperties(codeSign, keyStorePath, keystorePassword, + keyPassword, keyAlias) + << aaptVersion(enableAapt2) + << packageType(generateAab)) + << enableAapt2 << generateAab << isIncrementalBuild; + enableAapt2 = true; + codeSign = true; + QTest::newRow("qt app aapt2") + << "qt-app" << QStringList("qt-app") + << (QList<QByteArrayList>() << (QByteArrayList() << qtAppExpectedFiles(generateAab, + enableAapt2, + codeSign, + keyAlias))) + << (QStringList() << codeSignProperties(codeSign, keyStorePath, keystorePassword, + keyPassword, keyAlias) + << aaptVersion(enableAapt2) + << packageType(generateAab)) + << enableAapt2 << generateAab << isIncrementalBuild; + generateAab = true; + QTest::newRow("qt app aab") + << "qt-app" << QStringList("qt-app") + << (QList<QByteArrayList>() << (QByteArrayList() << qtAppExpectedFiles(generateAab, + enableAapt2, + codeSign, + keyAlias))) + << (QStringList() << codeSignProperties(codeSign, keyStorePath, keystorePassword, + keyPassword, keyAlias) + << aaptVersion(enableAapt2) + << packageType(generateAab)) + << enableAapt2 << generateAab << isIncrementalBuild; + codeSign = false; + QTest::newRow("qt app aab no signing") + << "qt-app" << QStringList("qt-app") + << (QList<QByteArrayList>() << (QByteArrayList() << qtAppExpectedFiles(generateAab, + enableAapt2, + codeSign, + keyAlias))) + << (QStringList() << codeSignProperties(codeSign, keyStorePath, keystorePassword, + keyPassword, keyAlias) + << aaptVersion(enableAapt2) + << packageType(generateAab)) << enableAapt2 << generateAab << isIncrementalBuild; const QByteArrayList ndkArchsForQtSave = ndkArchsForQt; @@ -383,6 +460,8 @@ void TestBlackboxAndroid::android_data() return expectedFile; }; + generateAab = false; + enableAapt2 = false; QTest::newRow("teapot") << "teapot" << QStringList("TeapotNativeActivity") << (QList<QByteArrayList>() << teaPotAppExpectedFiles(archs, generateAab)) @@ -437,6 +516,7 @@ void TestBlackboxAndroid::android_data() "modules.qbs.architecture:" + archsStringList.first(), aaptVersion(enableAapt2), packageType(generateAab)} << enableAapt2 << generateAab << isIncrementalBuild; + auto qmlAppExpectedFiles = [&](bool generateAab, bool enableAapt2) { QByteArrayList expectedFile; if (singleArchQt) { @@ -730,7 +810,6 @@ void TestBlackboxAndroid::android_data() } else { qmlAppCustomProperties = QStringList{"modules.Android.sdk.automaticSources:false"}; } - // aapt tool for the resources works with a directory option pointing to the parent directory // of the resources (res). // The Qt.android_support module adds res/values/libs.xml (from Qt install dir). So the res from @@ -851,6 +930,7 @@ void TestBlackboxAndroid::android_data() expectedFile << "resources.arsc"; return expectedFile; }; + QTest::newRow("no native") << "no-native" << QStringList("com.example.android.basicmediadecoder") |