在Android模拟器问题上的市场授权API

我有一个使用许可证检查API的Android应用程序。 我已经为API等级8,9和10设置了Google API的模拟器AVDs。我的应用程序可以很好地运行在8级AVD上,但是在9级和10级AVD上却失败了。 这是一个典型的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 

(我已经validation了我的testing帐户是在所有模拟器中设置的,而且我已经设置了开发者控制台来为testing帐户返回一个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之外,其他人是否能够testing许可?

更新:Google提供的“市场许可示例”应用程序也出现同样的问题。

Solutions Collecting From Web of "在Android模拟器问题上的市场授权API"

无法绑定到服务通常意味着您尚未在您的Manifest中声明该服务。

在这里阅读

你的第二个错误:

  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