首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android上添加Java库兼容性的持续集成检查?

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

Stack Overflow用户
提问于 2016-08-08 07:44:40
回答 1查看 114关注 0票数 2

我有许多Java库,它们的目标是同时在桌面Java环境和Android Java环境中使用。

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

我知道引入整个Android SDK是可行的,但最好是在较小的基础库上进行,这些库旨在在Android世界之外共享。

其中一个原因是,我希望使用可通过retrolambda使用的Java 8特性,但在持续集成时会被警告,我使用的API在以前的SDK中不可用。

EN

回答 1

Stack Overflow用户

发布于 2016-08-08 13:32:10

Proguard似乎能够有效地检查所有引用的类是否存在。它做了一大堆我不需要它做的事情,但是它可以被配置成做以下事情:

  • 采用输入jar /类路径(新编译的Java库)
  • 不需要输出jar(不需要保存优化/模糊的版本)
  • 采用一组输入库来解析引用
    • 允许Java7的运行库用作基础jar

这让我可以使用Java8的特性进行编译,并确定它应该与Android兼容-无论是通过retrolambda还是新的Jack编译器。

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

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38819601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档