我有许多Java库,可以在桌面Java环境和Android Java环境中使用。
我希望能够在Java库中集成某种基于Gradle的lint检查,以确保我不会使用Android上不可用的类/方法。我已经看到Android Lint实用程序可以检查这些内容(并输出最小的Android工具包将允许它工作)。
我知道拉动整个Android SDK会起作用,但如果没有那个在Android网络之外共享的较小的基础库,那么最好不要这样做。
这样做的一个原因是我想使用通过retrolambda提供的Java 8功能,但是在我使用之前SDK中不可用的API的持续集成时间会收到警告。
答案 0 :(得分:0)
Proguard似乎能够有效地完成所有引用的类的健全性检查。它做了很多其他我不需要它做的事情,但它可以配置为执行以下操作:
这允许我使用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)。