Kaip naudoti „ThreeTenABP“ „Android“ projekte

Pridedu šį klausimą, nes esu naujas „Java“ ir „Android“, ir aš ieškojau laikrodžio, bandydamas jį išsiaiškinti. Atsakymas buvo gautas iš atitinkamų atsakymų derinio, todėl nusprendžiau dokumentuoti tai, ką sužinojau visiems, kurie gali kovoti. Žr. Atsakymas.

Dėl šiek tiek fono, mano patirtis daugiausia yra PHP žiniatinklio kūrimas ir šiek tiek Ruby. Mano vienintelė operacinė sistema yra „Linux“ („Ubuntu Studio“) ir aš (apgaulingai) sukuriu savo pirmą „Android“ programą „Android“ studijoje 2.1.2. Mano „Java“ sąranka yra tokia:

 >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) 
102
12 авг. nustatė kael 12 rug . 2016-08-12 19:36 '16 at 19:36 pm 2016-08-12 19:36
ответ 1 atsakymas

Pirmasis atradimas: kodėl jums reikia naudoti „ThreeTenABP“ vietoj „Java“, „ThreeTen-Backport“ ar net „Joda“ laiko

Tai labai trumpas labai ilgo PROCESO variantas, skirtas apibrėžti naują standartą. Visi šie paketai yra beveik tokie patys: bibliotekos, teikiančios gerą modernią „Java“ laiko tvarkymo funkciją. Skirtumai yra subtilūs, bet svarbūs.

Akivaizdžiausias sprendimas būtų naudoti „ java.time įdėtą paketą, nes tai yra naujas standartinis būdas tvarkyti laiką ir datas „Java“. Tai yra JSR 310 , kuris tapo nauju standartiniu pasiūlymu apdorojimo laikui pagal „ Joda-Time“ biblioteką, įgyvendinimas.

Tačiau „ Java“ 8 buvo įdiegta „ Java“ . „Android“ į „ Marshmallow“ veikia „Java 7“ („Android N“ yra pirmoji „Java 8“ funkcijų versija). Taigi, jei nesiekiate „ Android N Nugat“ ir naujesnės versijos , negalite pasikliauti „Java 8“ kalbos funkcijomis (nesu įsitikinęs, ar tai 100% tiesa, bet kaip suprantu). Taip veikia java.time .

Kitas variantas galėtų būti „ Joda-Time“ , nes JSR 310 buvo pagrįstas „Joda-Time“. Tačiau, kaip matyti iš „ ThreeTenABP“ pranešimo, dėl kelių priežasčių „Joda-Time“ nėra geriausias pasirinkimas.

Po to seka „ ThreeTen-Backport“ , kuri palaiko daugelį (bet ne visų) „Java“ Java funkcijų „Java 7“. Tai yra normalu daugumai naudojimo būdų, tačiau, kaip nurodyta „ readTimeTratABP“ , ji turi „Android“ našumo problemų.

Taigi paskutinė ir tariamai teisinga parinktis yra „ ThreeTenABP“ .

Antrasis atradimas: kurti įrankius ir priklausomybės valdymą

Kadangi programos sudarymas, ypač naudojant kelias išorines bibliotekas, yra sudėtingas, „Java“ beveik visada naudoja kūrimo įrankį procesui valdyti. „Make“ , „ Apache Ant“ , „ Apache Maven“ ir „ Gradle“ yra visi kūrimo įrankiai, naudojami su „Java“ programomis (žr. „ Šį pranešimą palyginimui“). Kaip nurodyta toliau, „Gradle“ yra pasirinktas „Android“ projektų kūrimo įrankis.

Šie kūrimo įrankiai apima priklausomybės valdymą. Atrodo, kad „Apache Maven“ yra pirmoji, kuri įgalina centralizuotą paketų saugyklą. Maven pristatė Maven centrinę saugyklą , kuri leidžia funkcionalumą, lygiavertį PHP composer su Packagist ir ruby gem su rubygems.org. Kitaip tariant, „Maven“ centrinė saugykla yra „Maven“ (ir „Gradle“), kad kompozitoriaus „Packagist“ yra pagrindinis ir saugus paketų versijų šaltinis.

Trečiasis atradimas: „Gradle“ valdo „Android“ projektų priklausomybę

Aukštas mano darbų sąraše, kad būtų galima perskaityti „Gradle“ dokumentus čia , įskaitant jų nemokamas e-knygas. Jei aš perskaičiau šias savaites, kai pradėjau mokytis „Android“, tikriausiai žinojau, kad „Gradle“ galėtų naudoti centrinę „Maven“ saugyklą, kad valdytų „Android“ projektų priklausomybę. Be to, kaip išsamiai aprašyta šiame atsakyme „StackOverflow“, kaip ir „Android“ studijoje 0.8.9, „Gradle“ netiesiogiai „Maven Central Repository“ naudoja „Bintray JCenter“, o tai reiškia, kad nereikia atlikti jokių papildomų nustatymų repo nustatymams - paprasčiausiai sąraše priklausomybės.

4 aptikimas: Projekto priklausomybės išvardytos [projekto direktorius] /app/build.gradle

Vėlgi, akivaizdu, kad tiems, kurie naudojasi „Gradle“ programine įranga „Java“, bet man reikėjo šiek tiek laiko. Jei matote žmones, compile 'this-or-that.jar' : „O, tiesiog pridėkite compile 'this-or-that.jar' “ar kažką panašaus, žinokite, kad compile yra„ build.gradle “direktyva, kuri nurodo kompiliavimo laiko priklausomybes. Čia yra oficialus „Gradle“ puslapis apie priklausomybės valdymą.

Penktasis atradimas: „ThreeTenABP“ valdo Jake Warton, o ne „ThreeTen“

Kita problema, kurią praleidžiau per daug laiko. Jei ieškote „ThreeTen“ „Maven Central“, pamatysite tik paketus, skirtus „ threetenbp , o ne „ threetenabp . Jei eisite į github retransliaciją „ThreeTenABP“ , pamatysite šią liūdnai sukauptą eilutę compile 'this-or-that' kurią „Readme“ skiltyje „Download“ („Atsisiųsti“) sudarys compile 'this-or-that' .

Kai pirmą kartą pateko į šią github saugyklą, aš nežinojau, ką reiškia ši kompiliacijos linija, ir aš bandžiau jį paleisti savo terminale (su akivaizdžiu ir nuspėjamu gedimu). Nusivylęs, aš com.jakewharton.threetenabp prie jo tol, kol nesupratau visa kita, ir pagaliau suprato, kad tai yra Maven Repo linija, nurodanti com.jakewharton.threetenabp , skirtingai nei org.threeten repo. Štai kodėl aš maniau, kad „ThreeTenABP“ paketas nebuvo „Maven“ saugykloje.

Santrauka: Užduotis

Dabar viskas atrodo gana paprasta. „Android“ projekte galite gauti modernias laiko tvarkymo funkcijas, užtikrindami, kad jūsų [project folder]/app/build.gradle compile 'com.jakewharton.threetenabp:threetenabp:1.0.3' , dependencies skiltyje:

 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' } 
97
12 авг. atsakymą pateikė kael 12 rug . 2016-08-12 19:36 '16 at 19:36 pm 2016-08-12 19:36

Kiti klausimai apie žymes arba Ask a question