diff U3 src/android/src/org/qtproject/qt5/android/purchasing/QtInAppPurchase.java src/android/src/org/qtproject/qt5/android/purchasing/QtInAppPurchase.java
--- src/android/src/org/qtproject/qt5/android/purchasing/QtInAppPurchase.java	Fri Dec 16 05:07:48 2016
+++ src/android/src/org/qtproject/qt5/android/purchasing/QtInAppPurchase.java	Mon Feb 20 22:00:11 2017
@@ -223,7 +223,7 @@
 
     }
 
-    public void queryDetails(final String[] productIds)
+    public void queryDetails(final String[] productIds, final String type)
     {
         if (m_service == null) {
             Log.e(TAG, "queryDetails: Service not initialized");
@@ -255,7 +255,7 @@
 
                             Bundle bundle = m_service.getSkuDetails(IAP_VERSION,
                                                                     m_context.getPackageName(),
-                                                                    "inapp",
+                                                                    type,
                                                                     productIdBundle);
 
                             int responseCode = bundleResponseCode(bundle);
diff U3 src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp
--- src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp	Fri Dec 16 05:07:48 2016
+++ src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp	Mon Feb 20 22:14:13 2017
@@ -119,6 +119,7 @@
     QAndroidJniEnvironment environment;
 
     QStringList newProducts;
+    QStringList newProductsSub;
     for (int i = 0; i < products.size(); ++i) {
         const Product &product = products.at(i);
         if (m_productTypeForPendingId.contains(product.identifier)) {
@@ -127,25 +128,46 @@
         }
 
         m_productTypeForPendingId[product.identifier] = product.productType;
-        newProducts.append(product.identifier);
+        if (product.productType == QInAppProduct::Consumable) {
+            newProducts.append(product.identifier);
+        } else {
+            newProductsSub.append(product.identifier);
+        }
     }
 
-    if (newProducts.isEmpty())
+    if (newProducts.isEmpty() && newProductsSub.isEmpty())
         return;
+    
+    if (!newProducts.isEmpty()) {
+        jclass cls = environment->FindClass("java/lang/String");
+        jobjectArray productIds = environment->NewObjectArray(newProducts.size(), cls, 0);
+        environment->DeleteLocalRef(cls);
+
+        for (int i = 0; i < newProducts.size(); ++i) {
+            QAndroidJniObject identifier = QAndroidJniObject::fromString(newProducts.at(i));
+            environment->SetObjectArrayElement(productIds, i, identifier.object());
+        }
 
-    jclass cls = environment->FindClass("java/lang/String");
-    jobjectArray productIds = environment->NewObjectArray(newProducts.size(), cls, 0);
-    environment->DeleteLocalRef(cls);
-
-    for (int i = 0; i < newProducts.size(); ++i) {
-        QAndroidJniObject identifier = QAndroidJniObject::fromString(newProducts.at(i));
-        environment->SetObjectArrayElement(productIds, i, identifier.object());
+        m_javaObject.callMethod<void>("queryDetails",
+                                      "([Ljava/lang/String;Ljava/lang/String;)V",
+                                      productIds, QAndroidJniObject::fromString(QString::fromLatin1("inapp")).object());
+        environment->DeleteLocalRef(productIds);
     }
+    if (!newProductsSub.isEmpty()) {
+        jclass cls = environment->FindClass("java/lang/String");
+        jobjectArray productIds = environment->NewObjectArray(newProductsSub.size(), cls, 0);
+        environment->DeleteLocalRef(cls);
 
-    m_javaObject.callMethod<void>("queryDetails",
-                                  "([Ljava/lang/String;)V",
-                                  productIds);
-    environment->DeleteLocalRef(productIds);
+        for (int i = 0; i < newProductsSub.size(); ++i) {
+            QAndroidJniObject identifier = QAndroidJniObject::fromString(newProductsSub.at(i));
+            environment->SetObjectArrayElement(productIds, i, identifier.object());
+        }
+
+        m_javaObject.callMethod<void>("queryDetails",
+                                      "([Ljava/lang/String;Ljava/lang/String;)V",
+                                      productIds, QAndroidJniObject::fromString(QString::fromLatin1("subs")).object());
+        environment->DeleteLocalRef(productIds);
+    }
 }
 
 void QAndroidInAppPurchaseBackend::queryProduct(QInAppProduct::ProductType productType,
