Android:Joda删除时区原始文件
是否有可能从我的构建中去除乔达时间的时区文件?我只在发布版本中使用1,在调试版本中使用2以在测试中使用。Android:Joda删除时区原始文件
我的应用程序只在一个国家可用,减少2MB似乎是一个好主意让我围绕20MB标记。
你可以得到Joda-Time's source code,然后你有一些选择。
当你构建项目(mvn clean package
)不要使用任何时区
,它生成一个joda-time-2.9.9-no-tzdb.jar
文件,这是没有任何时区数据的jar文件。使用这将需要一些改编:
- 使用此jar,唯一可用的时区是UTC。所以
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文件的格式。
请记住,删除时区数据不是我会推荐的。所有的历史数据都很重要,并且(几乎)总是有一些时区在幕后操作。您必须进行大量测试,以确保它不会影响应用程序的任何方面(某些与日期相关的错误,特别是时区,可能会非常棘手且难以调试)。祝你好运!