如何在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