Androidの自動時刻同期に関する問題のトラブルシューティング

「MSDタイムゾーンをMSKに移動-ローカルスケールの新しいY2K」という記事を読んだ後、この問題をAndroid(HTC Hero)で既に解決しており、サンドボックスに書き込みたいと思っていたことを思い出しましたが、後で延期しました。 そして今日、別の記事「Androidでのタイムゾーンの更新」があり、執筆のアイデアほとんど埋めて、重要なことは後まで延期すべきではないというアイデアを確認しました。 しかし...少し思い出した後、これらの記事では冬/夏時間への移行に関連する問題が考慮され、天気と時計オペレーターの操作に関する時間とモバイルオペレーターによる時間の自動決定に関する瞬間がまったく扱われていなかったため、私はそれにもかかわらず決定しました。

それはすべて、新しいHTC Desire S電話が購入されたという事実から始まりました。

設定の過程で、日付と時刻の設定では、ノボシビルスクという都市を選択する方法がなく、適切なタイムゾーンを持つ代替都市を選択する必要があることがわかりました。
また、オペレーターからの時刻の同期がなんとなく不可解に機能し、天気表示モードのHTC Clockウィジェットとオンになっている自動同期が間違った時刻を表示することも判明しました。



写真はすべてが正常に見えますが、実際には1時間前に電話で時間が流れました。 自動検出をオフにして手動でゾーンを設定できますが、次のようになります。



ご覧のとおり、ノボシビルスクはリストにありません。 電話のシステム時間が正しくなったときにバンコクを選択する必要がありましたが、ウィジェットはまだ1時間前に表示されます。

ネットワーク上で解決策を見つけようとしました。 私たちは私たちだけではなく、ノボシビルスクの住民だけでなく、地球上の他の都市の住民にも同様の問題が存在することがわかりました。 これらすべての問題に対する包括的な解決策は見つかりませんでした。

ウィジェットに注意を払わずに、得点、切断、ハンドを設定することは可能でしたが、これは... Androidです。

そして、私たちは始めます

新しい電話は当時は定型ではなく、そのようにすることはできませんでした。 したがって、実験のために、HTC Heroは元のファームウェア+ root / busybox / apps2sdを使用して撮影されましたが、まったく同じ問題がありました。

osmonitorを介して、タイムゾーンが選択されているアプリケーションが見つかりました-(com.android.settings)。 com.android.settingsパッケージのソースコードを調べたところ、リソースがXMLファイルtimezones.xmlからロードされていることがわかりました。

次のコマンドを使用して、このアプリケーションのapk /system/app/Settings.apkを取得しました
 adb pull /system/app/Settings.apk 


APKマネージャーとAndroid SDKツールの動作の詳細をすべて説明するわけではありません。興味のある人は簡単に理解できると思います。 重要な点のみを説明します。

APKマネージャーを使用して、次のアクションが実行されました。

同様に、他の都市の居住者も携帯電話でこの問題を解決できるようになります。

結果のapkは電話に戻されました:
  adb push Settings.apk / system / app / 


これにより、タイムゾーンの手動選択リストにノボシビルスクが登場したという事実を達成しました。

私たちの都市がリストに表示されましたが、自動モードでのタイムゾーンの定義は依然として正しく機能しませんでした。 これを行うために、さらに進んで、都市のタイムゾーン設定がデータベース、つまり/system/etc/WPDB.zipファイルに保存されていることがわかりました。
同じadbを使用して電話から取り出した後、そこから2つのベースを抽出しました

それぞれ英語とロシア語。 データを見ると、私たちの都市のタイムゾーンはAsia / Almatyとして登録されていたため、この瞬間を修正する必要がありました。このため、データベースでtimezoneIdをAsia / Novosibirskに変更しました(SQLiteデータベースのエディターとしてLitaを使用しました):
ロケーションリストの更新timezoneId = 'Asia / Novosibirsk' where name = 'Novosibirsk'-(WP_0409WWE.dbの場合)
ロケーションリストを更新しますtimezoneId = 'Asia / Novosibirsk' where name = 'Novosibirsk'-(WP_0419RUS.dbの場合)

さらに、私たちの都市に関するエントリが別のデータベース、つまり/system/etc/timezones.dbに追加されました
レコード、timezoneIdを追加:Asia / Novosibirsk、その他のフィールドNovosibirsk、ru-Novosibirsk。

すべての変更を有効にするには、アプリケーションのキャッシュをリセットします
時計、設定、および天気プロバイダー。 さて、完全な確実性のために、電話を再起動しました。

まとめ


その結果、これらのパイを入手しました。

ご覧のとおり、自動モードではゾーンが正しく決定され、ウィジェットのシステム時刻と時刻は同じです。まあ、手動モードではすべてが順調です。

時間とともに戦争に巻き込まれたので、私たちは最後に行くことにしました。 つまり、冬時間/夏時間への移行をキャンセルする問題を解決します。
最新のtzdata(別名timeinfo.dat)を利用可能なリソースelsie.nci.nih.gov/pubからダウンロードしました
彼らは、その中に私たちのことをまだ考えていない、修正し、準備し、電話に注ぎ込んでいることに気付いた。 執筆時点では、このデータベースにはすでに広大な国の正しい設定が含まれています。この問題を解決する方法については、記事「Androidでのタイムゾーンの更新」を参照してください

結論として、使用したツールのリストを示します。

時間を無駄にしないでください。この情報が誰かに役立つことを願っています。

追伸 公開後、偶然、新しい都市HTC Senseと天気ウィジェットの追加について説明している記事を発見しました。この都市と少し重複した都市を追加します

Source: https://habr.com/ru/post/J131320/


All Articles