【问题标题】:How to add 'joda-time' library to Android application?如何将“joda-time”库添加到 Android 应用程序?
【发布时间】:2014-07-31 07:52:57
【问题描述】:

我已将“joda-time”库(2.3 版)添加到我的 Android 应用程序中。我用它来获取DateTimeFormatter类如下:

DateTimeFormatter myDateTimeFormatter = ISODateTimeFormat.dateTimeNoMillis();

在开发期间从 Eclipse 中构建和运行我的应用程序时,这可以正常工作。

但是,当我使用一些使用aapt 的构建脚本构建我的应用程序以进行发布时,上面的代码行会导致下面粘贴的IOException。问题是找不到“joda-time”库中的ZoneInfoMap 文本文件。 (这不是.class 文件。)

问题是:为什么在使用 Eclipse 构建我的 apk 时会包含它,而在使用 aapt 命令行工具构建我的 apk 时却不包含它?以及如何引用“joda-time”库以便保留此资源? Proguard 已禁用,因此这不是 proguard 问题。

06-10 13:00:59.124:E/AndroidRuntime(28922):致命异常:main

06-10 13:00:59.124: E/AndroidRuntime(28922): java.io.IOException: 找不到资源:“org/joda/time/tz/data/ZoneInfoMap”类加载器: dalvik.system.PathClassLoader[dexPath=/data/app/com.example.app.apk,libraryPath=/data/app-lib/com.example.app]

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.tz.ZoneInfoProvider.openResource(ZoneInfoProvider.java:212)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.tz.ZoneInfoProvider.(ZoneInfoProvider.java:123)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.tz.ZoneInfoProvider.(ZoneInfoProvider.java:82)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.DateTimeZone.getDefaultProvider(DateTimeZone.java:490)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.DateTimeZone.setProvider0(DateTimeZone.java:444) 06-10

13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.DateTimeZone.(DateTimeZone.java:116) 06-10

13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.format.DateTimeFormatter.withZoneUTC(DateTimeFormatter.java:301)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.format.ISODateTimeFormat$Constants.localDateParser(ISODateTimeFormat.java:1226)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.format.ISODateTimeFormat$Constants.(ISODateTimeFormat.java:1203)

06-10 13:00:59.124: E/AndroidRuntime(28922): 在 org.joda.time.format.ISODateTimeFormat.dateTimeNoMillis(ISODateTimeFormat.java:733)

...

【问题讨论】:

  • 您是否将其作为库添加到构建路径中(假设 Eclipse 没有将其作为私有库单独添加),在这种情况下您需要将 Order 和 Export 设置为 true?

标签: android adt jodatime aapt


【解决方案1】:

我的猜测是您的生产包是使用不同的 ProGuard 设置构建的,这些设置正在剥离提到的类。尝试使用 -keep option 将其包含在 apk 中。

【讨论】:

  • 对不起,我应该提到,这不是一个proguard问题。在 Elcipse 和 aapt 的构建过程中,Proguard 被禁用。
【解决方案2】:

在 Eclipse 中,右键单击 jar 并选择“添加到构建路径”。只是为了确保它正常工作,右键单击项目 -> 属性 -> 构建路径 -> 库。 jar 现在应该与您的其余依赖项一起显示在那里。

【讨论】:

    【解决方案3】:

    看起来这个问题是我正在使用的构建脚本所特有的。在构建过程中,只有.class 文件从我引用的.jar 库进入应用程序包(apk)。为了解决这个问题,我不得不更改我们的构建脚本以复制非.classs 文件。这是从 Eclipse 构建时默认发生的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2017-01-01
      • 1970-01-01
      相关资源
      最近更新 更多