我正在开发一个 Android 应用程序,但在 Release模式下运行该应用程序时遇到问题。如果我以调试 模式启动应用程序,我会在 Logcat 中收到此类消息(应用程序未启动):
E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandler Process: it.planner, PID: 27326 java.lang.SecurityException: In order to use mock mode functionality app it.planner must be selected as the mock location application in developer settings. at android.os.Parcel.readException(Parcel.java:2008) at android.os.Parcel.readException(Parcel.java:1954) at com.google.android.gms.internal.zzeu.zzb(Unknown Source:10) at com.google.android.gms.internal.zzcfa.zzbj(Unknown Source:9) at com.google.android.gms.internal.zzcfd.zzbj(Unknown Source:13) at com.google.android.gms.internal.zzcfk.zzbj(Unknown Source:2) at com.google.android.gms.internal.zzcee.zza(Unknown Source:4) at com.google.android.gms.common.api.internal.zzm.zzb(Unknown Source:8) at com.google.android.gms.common.api.internal.zzc.zza(Unknown Source:6) at com.google.android.gms.common.api.internal.zzbo.zzb(Unknown Source:9) at com.google.android.gms.common.api.internal.zzbo.zzaiw(Unknown Source:82) at com.google.android.gms.common.api.internal.zzbo.onConnected(Unknown Source:16) at com.google.android.gms.common.internal.zzac.onConnected(Unknown Source:2) at com.google.android.gms.common.internal.zzn.zzakr(Unknown Source:130) at com.google.android.gms.common.internal.zze.zzw(Unknown Source:64) at com.google.android.gms.common.internal.zzi.zzaks(Unknown Source:51) at com.google.android.gms.common.internal.zzh.handleMessage(Unknown Source:270) at android.os.Handler.dispatchMessage(Handler.java:109) at android.os.Looper.loop(Looper.java:166) at android.os.HandlerThread.run(HandlerThread.java:65) E/iMonitor: FaultDetect: DUMPTOOL_PRINTF return.
显然,如果我在开发人员选项中选择模拟位置,应用程序会启动并且运行良好。
如果我安装release apk 并尝试启动该应用程序,该应用程序不会启动并且我会在 Logcat 中收到此类消息:
E/AndroidRuntime: FATAL EXCEPTION: main Process: it.planner, PID: 29448 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2054) at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2077) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:678) at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:632) at it.planner.Home.mainMenu(Home.java:374) at it.planner.Home.computeGeolocation(Home.java:487) at it..planner.Home.access$100(Home.java:80) at it.planner.Home$3$1.onLocationResult(Home.java:344) at com.google.android.gms.internal.zzcff.zzu(Unknown Source:4) at com.google.android.gms.common.api.internal.zzci.zzb(Unknown Source:8) at com.google.android.gms.common.api.internal.zzcj.handleMessage(Unknown Source:16) at android.os.Handler.dispatchMessage(Handler.java:109) at android.os.Looper.loop(Looper.java:166) at android.app.ActivityThread.main(ActivityThread.java:7377) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
一旦应用程序处于 Release模式,就无法选择模拟位置,因此它不想启动。我已经处理这个问题很多天了。我还在 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'
}
}
最佳答案
此问题可能是因为未使用正确的 API 提交 fragment 事务。尝试寻找
transaction.commit();
并将其替换为
transaction.commitAllowingStateLoss();
更多讨论在这里:https://github.com/OneBusAway/onebusaway-android/issues/529#issuecomment-224974339
关于Android 应用程序在调试中工作,但在发布时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366711/