Android – 如何在Android Project中使用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)

First Discovery:为什么你必须使用ThreeTenABP而不是java.timeThreeTen- Backport,甚至是Joda-Time

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

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

但是,java.timeJava 8中引入了。Android版Marshmallow在Java 7上运行(“Android N”是第一个引入Java 8语言功能的版本)。因此,除非你只针对Android N Nougat及以上版本,否则你不能依赖Java 8语言功能(我实际上并不确定这是100%真实,但这是我理解它的方式)。所以,java.time是的。

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

接下来是ThreeTen-Backport,它将Java 8的大部分功能(但不是全部)反向移植java.time到Java 7.这对于大多数用例来说都很好,但是,正如ThreeTenABP自述文件所示,它在Android上存在性能问题。

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

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

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

这些构建工具包括依赖项管理。Apache Maven似乎是第一个包含集中式软件包存储库的人。Maven引入了Maven Central Repository,它允许composer使用与Packagist和Ruby的Ruby相同的功能,gem使用rubygems.org。换句话说,Maven Central Repository对Maven(和Gradle)来说是Packagist的作曲家 – 版本化软件包的权威和安全来源。

第三次发现:Gradle处理Android项目中的依赖项

我的待办事项列表中的高点是阅读这里的Gradle文档,包括他们的免费电子书。如果我几周前开始学习Android时读过这篇文章,我肯定会知道Gradle可以使用Maven Central Repository来管理Android项目中的依赖项。此外,在详细描述这个 StackOverflow的答案,由于Android 0.8.9工作室的,摇篮使用Maven的中央仓库隐含通过Bintray的JCenter,这意味着你不必做任何额外的配置设置回购-你只是列出依赖。

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

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

第五次发现:ThreeTenABP由杰克沃顿管理,而不是由ThreeTen管理

还有一个问题我花了太多时间搞清楚。如果你在Maven Central寻找ThreeTen,你只会看到包threetenbp,而不是threetenabp。如果你去了ThreeTenABPgithub仓库,你会compile 'this-or-that'在自述文件的下载部分看到臭名昭着的行。

当我第一次点击这个github repo时,我不知道编译行是什么意思,我试图在我的终端中运行它(具有明显且可预测的失败)。很沮丧,直到我想出其余部分之后我才回到它身上,终于意识到它是指向com.jakewharton.threetenabp回购的Maven回购线,而不是org.threeten回购。这就是为什么我认为ThreeTenABP包不在Maven回购中。

总结:让它发挥作用

现在一切看起来都很简单。您可以通过确保您的[project folder]/app/build.gradle文件compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'在其dependencies部分中包含以下行来获取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 {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation 'com.android.support:appcompat-v7:23.4.0'
    implementation 'com.android.support:design:23.4.0'
    implementation 'com.jakewharton.threetenabp:threetenabp:1.0.3'
}

添加评论

友情链接:蝴蝶教程