如何在Android项目中使用ThreeTenABP

我添加了这个问题,因为我是Java和Android的新手,并且我花了数小时试图弄清楚这一点。 答案来自于相关答案的组合,所以我想我会记录我为可能正在挣扎的其他人学到的东西。 见答案。

对于一些背景知识,我的经验主要是PHP中的Web开发和一点Ruby。 我唯一的操作系统是Linux(Ubuntu Studio),我正在(开发)在Android Studio 2.1.2中开发我的第一个Android应用程序。 我的Java安装如下:

>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

第一次发现:为什么必须使用ThreeTenABP而不是java.time ,ThreeTen Backport甚至Joda-Time

这是定义新标准的非常长的过程的一个非常短的版本。 所有这些包几乎都是一样的:为Java提供良好的现代时间处理功能的库。 差异很微妙但很重要。

最明显的解决方案是使用内置的java.time ,因为这是处理Java中的时间和日期的新标准方法。 它是JSR-310的实现,它是基于Joda-Time库的时间处理新标准提案。

然而, java.time是在Java 8中引入的。安卓到Marshmallow运行在Java 7上(“Android N”是第一个引入Java 8语言特性的版本)。 因此,除非你只针对Android N及以上版本,否则你不能依赖Java 8语言功能(我不确定这是否是100%真实的,但这是我的理解)。 所以java.time已经不存在了。

下一个选项可能是Joda-Time,因为JSR-310基于Joda-Time。 但是,正如ThreeTenABP自述文件所示,由于多种原因,Joda-Time不是最佳选择。

接下来是ThreeTen Backport,即Java 8 java.time包的(不完整)backport到Java 7.这对大多数用例来说都很好,但是,正如ThreeTenABP自述文件中所述,它具有Android的性能问题。

所以最后看似正确的选择是ThreeTenABP。

第二次发现:构建工具和依赖管理

由于编译程序 - 特别是使用一堆外部库 - 很复杂,Java几乎总是使用“构建工具”来管理该过程。 Make,Apache Ant,Apache Maven和Gradle都是与Java程序一起使用的构建工具(请参阅此文章以进行比较)。 如下所述,Gradle是Android项目的选择构建工具。

这些构建工具包括依赖管理。 Apache Maven似乎是第一个包含集中式软件包存储库的公司。 Maven的介绍Maven的中央仓库,允许的功能等同于PHP的composer与Packagist和红宝石的gem与rubygems.org。 换句话说,Maven Central Repository是Maven(和Gradle)Packagist的作曲者 - 一个为版本化软件包提供的权威和安全的源代码。

第三次发现:Gradle在Android项目中处理依赖关系

在我的待办事项清单上最重要的是阅读Gradle文档,包括他们的免费电子书。 如果我在几周前阅读过我开始学习Android时,肯定知道Gradle可以使用Maven Central Repository来管理Android项目中的依赖关系。 此外,正如这个StackOverflow答案中详细描述的那样,从Android Studio 0.8.9开始,Gradle通过Bintray的JCenter隐式使用Maven Central Repository,这意味着您无需执行任何额外配置即可设置回购 - 您只需列出依赖。

第四个发现:项目依赖项列在[project dir] /app/build.gradle中

同样,对于那些在Java中使用Gradle有经验的人也很明显,但我花了一段时间才弄清楚了这一点。 如果你看到有人说:“哦,只要添加compile 'this-or-that.jar' ”或类似的东西,就知道compile是build.gradle文件中指示编译时间依赖关系的指令。 这是关于依赖管理的官方Gradle页面。

第五个发现:ThreeTenABP由Jake Wharton管理,而不是由ThreeTen管理

还有一个问题,我花了太多时间找出答案。 如果你在Maven Central寻找ThreeTen,你只能看到threetenbp包,而不是threetenabp 。 如果你转到ThreeTenABP的github回购站,你会在自述文件的下载部分看到臭名昭着的compile 'this-or-that'行。

当我第一次打这个github repo时,我不知道这个编译行意味着什么,并且试图在我的终端中运行它(有明显的可预见的故障)。 沮丧的是,直到我把剩下的部分弄清楚之后,我才回到它,最后意识到这是一个指向com.jakewharton.threetenabp回购的Maven Repo系列,而不是org.threeten回购。 这就是为什么我认为ThreeTenABP软件包不在Maven回购中。

总结:使其工作

现在看起来很简单。 您可以通过确保[project folder]/app/build.gradle文件在其dependencies部分具有compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'行来获取Android项目中的现代时间处理函数:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "me.ahuman.myapp"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
}
链接地址: http://www.djcxy.com/p/36663.html

上一篇: How to use ThreeTenABP in Android Project

下一篇: declaring a startdate & endate using joda time?