Android App可在调试状态下运行,但不能在版本中运行

时间:2018-11-19 00:01:49

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

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

  

E / AndroidRuntime:致命例外:GoogleApiHandler       流程:it.planner,PID:27326       java.lang.SecurityException:为了使用模拟模式功能应用程序,必须将它.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 / Android运行时:致命异常:主要       流程: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)           at..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'
        }
    }

1 个答案:

答案 0 :(得分:2)

此问题可能是由于未使用正确的API提交Fragment事务。尝试找到

transaction.commit();

并用

替换
transaction.commitAllowingStateLoss();

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