Сбой биллинга Google Play на уровне API ниже 19

Согласно документации Google, биллинг Google Play должен работать с API 8 и новее, но не работает.

https://developer.android.com/google/play/billing/billing_overview

Я реализовал базовое руководство с их github:
https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive_v2

затем я удалил все, что мне было не нужно, сохранил ядро ​​и перенес в свое настоящее приложение

В моих тестах кажется, что все работает нормально, но когда я развертываю производство, огромное количество сбоев было запущено еще до загрузки первого действия, во время инициализации приложения:

Caused by java.lang.ClassNotFoundException: Didn't find class "com.android.org.conscrypt.OpenSSLRSAPublicKey" on path: DexPathList[[zip file "/data/app/com.tomatedigital.instagramgiveawaywinner-5.apk", zip file "/data/data/com.tomatedigital.instagramgiveawaywinner/code_cache/secondary-dexes/com.tomatedigital.instagramgiveawaywinner-5.apk.classes2.zip"],nativeLibraryDirectories=[/data/app-lib/com.tomatedigital.instagramgiveawaywinner-5, /vendor/lib, /system/lib]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:64)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
       at java.lang.Class.classForName(Class.java)
      at com.tomatedigital.giveawaymaster.billing.Security.generatePublicKey(Security.java:73)
       at com.tomatedigital.giveawaymaster.util.App$2.run(App.java:302)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
       at java.lang.Thread.run(Thread.java:841)

метод, который терпит неудачу:

/**
 * Generates a PublicKey instance from a string containing the
 * Base64-encoded public key.
 *
 * @param encodedPublicKey Base64-encoded public key
 * @throws IllegalArgumentException if encodedPublicKey is invalid
 */
public static PublicKey generatePublicKey(String encodedPublicKey) {
    try {
        byte[] decodedKey = Base64.decode(encodedPublicKey, Base64.DEFAULT);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM);
        return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException(e);
    } catch (InvalidKeySpecException e) {
        Log.e(TAG, "Invalid key specification.");
        throw new IllegalArgumentException(e);
    }
}

этот метод - КОПИРОВАТЬ / ВСТАВИТЬ из примера Google, никаких изменений с моей стороны, даже переименования переменных ...

сам мой класс даже не импортирует отсутствующий класс, упомянутый в исключении com.android.org.conscrypt.OpenSSLRSAPublicKey, поэтому это означает, что этот класс используется некоторыми внутренними вызовами API Google и не был включен в пакет, доступный для импорта

implementation 'com.android.billingclient:billing:1.1'

Мой вопрос: как использовать биллинг Google на android api lvl 15-18 (минимальный уровень api моего приложения 15)?

какой минимальный доступный пакет я могу импортировать, чтобы предоставить все необходимые классы, поскольку Google этого не сделал?

Я проверил на maven, и сам пакет consrypt составляет 5 МБ ... я не хочу импортировать 5 МБ api, так как мое ВСЕ ПРИЛОЖЕНИЕ составляет 5 МБ, я бы сделал его в два раза больше, и это не имеет смысла, потому что если есть какое-либо устройство, при использовании Android 4.3 или старше это устройство с очень ограниченными ресурсами, и неразумно иметь для него более крупный apk

=========== ОБНОВЛЕНИЕ =============

Я импортировал зависимость, упомянутую в комментариях, но все еще получаю то же исключение

olderImplementation 'org.conscrypt:conscrypt-android:1.2.0'

Это похоже на часть github.com/google/conscrypt и упомянутый там пакет implementation 'org.conscrypt:conscrypt-android:1.2.0' 3.4MB согласно mvnrepository.com/artifact/org.conscrypt/conscrypt-android/…‌. Но перед тем, как что-то импортировать, вы пробовали запустить релизный apk, чтобы убедиться, что он воспроизводится? У вас включена минификация?

madlymad 14.10.2018 23:53

ошибка воспроизводима, как я описал, только на API ниже 19 ... у меня не включена минификация

Rafael Lima 15.10.2018 15:18
0
2
190
0

Другие вопросы по теме