android - Android 应用程序在调试中工作,但在发布时不工作
问题描述
我正在开发一个 Android 应用程序,当我在发布模式下运行该应用程序时遇到问题。如果我在调试模式下启动应用程序,我会在 Logcat 中收到此类消息(应用程序无法启动):
E/AndroidRuntime:致命异常:GoogleApiHandler 进程:it.planner,PID:27326 java.lang.SecurityException:为了使用模拟模式功能应用程序 it.planner 必须在开发人员设置中选择为模拟位置应用程序。在 com.google.android.gms.internal.zzeu.zzb 的 android.os.Parcel.readException(Parcel.java:2008) 的 android.os.Parcel.readException(Parcel.java:1954)(未知来源:10)在 com.google.android.gms.internal.zzcfa.zzbj(未知来源:9) 在 com.google.android.gms.internal.zzcfd.zzbj(未知来源:13) 在 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来源:8) 在 com.google。
显然,如果我在Developer Options中选择模拟位置,应用程序将启动并正常工作。
如果我安装发行版 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) 在 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) 在 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(未知来源:4) 在 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)在 android.os.Handler.dispatchMessage(Handler.java:109) 在 android.os.Looper.loop(Looper.java:166) 在 android.app.ActivityThread.main(ActivityThread.java:7377) 在 java.lang。 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 上的 reflect.Method.invoke(Native Method) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)os.Looper.loop(Looper.java:166) 在 android.app.ActivityThread.main(ActivityThread.java:7377) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os。 RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)os.Looper.loop(Looper.java:166) 在 android.app.ActivityThread.main(ActivityThread.java:7377) 在 java.lang.reflect.Method.invoke(Native Method) 在 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'
}
}
解决方案
这个问题可能是因为没有使用正确的 API 提交 Fragment 事务。尝试去找
transaction.commit();
并将其替换为
transaction.commitAllowingStateLoss();
更多讨论在这里:https ://github.com/OneBusAway/onebusaway-android/issues/529#issuecomment-224974339
推荐阅读
- amazon-ec2 - 如何通过 Ansible 在 AWS EC2 实例上部署 Consul
- ruby - (Friendly_id) 如何在嵌套路由中使用 slug 而不是 id?
- android - RxJava 2. 验证TestObserver的调用顺序
- c - 这种指针和循环的组合有什么好处吗?
- spring - 如何在没有 Spring jdbc 模板的情况下使用具有普通旧 jdbc 连接的 Spring 事务?
- python - 类型错误:__init__() 缺少 1 个必需的位置参数:“值”
- javascript - Astronaut.io 如何在他们的 youtube 嵌入式播放器上隐藏“稍后观看”、上传者的头像和“分享”标志?
- windows - 在域控制器的日志中识别 Active Directory 域网络中进行登录尝试(失败)的成员服务器
- python - `gc.get_objects()` 没有得到所有对象?
- javascript - 如何从页面开头获取当前访问的班级编号?