Première Découverte: Pourquoi Vous devez Utiliser ThreeTenABP au Lieu de java.temps, ThreeTen-Backport, ou même Joda-Time
C'est vraiment une version courte de la TRÈS LONG PROCESSUS de définition d'un nouveau standard. Tous ces packages sont à peu près la même chose: les bibliothèques qui offrent un bon, à l'époque moderne fonctionnalité de gestion pour Java. Les différences sont subtiles, mais importantes.
La solution la plus évidente serait d'utiliser le haut- java.time
forfait, puisque c'est le nouveau standard de la façon de traiter avec le temps et les dates en Java. C'est une implémentation de la JSR 310, qui a été un nouveau projet de norme pour la gestion du temps basé sur le Joda-Time de la bibliothèque.
Toutefois, java.time
a été introduite dans Java 8. Android jusqu'à la Guimauve s'exécute sur l'île de Java 7 ("Android N" est la première version d'introduire Java 8 fonctionnalités de langage). Donc, sauf si vous êtes seulement en ciblant Android N Nougat et au-dessus, vous ne pouvez pas compter sur Java 8 fonctionnalités de la langue (je ne suis pas vraiment sûr que c'est 100% vrai, mais c'est la façon dont je le comprends). Donc, java.time
.
L'option suivante peut être Joda-Time, depuis JSR 310 a été basée sur Joda-Time. Cependant, comme le ThreeTenABP readme indique que, pour un certain nombre de raisons, Joda-Time n'est pas la meilleure option.
La prochaine est ThreeTen-Backport, arrière-ports beaucoup (mais pas tous) de Java 8 java.time
de la fonctionnalité de Java 7. C'est très bien pour la plupart des cas, mais, comme indiqué dans le ThreeTenABP readme, il a des problèmes de performances avec Android.
Ainsi, la dernière et apparemment correcte option est ThreeTenABP.
Deuxième Découverte: Outils de construction et de Gestion de la Dépendance
Depuis la compilation d'un programme-en particulier à l'aide d'un tas de bibliothèques externes -- est complexe, Java presque invariablement utilise un "outil" pour gérer le processus. Faire, Apache Ant, Apache Maven, et Gradle sont tous les outils de construction qui sont utilisés avec des programmes Java (voir ce post pour les comparaisons). Comme indiqué plus bas, Gradle est choisie outil de construction pour Android des projets.
Ces outils comprennent la gestion de la dépendance. Apache Maven semble être le premier à inclure une centralisation de dépôt de paquets. Maven a introduit le Dépôt Central de Maven, ce qui permet des fonctionnalités équivalentes à php composer
avec Packagist et de Rubis gem
avec rubygems.org. En d'autres termes, le Dépôt Central de Maven est à Maven (et Gradle) ce Packagist est-à-compositeur -- définitive et sûre source pour de version des paquets.
Troisième Découverte: Gradle Gère les Dépendances dans les Projets Android
En haut de ma liste à faire est de lire le Gradle docs ici, y compris leurs eBooks gratuits. Si j'avais lu ces semaines quand j'ai commencé à apprendre Android, je l'aurait sûrement connu que Gradle pouvez utiliser le Dépôt Central de Maven pour gérer les dépendances dans Android des Projets. En outre, comme détaillé dans ce StackOverflow réponse, comme d'Android Studio 0.8.9, Gradle utilise Maven Central Référentiel implicitement à travers Bintray de JCenter, ce qui signifie que vous n'avez pas à faire toute supplémentaire config pour configurer le repo-vous juste la liste des dépendances.
Quatrième de Découverte: les Dépendances d'un Projet Sont Énumérés dans le [projet dir]/app/build.gradle
Encore une fois, évident pour ceux qui ont une expérience d'utilisation de Gradle en Java, mais il m'a fallu un certain temps pour comprendre cela. Si vous voyez des gens qui disent "Oh, il suffit d'ajouter compile 'this-or-that.jar'
" ou quelque chose de similaire, à savoir qu' compile
est une directive dans ce build.gradle fichier qui indique au moment de la compilation des dépendances. Voici l'officiel Gradle page sur la gestion de la dépendance.
Cinquième de la Découverte: ThreeTenABP Est Géré par Jake Wharton, pas par ThreeTen
Encore une autre question j'ai passé trop de temps à essayer de comprendre. Si vous recherchez ThreeTen dans Maven Central, vous ne pourrez voir que les paquets pour threetenbp
, pas threetenabp
. Si vous allez sur le dépôt github pour ThreeTenABP, vous verrez que infâme compile 'this-or-that'
ligne sous la section Téléchargement de ce fichier.
Quand j'ai touché ce dépôt github, je ne savais pas ce que la ligne de compilation, et j'ai essayé dans mon terminal (avec une évidente et prévisible échec). Frustré, je n'ai pas de retour jusqu'à ce que longtemps après que j'ai compris le reste, et finalement rendu compte que c'est un Repo Maven ligne pointant vers l' com.jakewharton.threetenabp
repo, par opposition à l' org.threeten
des pensions. C'est pourquoi j'ai pensé à la ThreeTenABP paquet n'était pas dans le repo Maven.
Résumé: pour le Faire fonctionner
Maintenant, tout cela semble assez facile. Vous pouvez obtenir des temps modernes de la manipulation des fonctions dans un projet Android en vous assurant que votre [project folder]/app/build.gradle
le fichier a l' compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
ligne dans son dependencies
section:
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'
}