Android LVL库调试版始终返回NOT_LICENSED问题求助
LVL调试版返回NOT_LICENSED但Play控制台显示LICENSED的排查方案
问题背景
2016年创建的应用于2022年接入LVL库做许可证校验,近期调试版本出现异常:谷歌账号已加入许可证测试账号列表,且Play控制台中该账号的测试结果显示为LICENSED,但LVL库始终返回NOT_LICENSED状态。已尝试重置Play控制台许可证响应、清除Google Play数据、重启设备等方案,均未解决,担忧正式版用户受影响。
以下是针对性的排查与解决步骤:
核对调试版签名与Play控制台配置
LVL校验核心依赖应用签名一致性,本地调试签名若与Play控制台配置不匹配会直接导致校验失败:- 打开Play控制台,进入「应用完整性」→「应用签名」页面,确认已添加调试密钥的SHA-1值;
- 用命令
keytool -list -v -keystore 你的调试密钥库路径获取本地调试签名的SHA-1,和控制台记录完全比对,确保无字符遗漏或错误。
检查LVL代码的测试账号配置
确认代码中测试账号逻辑是否正确:- 若代码硬编码测试账号列表,确保你的谷歌账号已加入其中;
- 若依赖Play控制台的测试账号配置,再次确认控制台「许可证测试」页面的账号列表已正确保存,无拼写错误或账号遗漏。
示例LVL初始化代码参考:
// 替换为你的SALT、公钥等参数 byte[] SALT = new byte[]{1, 2, 3, 4, 5, 6, 7, 8}; String BASE64_PUBLIC_KEY = "你的公钥"; String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); Policy policy = new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)); LicenseChecker checker = new LicenseChecker(this, policy, BASE64_PUBLIC_KEY); checker.checkAccess(new LicenseCheckerCallback() { @Override public void allow(int reason) { // 已授权逻辑 } @Override public void dontAllow(int reason) { // 未授权逻辑 } @Override public void applicationError(int errorCode) { // 错误处理 } });升级设备的Google Play服务
老旧版本的Google Play服务可能存在LVL通信兼容性问题:进入设备「设置」→「应用」→「Google Play服务」,查看版本并升级至最新稳定版。排查网络环境
LVL校验需要设备正常连接Google Play服务器:- 关闭代理、VPN等可能干扰网络的工具,或确保代理可正常访问Google服务;
- 确认设备所在地区支持Google Play许可证服务,部分地区的网络限制会导致校验请求失败。
测试内部测试渠道的正式版
打包发布版APK/AAB上传至Play控制台「内部测试」渠道,用测试账号安装后校验许可证状态:- 若正式版校验正常,说明问题仅局限于本地调试环境,无需担心正式用户;
- 若正式版也异常,需进一步排查Play控制台的应用签名、许可证配置是否存在全局问题。
清除应用自身缓存与数据
除了清除Google Play的数据,还需清除自身应用的缓存和数据,避免本地存储的旧许可证状态干扰新的校验请求。
内容的提问来源于stack exchange,提问作者Youb
相关产品推荐
相关产品推荐

