我正在开发一个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'
}
}
答案 0 :(得分:2)
此问题可能是由于未使用正确的API提交Fragment事务。尝试找到
transaction.commit();
并用
替换transaction.commitAllowingStateLoss();
更多讨论在这里:https://github.com/OneBusAway/onebusaway-android/issues/529#issuecomment-224974339