diff --git a/src/androiddeployqt/main.cpp b/src/androiddeployqt/main.cpp
index b1279d672a37eeb34932b00e042de45d9f25a706..6c5ae31c8ac93744119f726952a90db2aace2d2c 100644
--- a/src/androiddeployqt/main.cpp
+++ b/src/androiddeployqt/main.cpp
@@ -126,6 +126,7 @@ struct Options
 
     // External tools
     QString sdkPath;
+    QString sdkBuildToolsVersion;
     QString ndkPath;
     QString antTool;
     QString jdkPath;
@@ -634,12 +635,19 @@ bool readInputFile(Options *options)
                 return false;
         } else {
             if (!QDir(options->sdkPath + QLatin1String("/platforms/") + options->androidPlatform).exists()) {
-                fprintf(stderr, "Warning: Android platform '%s' does not exist in NDK.\n",
+                fprintf(stderr, "Warning: Android platform '%s' does not exist in SDK.\n",
                         qPrintable(options->androidPlatform));
             }
         }
     }
 
+    {
+
+        QJsonValue value = jsonObject.value("sdkBuildToolsRevision");
+        if (!value.isUndefined())
+            options->sdkBuildToolsVersion = value.toString();
+    }
+
     {
         QJsonValue qtInstallDirectory = jsonObject.value("qt");
         if (qtInstallDirectory.isUndefined()) {
@@ -2086,8 +2094,14 @@ bool signPackage(const Options &options)
 #endif
 
     if (!QFile::exists(zipAlignTool)) {
-        fprintf(stderr, "zipalign tool not found: %s\n", qPrintable(zipAlignTool));
-        return false;
+        zipAlignTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/zipalign");
+#if defined(Q_OS_WIN32)
+        zipAlignTool += QLatin1String(".exe");
+#endif
+        if (!QFile::exists(zipAlignTool)) {
+            fprintf(stderr, "zipalign tool not found: %s\n", qPrintable(zipAlignTool));
+            return false;
+        }
     }
 
     zipAlignTool = QString::fromLatin1("%1%2 -f 4 %3 %4")