2017-09-04 5 views
1

Joda-Timeのタイムゾーンファイルをビルドから削除することはできますか?私はリリースビルドでは1、テストではデバッグビルドでは2を使用しています。Android:Jodaタイムゾーンの生ファイルを削除する

私のアプリは1カ国でしか利用できません.2MBの削減は、20MBのマークの周りに私を得るよい考えのようです。

答えて

0

Joda-Time's source codeが表示され、いくつかの選択肢があります。


プロジェクト(mvn clean package)を構築する場合、それは任意のタイムゾーンデータのないjarファイルであるjoda-time-2.9.9-no-tzdb.jarファイルを生成し、任意の時間帯に

を使用しないでください。これを使用するには、いくつかのアダプテーションが必要です:

  1. このjarを使用すると、唯一の利用可能なタイムゾーンはUTCです。したがってDateTimeZone.getAvailableIDs()DateTimeZone.getDefault()はUTCを返します。他のタイムゾーンの間で変換することはできません。これは、UTCが利用可能な唯一のタイムゾーンです。
  2. いくつかのメソッドを呼び出すと、例外がいくつか発生しています(Resource not found: "org/joda/time/tz/data/ZoneInfoMap")。それを取り除くには、デフォルトのタイムゾーンプロバイダをUTCに設定する必要がありました。

    System.setProperty("org.joda.time.DateTimeZone.Provider", "org.joda.time.tz.UTCProvider"); 
    

    このようにして例外がなくなりました。


あなたが別のタイムゾーンだけではなく、UTCを使用したい場合は、代替があります

をしたいタイムゾーンいる選択してください。

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ファイルの形式について説明します。

タイムゾーンデータを削除することはお勧めできません。歴史的なデータはすべて重要であり、いつもタイムゾーンが背後で(ほとんどの場合)機能しています。アプリケーションのあらゆる側面に影響しないことを確認するためには、多くのテストを行う必要があります(タイムゾーンを含む日付関連のエラーの一部は、扱いにくく、デバッグが難しい場合があります)。がんばろう!

関連する問題