How to use ThreeTenABP in Android Project
我问这个问题是因为我是Java和Android的新手,我花了好几个小时试图解决这个问题。答案来自于相关答案的组合,所以我想我会记录下我为其他可能正在挣扎的人所学到的东西。见答案。
我正在使用Android Studio 2.1.2。我的Java设置如下:
1 2 3 4 | >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提供良好的、现代的时间处理功能的库。这些差异很细微,但很重要。好的。
最明显的解决方案是使用内置的EDCOX1×0封装,因为这是在Java中处理时间和日期的新标准方法。它是JSR 310的一个实现,这是一个基于Joda时间库的新的时间处理标准提案。好的。
然而,在Java 8中引入了EDCOX1 0。Android到棉花糖上运行在Java 7("Android N"是第一个引入Java 8语言特性的版本)。因此,除非你只针对Android NoGuAT和以上,否则你不能依赖Java 8语言特性(我不确定这是100%真的,但这就是我理解它的方式)。所以
下一个选项可能是joda time,因为jsr 310基于joda time。然而,正如threetenabp自述所指出的,出于许多原因,joda time不是最佳选择。好的。
接下来是三重后端,它将Java 8 EDCOX1 0功能的大部分(但不是全部)返回到Java 7。对于大多数用例来说,这是很好的,但是正如threetenabp自述中所指出的,它在Android中存在性能问题。好的。
所以最后一个看似正确的选择是三连胜。好的。第二个发现:构建工具和依赖关系管理
因为编译一个程序——尤其是使用一组外部库——是一个复杂的过程,Java几乎总是使用一个"构建工具"来管理这个过程。Apache、Apache Ant、Apache Maven和Gradle都是与Java程序一起使用的构建工具(参见此帖子进行比较)。如下文所述,Gradle是为Android项目选择的构建工具。好的。
这些构建工具包括依赖关系管理。ApacheMaven似乎是第一个包含集中式包存储库的软件。Maven引入了Maven中央存储库,它允许与PHP的
在我的待办事项列表中,最重要的是阅读这里的Gradle文档,包括他们的免费电子书。如果我在几周前开始学习Android的时候读到的话,我肯定知道Gradle可以使用Maven中央存储库来管理Android项目中的依赖关系。此外,正如这个stackoverflow答案中详细描述的,从android studio 0.8.9开始,Gradle通过bintray的jcenter隐式地使用maven中央存储库,这意味着您不必进行任何额外的配置来设置repo——只需列出依赖项即可。好的。第四个发现:项目依赖项列在[project dir]/app/build.gradle中
同样,对于那些在Java中使用Gealle有经验的人来说,这是显而易见的,但我花了很长时间才明白这一点。如果你看到有人说"哦,只需添加
还有一个问题我花了太多时间去弄清楚。如果你在马文中心找三个,你只能看到
当我第一次点击这个github repo时,我不知道编译行的意思,我试图在我的终端中运行它(有一个明显的和可预测的失败)。我很沮丧,直到很长一段时间我才回到这个话题上,最后我意识到这是一条指向
现在看来一切都很简单。通过确保您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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' } |
好啊.