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