gpt4 book ai didi

java - 如何在 Android 上添加 Java 库兼容性的持续集成检查?

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:22 26 4
gpt4 key购买 nike

我有许多 Java 库,旨在用于桌面 Java 环境和 Android Java 环境。

我希望能够在 Java 库中集成某种基于 Gradle 的 lint 检查,以确保我不会使用 Android 上不可用的类/方法。我已经看到 Android Lint 实用程序可以检查此类内容(并输出允许其工作的最低 Android 套件)。

我知道引入整个 Android SDK 是可行的,但最好不要在打算在 Android 世界之外共享的较小基础库上进行此操作。

其中一个原因是我想使用可通过 Retrolambda 获得的 Java 8 功能,但在持续集成时会收到警告,我使用的 API 在之前的 SDK 中不可用。

最佳答案

Proguard 似乎能够有效地检查所有引用的类是否存在。它做了很多我不需要它做的其他事情,但它可以配置为执行以下操作:

  • 获取输入 jar/classpath(新编译的 Java 库)
  • 不需要输出 jar(无需保存优化/混淆版本)
  • 采用一组输入库来解析引用
    • 允许使用 Java 7 的运行时库作为基础引用

这使我能够使用 Java 8 功能进行编译,并且可以合理地确定它应该在 Android 上兼容 - 通过 Retrolambda 或新的 Jack 编译器。

使用 Proguard 进行此用途的 Gradle 部分:

buildscript {
dependencies {
classpath 'net.sf.proguard:proguard-base:5.2.1'
}
}

task proguardCheck(type: proguard.gradle.ProGuardTask, dependsOn: assemble) {
injars project.jar.archivePath
libraryjars files(System.getenv("JAVA7_HOME") + "/jre/lib/rt.jar")
libraryjars files(System.getenv("JAVA7_HOME") + "/jre/lib/jce.jar")
libraryjars files(configurations.compile)
// Don't really try to do anything, we just want this tool for it's bytecode lint
dontshrink
dontobfuscate
dontoptimize
// Don't fail if LambdaMetafactory is missing - it would be handled by Retrolambda / Jack
dontwarn 'java.lang.invoke.LambdaMetafactory'
}

兼容性的有力保证是引用给定的目标 Android 最低兼容版本的 android.jar。然而,如果不引入 Andorid SDK,Java 6 对于真正旧的 Android 来说是一个很好的目标,对于 Android SDK >= 4.4 来说,Java 7 是一个很好的目标(尽管 NIO 2.0 缺失,可能还有其他 API)。

关于java - 如何在 Android 上添加 Java 库兼容性的持续集成检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38819601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com