davexa 2026-01-25 13:49 采纳率: 61.5%
浏览 4

关于在Android app中套用Google License Verification Library (LVL)的三点疑问。

大家好,请教关于安卓app开发的几个问题:

  1. 如果要在Android app中套用Google License Verification client Library (LVL) ,只能是下载LVL到本地,然后作为一个独立的Library project被其他的app-project引用,或者直接将LVL源代码加入某个app_project,作为prj的一个module模块吗?

    能不能像其他依赖库一样,在build.gradle配置里写上 implementation,实际在build时才自动去maven仓库抓取?

  2. 上述疑问是考虑,如果从SDK Manager里去下载LVL的话,能看到有两个选项:一个是rev 2,另一个1.0;而且,貌似更新的版本rev 2,下载下来看,也是近十年前的版本,难道Google一直就没有更版过LVL么?

  3. 指定toolchain 为java 17后,build有警告:LicenseChecker.java使用或覆盖了已过时的 API
    确实是找到了过时的两个API:PackageInfo中的versionCode;Date中的toGMTString()。

    问题是,必须得我们自行修改,Google提供的源代码 LicenseChecker.java 么?

谢谢!祝你周末愉快!

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-01-25 13:50
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你的问题非常有代表性,涉及到 Google License Verification Library (LVL) 的使用、依赖管理以及过时 API 的处理。下面我将详细解答你的三个疑问,并提供解决方案。


    一、关于 LVL 的集成方式

    1. 是否只能通过本地库或模块引用?

    答案:是的,但也可以通过其他方式引入。

    目前 Google 官方并未将 LVL 发布到 Maven Central 或 JCenter 等主流仓库中,因此你无法像 implementation 'com.android.support:appcompat-v7:28.0.0' 这样直接在 build.gradle 中配置依赖。

    你可以选择以下两种方式之一:

    ✅ 方式一:将 LVL 作为 Library Project 引用

    • 下载 LVL 源码(如 这里
    • 将其导入为一个 Android Library Module
    • 在主项目中通过 implementation project(':library-name') 引用

    ✅ 方式二:将 LVL 作为 Module 加入主项目

    • 把 LVL 的源代码直接复制到你的项目中,作为一个 module
    • settings.gradle 中添加 include ':licensechecker'
    • 在主项目的 build.gradle 中添加 implementation project(':licensechecker')

    📌 注意: 由于 LVL 是较老的库,建议只用于旧项目,新项目推荐使用 Play Licensing API,这是更现代和推荐的方式。


    二、能否像其他依赖一样通过 build.gradle 引入?

    答案:不能,因为 LVL 不在标准 Maven 仓库中。

    虽然你可以在 SDK Manager 中下载 LVL 的源码,但它没有发布到公共的 Maven 仓库中。所以你无法通过如下方式引入:

    implementation 'com.google.android.vending:licensing:1.0'
    

    但是,你可以手动将 LVL 的源码加入到你的项目中,或者使用 本地 maven 仓库(如通过 maven-publish 插件)进行发布和依赖。


    三、关于 LVL 版本和过时 API 的问题

    1. LVL 的版本是否长期未更新?

    答案:是的,LVL 的最新版本是 Rev 2(大约 2013 年左右发布的),并且已经不再维护。

    Google 已经推荐使用新的 Play Licensing API,它基于 Play Store 的 REST API,更加灵活、安全且易于维护。

    ⚠️ 建议: 如果你在开发新应用,请不要使用 LVL,而是使用新的 Play Licensing API。


    2. 如何处理 LicenseChecker.java 中的过时 API?

    你提到的两个过时 API 是:

    • PackageInfo.versionCode(已弃用)
    • Date.toGMTString()(已弃用)

    ✅ 解决方案:

    你需要修改 Google 提供的 LicenseChecker.java 源码来避免警告和潜在错误。

    以下是修改建议:

    🔧 修改 LicenseChecker.java 中的 versionCode 使用

    原代码(可能已过时):

    int versionCode = packageInfo.versionCode;
    

    修改后:

    int versionCode = BuildConfig.VERSION_CODE; // 使用 build.gradle 中定义的 versionCode
    

    📌 注意: 你可以在 build.gradle 中设置 versionCode,然后在代码中通过 BuildConfig.VERSION_CODE 获取。

    🔧 修改 Date.toGMTString() 使用

    原代码:

    String dateStr = new Date().toGMTString();
    

    修改后:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String dateStr = sdf.format(new Date());
    

    📌 说明: Date.toGMTString() 在 Java 9 及以上版本中已被移除,因此需要替换为 SimpleDateFormatjava.time API。


    ✅ 总结与建议

    | 问题 | 解答 | |------|------| | LVL 是否只能本地引用? | ✅ 是的,目前不支持直接通过 build.gradle 引用,需手动集成 | | 能否像普通库一样依赖? | ❌ 不能,LVL 未发布到公共仓库 | | LVL 是否已过时? | ✅ 是的,建议使用 Play Licensing API | | 如何处理过时 API? | ✅ 需要修改 LicenseChecker.java 源码,替换为 BuildConfig.VERSION_CODESimpleDateFormat |


    📦 推荐替代方案:使用 Play Licensing API

    如果你正在开发新项目,强烈建议使用 Play Licensing API,而不是 LVL。

    ✅ 优点:

    • 基于 REST API,更安全
    • 支持更多功能(如验证用户是否购买了特定商品)
    • 更易维护和扩展

    🛠 实现步骤(简要):

    1. Google Play Console 中创建许可密钥
    2. 使用 LicensingService 调用 Play Store 的 REST API
    3. 在客户端进行验证逻辑

    📌 你可以参考官方文档:Play Licensing Overview


    🧩 示例代码(简化版)

    // 使用 Play Licensing API 的示例(伪代码)
    public void checkLicense() {
        String licenseKey = "YOUR_LICENSE_KEY";
        String packageName = getPackageName();
        String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
    
        // 调用 Play Store API 进行验证
        // 这里省略具体实现,建议使用官方 SDK 或自定义网络请求
    }
    

    ✅ 最终建议

    • 对于新项目:使用 Play Licensing API
    • 对于旧项目:如果必须使用 LVL,可以手动集成并修改过时 API
    • 避免使用 LVL 的旧版本(Rev 2),因为其已过时且不安全

    如有需要,我可以提供完整的 LicenseChecker.java 修改示例或 Play Licensing API 的集成代码。

    祝你周末愉快!如有更多问题,欢迎继续提问 😊

    评论

报告相同问题?

问题事件

  • 创建了问题 1月25日