2015-10-30 26 views
13

Sono in esecuzione Android 4.4.3 sul mio dispositivo e, naturalmente, si è superata fusi orari e sto cercando di aggiornare il tzdata in/system/usr/share/zoneinfo. Tuttavia, la sostituzione immediata del file non aggiorna il fuso orario.Tempo di aggiornamento Android dati della zona

Dal ICU conserva la propria copia dei dati del fuso orario che dobbiamo sostituire anche (secondo il team di Google AOSP). I file di dati aggiornati sono Update for ICU e Update for bionic

Tuttavia, quando costruire e sostituire il biblioteche icu4c (libicui18n.so e libicuuc.so) e sostituirlo con icudt51l.dat icudt53l.dat, il sistema non può inizializzare ICU .

Ho provato a decomprimere il file icudt53l.dat e a spingere i suoi file * .res all'interno del vecchio icudt51l.dat, ma ciò non è riuscito anche perché lo strumento ICUPKG controlla il checksum del file res prima di comprimerli.

ho seguito XDA link to update tzdata ma questo approccio non è riuscito perché creano zoneinfo.dat, zoneinfo.idx, zoneinfo.version file utilizzando tzdata. Ma il sistema cerca tzdata sé in/system/usr/share/zoneinfo

Non sono un fuso orario o un esperto di terapia intensiva, la prego di sottolineare me, se sto cercando nella direzione sbagliata e aiuto.

+0

Stai chiedendo di aggiornare os, icu o entrambi? –

+0

Desidero aggiornare solo Icu, ma se altri componenti del sistema operativo dipendono dalla versione ICU, non mi interessa aggiornare il sistema operativo. –

+0

Il [Aggiornamento dei dati del fuso orario] (http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data) dalla guida dell'utente ICU risponde alla domanda? –

risposta

4

Non è necessario aggiornare ICU o Bionic, è sufficiente modificare il file tzdata con quello aggiornato. Inoltre, non è necessario generare manualmente il file tzdata dai dati del fuso orario IANA. Puoi prendere lo tzdata già creato dallo bionic repo. È possibile trovare il file di aggiornamento sull'ultima versione di Fuso orario dati v. 2015g here.

Una volta scaricato il file di copia sul dispositivo (ad esempio /sdcard/Download/tzdata), quindi aprire una shell:

[email protected]:/ $ su 
[email protected]:/ $ setprop persist.sys.timezone Europe/Istanbul 
[email protected]:/ $ date -s 20151106.130000 
Fri Nov 6 13:00:00 EET 2015 
[email protected]:/ # mount -o rw,remount /system 
[email protected]:/ # cd /system/usr/share/zoneinfo/ 
[email protected]:/system/usr/share/zoneinfo # cp tzdata tzdata.bak 
[email protected]:/system/usr/share/zoneinfo # cp /sdcard/Download/tzdata tzdata 
[email protected]:/system/usr/share/zoneinfo # chmod 644 tzdata 
[email protected]:/system/usr/share/zoneinfo # date 
Fri Nov 6 14:00:47 EEST 2015 

Se dopo questo ancora non funziona:

[email protected]:/ # cd /data/misc/zoneinfo/ 
[email protected]:/data/misc/zoneinfo # cp tzdata tzdata.bak 
[email protected]:/data/misc/zoneinfo # cp /sdcard/Download/tzdata tzdata 
[email protected]:/data/misc/zoneinfo # chmod 644 tzdata 

Come si può vedere con il tzdata aggiornato il fuso orario dell'Europa/Istanbul il 6 novembre cambia da EET a EEST perché nel v. 2015g il ritiro della DST della Turchia si è spostato dal 25 ottobre all'8 novembre.

+0

+1 Ho già sostituito gli tzdata una dozzina di volte, ma non ho mai eseguito il comando data da adb. Ho notato che la data è tornata indietro di un'ora per Mosca, il che è corretto.Tuttavia, l'app Impostazioni mostrava GMT + 4 anziché GMT + 3. Ho cancellato dalvik-cache e ora mostra GMT + 3, non ci ho mai pensato prima. Sai quali chiamate di sistema dipendono dall'ICU? –

+1

Purtroppo non ho trovato un elenco di chiamate di sistema che dipendono dall'ICU. Ho provato a fare una rapida ricerca nella parte JAVA di Android Repos e l'unico riferimento al fuso orario della ICU sembra 'TimeZoneNames' in [ZoneGetter.java] (https://goo.gl/gkgOjv). In altri posti utilizza invece direttamente il file 'tzdata', ad esempio in [ZoneInfoDB.java] (https://goo.gl/KL5qlF) –