是否有可能從我的構建中去除喬達時間的時區文件?我只在發佈版本中使用1,在調試版本中使用2以在測試中使用。Android:Joda刪除時區原始文件
我的應用程序只在一個國家可用,減少2MB似乎是一個好主意讓我圍繞20MB標記。
是否有可能從我的構建中去除喬達時間的時區文件?我只在發佈版本中使用1,在調試版本中使用2以在測試中使用。Android:Joda刪除時區原始文件
我的應用程序只在一個國家可用,減少2MB似乎是一個好主意讓我圍繞20MB標記。
你可以得到Joda-Time's source code,然後你有一些選擇。
mvn clean package
)不要使用任何時區,它生成一個joda-time-2.9.9-no-tzdb.jar
文件,這是沒有任何時區數據的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");
這樣,例外情況消失了。
如果你想使用其他時區,而不是僅僅UTC其時區,有一個替代方案。
在pom.xml
文件中,查找compile-tzdb
執行並評論您不希望包含在jar中的文件。在這個例子中,我讓剛剛southamerica
文件:
<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> -->
然後構建它:
mvn clean package -Dmaven.test.skip=true
我跳過了測試,因爲他們中的一些使用了不是在南非時區美國文件(例如Europe/London
)。當然你也可以改變測試,如果你想,但我只是選擇了最快的方式(我通常不會跳過測試生產版本,不要判斷我)。
然後,joda-time-2.9.9.jar
文件將只包含南美洲時區文件。如果要包含同義詞(某些區域的名稱已更改,但舊名稱保留併成爲backward
文件中的同義詞),則可以選擇在文件中包含backward
文件。
由此產生的jar將只包含南美洲區域和UTC。如果JVM默認時區不是南美地區之一,則DateTimeZone.getDefault()
將返回UTC。
如果你想減少更多的區域文件,你可以手動編輯它們。但是,您必須小心,不要從要保留的時區中刪除重要數據。 Here's a tutorial關於IANA tz文件的格式。
請記住,刪除時區數據不是我會推薦的。所有的歷史數據都很重要,並且(幾乎)總是有一些時區在幕後操作。您必須進行大量測試,以確保它不會影響應用程序的任何方面(某些與日期相關的錯誤,特別是時區,可能會非常棘手且難以調試)。祝你好運!