【问题标题】:App works on Debug mode, but not work on Release mode应用程序在调试模式下工作,但在发布模式下不工作
【发布时间】:2018-07-31 16:15:40
【问题描述】:

我有一个应用程序,现在我要发布它。 我创建了一个 apk 文件并安装了它,但是当我向服务器发送登录请求时,它返回 null..

奇怪的是,当我使用调试构建启动我的应用程序时,它工作正常。 问题仅发生在发布模式。所以我在阅读this article后认为问题出在proguard

这是我到目前为止所做的。

  1. 添加了所有需要的 proguard 规则。 (改造、Okhttp3、Glide)- 没用。
  2. 在 Build 菜单中使用 [Build apk(s)] 创建一个 apk 并对其进行测试 - 工作正常,但处于调试状态。

任何帮助将不胜感激......

这是我的 build.gradle 文件。

defaultConfig {
    multiDexEnabled true       
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:design:$rootProject.supportLibraryVersion"
    implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:gridlayout-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:animated-vector-drawable:$rootProject.supportLibraryVersion"
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'       
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'     
    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'
    implementation 'com.squareup:otto:1.3.8'
    implementation 'com.github.nisrulz:recyclerviewhelper:26.0.0'
    implementation 'jp.wasabeef:recyclerview-animators:2.2.7'
    implementation 'com.github.ittianyu:BottomNavigationViewEx:1.2.4'
    implementation 'com.blankj:utilcode:1.9.6'
    implementation 'com.github.bumptech.glide:glide:4.3.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
    implementation 'com.j256.ormlite:ormlite-core:5.0'
    implementation 'com.j256.ormlite:ormlite-android:5.0'
    implementation 'io.github.luizgrp.sectionedrecyclerviewadapter:sectionedrecyclerviewadapter:1.1.3'
    implementation 'com.akexorcist:RoundCornerProgressBar:2.0.3'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'
    implementation 'com.daimajia.easing:library:2.0@aar'
    implementation 'com.daimajia.androidanimations:library:2.3@aar'
    implementation files('libs/opencsv-3.8.jar')
    implementation('tk.zielony:carbon:0.15.0.1') {
        exclude group: 'com.android.support', module: 'animated-vector-drawable'
        exclude group: 'com.android.support', module: 'gridlayout-v7'
    }       
    implementation 'com.github.QuadFlask:colorpicker:0.0.13'
    implementation 'com.android.support:multidex:1.0.2'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.7.3'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.7.3'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
    implementation 'com.liulishuo.filedownloader:library:1.6.9'
    implementation 'org.jsoup:jsoup:1.11.2'
    implementation project(':typekit')
    implementation 'com.loopj.android:android-async-http:1.4.9'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    compile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true;
    }
}

这是我的 proguard-rules.pro 文件。

-dontwarn com.google.android.gms.common.GooglePlayServicesUtil

-ignorewarnings
-keep class * {
    public private *;
}    
# Retrofit   
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain service method parameters.
-keepclassmembernames,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement    
# OkHttp 3    
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.    

# Glide

-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}

【问题讨论】:

  • 你在调试和发布模式下都指向同一个 URL 吗?
  • 禁用 proguard 并生成发布版本,然后尝试。如果它仍然不起作用,那么它可能不是proguard问题
  • 因为你错过了pro-gaurd中的一些libs规则,你可以去Build Variants --> 更改应用程序发布然后运行应用程序并检查日志,你会发现缺少的规则在你的职业选手中
  • 好吧,我尝试了没有 proguard 的发布版本,但仍然没有工作。无论如何,我发现了我的问题并解决了它!
  • 您与 Retrofit 一起使用哪个转换器?此外,这些行对我来说看起来很糟糕:-ignorewarnings, -keep class * { public private *; }

标签: android proguard android-proguard


【解决方案1】:

我犯了一个愚蠢的错误。

我错过了一项 proguard 规则。这是奥托巴士的。

-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

我只搜索了 github。没有关于proguard的部分。我在 Square 的博客上找到了它。

如果您的代码似乎受到proguard的影响,请检查两次并搜索更多!

【讨论】:

    【解决方案2】:

    我在 gradle.properties 中添加了以下行,之后它运行顺利。

    android.enableR8 = false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2019-02-14
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多