Google Play биллинг падает на уровне Api ниже 19 - PullRequest
0 голосов
/ 15 октября 2018

Согласно документации 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);
    }
}

этот метод называется COPY / PASTE fromПример Google, никаких изменений на моей стороне, даже переименование переменных ...

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

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

мой вопрос заключается в том, как использовать биллинг Google на Android Api Lvl 15 - 18 (мое приложение минимумгм уровень API равен 15)?

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

я проверил на maven и самом пакете concerypt5 МБ ... я не хочу импортировать 5 МБ API, так как мое ВСЕ приложение составляет 5 МБ, я бы увеличил его вдвое, и это не имеет смысла, потому что, если какое-либо устройство все еще использует Android 4.3 или старше, это устройствос очень ограниченными ресурсами и не разумно иметь достаточно много apk для этого

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

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

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