API лицензирования на рынке при проблемах с эмулятором Android - PullRequest
8 голосов
/ 15 февраля 2011

У меня есть приложение для Android, которое использует API проверки лицензии.Я настроил AVD эмулятора с API Google для API уровней 8, 9 и 10. Мое приложение отлично работает с AVD уровня 8, но с ошибками работает с AVD уровня 9 и 10.Вот типичная последовательность logcat:

02-14 17:43:55.815: INFO/LicenseChecker(448): Binding to licensing service.
02-14 17:43:55.935: WARN/ActivityManager(65): Unable to start service Intent { act=com.android.vending.licensing.ILicensingService }: not found
02-14 17:43:55.935: ERROR/LicenseChecker(448): Could not bind to service.
02-14 17:44:00.625: INFO/ActivityManager(65): Displayed com.zigzagworld.tehillim/.Tehillim: +2m1s448ms (total +5m43s546ms)
02-14 17:44:01.085: INFO/ARMAssembler(65): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x439de6f0:0x439de8a8] in 5603158 ns
02-14 17:44:18.025: INFO/InputReader(65): Device reconfigured: id=0x0, name=qwerty, display size is now 320x480
02-14 17:44:18.025: WARN/InputReader(65):   Touch device did not report support for X or Y axis!
02-14 17:44:19.005: WARN/InputManagerService(65): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40945580
02-14 17:44:20.805: ERROR/ActivityThread(448): Activity com.zigzagworld.tehillim.Tehillim has leaked ServiceConnection com.android.vending.licensing.LicenseChecker@4051ba58 that was originally bound here
02-14 17:44:20.805: ERROR/ActivityThread(448): android.app.ServiceConnectionLeaked: Activity com.zigzagworld.tehillim.Tehillim has leaked ServiceConnection com.android.vending.licensing.LicenseChecker@4051ba58 that was originally bound here
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:938)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:833)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.ContextImpl.bindService(ContextImpl.java:864)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.content.ContextWrapper.bindService(ContextWrapper.java:347)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at com.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:143)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at com.zigzagworld.tehillim.Tehillim.onCreate(Tehillim.java:76)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.os.Looper.loop(Looper.java:123)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at android.app.ActivityThread.main(ActivityThread.java:3647)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at java.lang.reflect.Method.invokeNative(Native Method)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at java.lang.reflect.Method.invoke(Method.java:507)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-14 17:44:20.805: ERROR/ActivityThread(448):     at dalvik.system.NativeStart.main(Native Method)
02-14 17:44:20.835: WARN/ActivityManager(65): Unbind failed: could not find connection for android.os.BinderProxy@40774fd0

(я проверил, что моя тестовая учетная запись настроена во всех эмуляторах, и я настроил консоль разработчика для возврата ответа LICENSED для тестовой учетной записи.) Ошибка об утечке соединения возникает после завершения обработки dontAllow() в моем LicenseCheckerCallback.

Мой код довольно ванильный.Я запускаю следующее в onCreate():

String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
AESObfuscator ob = new AESObfuscator(SALT, getPackageName(), deviceId);
LicenseChecker checker = new LicenseChecker(this,
    new ServerManagedPolicy(this, ob), BASE64_PUBLIC_KEY);
checker.checkAccess(this);

Что-то изменилось в лицензионном коде после API 8?Кто-нибудь еще мог протестировать лицензирование в другом интерфейсе, кроме API 8?

Обновление: та же проблема возникает с примером приложения Market Licensing Sample, поставляемым Google.

1 Ответ

0 голосов
/ 29 июня 2012

Невозможно выполнить привязку к сервису обычно означает, что вы не объявили эту услугу в своем манифесте.

Читайте здесь

Ваша вторичная ошибка:

  Activity com.zigzagworld.tehillim.Tehillim has leaked ServiceConnection com.android.vending.licensing.LicenseChecker@4051ba58 that was originally bound here

Означает, что ваша служба течет, вы ее разрушаете, когда действие завершено?

@Override
protected void onDestroy() {
    super.onDestroy();
    checker.onDestroy();
    ...
}

Ссылка: API очистки

...