【问题标题】:Android App works in debug but not in releaseAndroid 应用程序在调试中工作,但在发布时不工作
【发布时间】:2018-11-19 00:01:48
【问题描述】:

我正在开发一个 Android 应用,当我在发布模式下运行该应用时遇到问题。如果我在 debug 模式下启动应用程序,我会在 Logcat 中收到此类消息(应用程序无法启动):

E/AndroidRuntime:致命异常:GoogleApiHandler 进程:it.planner,PID:27326 java.lang.SecurityException:为了使用模拟模式功能应用程序必须选择 it.planner 作为模拟位置 开发人员设置中的应用程序。 在 android.os.Parcel.readException(Parcel.java:2008) 在 android.os.Parcel.readException(Parcel.java:1954) 在 com.google.android.gms.internal.zzeu.zzb(未知来源:10) 在 com.google.android.gms.internal.zzcfa.zzbj(未知来源:9) 在 com.google.android.gms.internal.zzcfd.zzbj(未知来源:13) 在 com.google.android.gms.internal.zzcfk.zzbj(未知来源:2) 在 com.google.android.gms.internal.zzcee.zza(未知来源:4) 在 com.google.android.gms.common.api.internal.zzm.zzb(未知来源:8) 在 com.google.android.gms.common.api.internal.zzc.zza(未知来源:6) 在 com.google.android.gms.common.api.internal.zzbo.zzb(未知来源:9) 在 com.google.android.gms.common.api.internal.zzbo.zzaiw(未知 资料来源:82) 在 com.google.android.gms.common.api.internal.zzbo.onConnected(未知 来源:16) 在 com.google.android.gms.common.internal.zzac.onConnected(未知 来源:2) 在 com.google.android.gms.common.internal.zzn.zzakr(未知来源:130) 在 com.google.android.gms.common.internal.zze.zzw(未知来源:64) 在 com.google.android.gms.common.internal.zzi.zzaks(未知来源:51) 在 com.google.android.gms.common.internal.zzh.handleMessage(未知 来源:270) 在 android.os.Handler.dispatchMessage(Handler.java:109) 在 android.os.Looper.loop(Looper.java:166) 在 android.os.HandlerThread.run(HandlerThread.java:65) E/iMonitor: FaultDetect: DUMPTOOL_PRINTF 返回。

显然,如果我在开发者选项中选择模拟位置,应用程序就会启动并且工作正常

如果我安装 release apk 并尝试启动应用程序,应用程序无法启动并且我在 Logcat 中收到这种消息:

E/AndroidRuntime: 致命异常: main 进程:it.planner,PID:29448 java.lang.IllegalStateException:onSaveInstanceState 后无法执行此操作 在 android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2054) 在 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2077) 在 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:678) 在 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:632) 在 it.planner.Home.mainMenu(Home.java:374) 在 it.planner.Home.computeGeolocation(Home.java:487) 在它..planner.Home.access $100(Home.java:80) 在 it.planner.Home$3$1.onLocationResult(Home.java:344) 在 com.google.android.gms.internal.zzcff.zzu(未知来源:4) 在 com.google.android.gms.common.api.internal.zzci.zzb(未知来源:8) 在 com.google.android.gms.common.api.internal.zzcj.handleMessage(未知 来源:16) 在 android.os.Handler.dispatchMessage(Handler.java:109) 在 android.os.Looper.loop(Looper.java:166) 在 android.app.ActivityThread.main(ActivityThread.java:7377) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)

一旦应用处于发布模式,就无法选择模拟位置,因此它不想启动。我已经处理这个问题很多天了。我也尝试在 Gradle 文件中使用 minifyEnabled false,但它不起作用。

gradle文件如下:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            debuggable true
        }
    }
    sourceSets {
        main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] }
        debug {
            manifest.srcFile 'src/main/AndroidManifest.xml'
        }
    }

【问题讨论】:

  • build.gradle 无关紧要。 Home.java374 行说什么??

标签: android android-studio android-fragments android-gradle-plugin


【解决方案1】:

这个问题可能是因为片段事务没有使用正确的 API 提交。试着找

transaction.commit();

替换成

transaction.commitAllowingStateLoss();

更多讨论在这里:https://github.com/OneBusAway/onebusaway-android/issues/529#issuecomment-224974339

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2020-11-08
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多