Joda-Timeのタイムゾーンファイルをビルドから削除することはできますか?私はリリースビルドでは1、テストではデバッグビルドでは2を使用しています。Android:Jodaタイムゾーンの生ファイルを削除する
私のアプリは1カ国でしか利用できません.2MBの削減は、20MBのマークの周りに私を得るよい考えのようです。
Joda-Timeのタイムゾーンファイルをビルドから削除することはできますか?私はリリースビルドでは1、テストではデバッグビルドでは2を使用しています。Android:Jodaタイムゾーンの生ファイルを削除する
私のアプリは1カ国でしか利用できません.2MBの削減は、20MBのマークの周りに私を得るよい考えのようです。
Joda-Time's source codeが表示され、いくつかの選択肢があります。
mvn clean package
)を構築する場合、それは任意のタイムゾーンデータのないjarファイルであるjoda-time-2.9.9-no-tzdb.jar
ファイルを生成し、任意の時間帯にを使用しないでください。これを使用するには、いくつかのアダプテーションが必要です:
DateTimeZone.getAvailableIDs()
とDateTimeZone.getDefault()
はUTCを返します。他のタイムゾーンの間で変換することはできません。これは、UTCが利用可能な唯一のタイムゾーンです。いくつかのメソッドを呼び出すと、例外がいくつか発生しています(Resource not found: "org/joda/time/tz/data/ZoneInfoMap"
)。それを取り除くには、デフォルトのタイムゾーンプロバイダをUTCに設定する必要がありました。
System.setProperty("org.joda.time.DateTimeZone.Provider", "org.joda.time.tz.UTCProvider");
このようにして例外がなくなりました。
をしたいタイムゾーンいる選択してください。
pom.xml
ファイルでは、compile-tzdb
の実行を探して、jarに含めたくないファイルをコメントします。そのうちのいくつかは、南にはないタイムゾーンを使用していますので、私はテストをスキップしてい
mvn clean package -Dmaven.test.skip=true
:その後でそれを構築
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>compile-tzdb</id>
... lots of lines ...
<!-- Commenting the TZ files I don't want -->
<!-- <argument>africa</argument> -->
<!-- <argument>antarctica</argument> -->
<!-- <argument>asia</argument> -->
<!-- <argument>australasia</argument> -->
<!-- <argument>europe</argument> -->
<!-- <argument>northamerica</argument> -->
<argument>southamerica</argument>
<!-- <argument>pacificnew</argument> -->
<!-- <argument>etcetera</argument> -->
<!-- <argument>backward</argument> -->
<!-- <argument>systemv</argument> -->
:この例では、私はちょうどsouthamerica
ファイルを維持していますアメリカのファイル(Europe/London
など)。もちろん、テストを変更することもできますが、私はちょうど最速の方法を選択しました(私は通常プロダクションビルドのテストをスキップしません、私を判断しないでください)。
次に、joda-time-2.9.9.jar
ファイルには、南米のタイムゾーンファイルのみが含まれます。シノニムを含める場合は、backward
ファイルをビルドにオプションで含めることができます(一部のゾーンの名前は変更されましたが、古い名前は維持され、backward
ファイルの同義語になりました)。
これで、結果のjarファイルには南米のゾーンとUTCのみが含まれます。 JVMのデフォルトタイムゾーンが南アメリカのタイムゾーンでない場合、DateTimeZone.getDefault()
はUTCを返します。
ゾーンファイルをさらに減らしたい場合は、手動で編集できます。しかし、あなたが保持したいタイムゾーンから重要なデータを削除しないように注意する必要があります。 Here's a tutorialについては、IANAのtzファイルの形式について説明します。
タイムゾーンデータを削除することはお勧めできません。歴史的なデータはすべて重要であり、いつもタイムゾーンが背後で(ほとんどの場合)機能しています。アプリケーションのあらゆる側面に影響しないことを確認するためには、多くのテストを行う必要があります(タイムゾーンを含む日付関連のエラーの一部は、扱いにくく、デバッグが難しい場合があります)。がんばろう!