java - 使用 Joda Time 时无法生成启用了混淆器的签名 APK

标签 java android gradle proguard jodatime

我试图构建一个签名的 APK。我也在使用 proguard。在我的应用程序中,我出于某些目的使用了 JodaTime。我在那里使用了 joda-time-2.7.jar。首先,我可以在不启用 proguard 的情况下获得签名的 APK,没有任何错误。然后我启用了 proguard 并尝试生成 APK,但它生成了错误。以下是生成的错误。

Warning:org.joda.time.LocalDateTime: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.LocalTime: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.LocalTime: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.Minutes: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Minutes: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.MonthDay: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.MonthDay: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.Months: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Months: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.MutableDateTime: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.MutablePeriod: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Period: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Seconds: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Seconds: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.Weeks: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Weeks: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.YearMonth: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.YearMonth: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.Years: can't find referenced class org.joda.convert.FromString
Warning:org.joda.time.Years: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.base.AbstractDateTime: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.base.AbstractDuration: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.base.AbstractInstant: can't find referenced class org.joda.convert.ToString
Warning:org.joda.time.base.AbstractPeriod: can't find referenced class org.joda.convert.ToString
Warning:there were 37 unresolved references to classes or interfaces.
     You may need to add missing library jars or update their versions.
     If your code works fine without the missing classes, you can suppress
     the warnings with '-dontwarn' options.
     (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Exception while processing task java.io.IOException: Please correct the above warnings first.
  at proguard.Initializer.execute(Initializer.java:473)
  at proguard.ProGuard.initialize(ProGuard.java:233)
  at proguard.ProGuard.execute(ProGuard.java:98)
  at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
  at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:139)
  at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:115)
  at com.android.builder.tasks.Job.runTask(Job.java:48)
  at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
  at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227)
  at java.lang.Thread.run(Thread.java:745)

下面是我的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.theacetechnologies.voicetype"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile files('libs/joda-time-2.7.jar')
}

知道为什么在启用 proguard 时我无法生成签名的 APK 吗?我相信这也与 Joda Time 有关,因为我之前在没有 JODA time 的情况下生成了启用混淆器的签名 APK。

最佳答案

将这些行添加到您的 proguard 文件中

-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *;}

关于java - 使用 Joda Time 时无法生成启用了混淆器的签名 APK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421552/

相关文章:

java - 我如何强制一个特定的 JTextArea 不使用抗锯齿,同时在我的应用程序的其余部分保持开启?

java - 未识别 Apache Camel 路线

java - java中比较器的接口(interface)实现

android - map 刷新问题 mapview.invalidate() method is not working

android - 无法解析符号 ColorStateList

java - Maven 需要额外的依赖来构建项目,而 Gradle 不需要

java - 使用 netty 的 writeandflush() 向客户端发送 JSON 数据,显示无效的 JSON 类型

android - 将纯文本作为 POST 正文发送会导致改造出现问题

android - Gradle 中的多个 Maven 存储库

gradle - build.gradle 配置中的星号 '*' 是什么意思?