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

时间:2016-08-07 23:44:40

标签: java android gradle

我有许多Java库,可以在桌面Java环境和Android Java环境中使用。

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

我知道拉动整个Android SDK会起作用,但如果没有那个在Android网络之外共享的较小的基础库,那么最好不要这样做。

这样做的一个原因是我想使用通过retrolambda提供的Java 8功能,但是在我使用之前SDK中不可用的API的持续集成时间会收到警告。

1 个答案:

答案 0 :(得分:0)

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

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

这允许我使用Java 8功能进行编译,并确定它应该在Android上兼容 - 通过retrolambda或新的Jack编译器。

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

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.jar来定位最低兼容版本的Android。但是,如果没有引入Andorid SDK,Java 6就是真正适用于Android SDK和Java 7 for Android SDK> = 4.4的良好目标(虽然缺少NIO 2.0,可能还有其他API)。