我有许多Java库,它们的目标是同时在桌面Java环境和Android Java环境中使用。
我希望能够在Java库中集成某种基于Gradle的lint检查,以确保我不会使用Android上不可用的类/方法。我已经看到Android Lint实用程序可以检查这些东西(并输出允许它工作的最低Android工具包)。
我知道引入整个Android SDK是可行的,但最好是在较小的基础库上进行,这些库旨在在Android世界之外共享。
其中一个原因是,我希望使用可通过retrolambda使用的Java 8特性,但在持续集成时会被警告,我使用的API在以前的SDK中不可用。
发布于 2016-08-08 13:32:10
Proguard似乎能够有效地检查所有引用的类是否存在。它做了一大堆我不需要它做的事情,但是它可以被配置成做以下事情:
这让我可以使用Java8的特性进行编译,并确定它应该与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.jar。然而,没有引入Andorid SDK,Java6是一个很好的目标,对于非常旧的Android和Java7forAndroid SDK >= 4.4 (尽管缺少NIO2.0,可能还有其他API)。
https://stackoverflow.com/questions/38819601
复制相似问题