java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sogou.gamecenter.sdk.demo/com.sogou.gamecenter.sdk.demo.WelcomeActivity}: java.lang.SecurityException:com.sogou.gamecenter.sdk.demo was not granted this permission: android.permission.WRITE_SETTINGS. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2445) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2505) at android.app.ActivityThread.access$1000(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:5466) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:165) Caused by: java.lang.SecurityException: com.sogou.gamecenter.sdk.demo was not granted this permission: android.permission.WRITE_SETTINGS. at android.os.Parcel.readException(Parcel.java:1620) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) at android.content.ContentProviderProxy.call(ContentProviderNative.java:646) at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1322) at android.provider.Settings$System.putStringForUser(Settings.java:1654) at android.provider.Settings$System.putString(Settings.java:1637) at com.sogou.gamecenter.sdk.util.GameUtil.saveRegistedDeviceInfo(GameUtil.java:189) at com.sogou.gamecenter.sdk.util.GameUtil.getRegistedDeviceInfo(GameUtil.java:169) at com.sogou.gamecenter.sdk.SogouGamePlatform.init(SogouGamePlatform.java:164) at com.sogou.gamecenter.sdk.demo.WelcomeActivity.onCreate(WelcomeActivity.java:30) at android.app.Activity.performCreate(Activity.java:6303) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2398) |
对,没有错~!这个是Android程序的崩溃日志。
对,没有错~!小编看到这个内心也是崩溃的。
对,没有错~!这个特么是一个线上用户的崩溃,允许小编在厕所哭一会~~
这样的崩溃你遭不遭的住?你遭不住~~
分析崩溃原因
手机游戏SDK在启动后需要获取系统设置,在启动后需要得到<uses-permission android:name="android.permission.WRITE_SETTINGS" />权限,但是小米4开发版系统中系统设置这一项是默认关闭的,读取信息时失败,导致崩溃发生。
为我们广大的Tester敲响警钟
在Android应用程序安装前需要授权关于相机、系统设置、通讯录、信息等很多的权限,那么我们在APP测试过程中有没有对这种权限获取做过测试呢?这些权限都是什么意思呢?开发的代码里面怎么设置的呢?那么接下来我给你们絮叨絮叨~
危险等级
<uses-permission android:name="android.permission.RECORD_AUDIO" />
//获取应用程序录制音频权限。
<uses-permission android:name="android.permission.SEND_SMS" />
//获取应用程序发送短信权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//获取应用程序写入外部存储权限。
//注:API级别小于19时,需要申请,API级别大于19时,无需申请。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
//获取应用访问精确位置权限。
<uses-permission android:name="android.permission.RECEIVE_SMS" />
//获取应用程序接收短信权限。
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
//获取应用程序读取或写入系统设置权限。
//注:API级别为23或者更高时,需要用户授权
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
字符串READ_PHONE_STATE
//注:当minSdkVersion和targetSdkVersion值都设置为3或更低,此权限将默认授权。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
//获取应用程序弹出可视化窗口权限。
//注:如果应用程序的目标级别为23级或更高版本,则应用用户必须通过权限管理屏幕向应用程序显式授予该权限。
正常等级
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
//获取应用程序修改全局音频设置权限。
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
//获取应用程序更改网络连接状态权限。
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
//获取应用程序更改Wi-Fi连接状态权限。
<uses-permission android:name="android.permission.INTERNET" />
//获取应用程序打开网络套接字权限。
<uses-permission android:name="android.permission.CALL_PHONE" />
//获取应用程序发起电话而不通过拨号器用户界面供用户确认通话权限。
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
//获取应用程序安装和卸载文件时,可进行系统以进行可移动存储。
//注:API级别21中已被弃用。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
//获取应用程序显示系统弹窗权限。
//注意:当API级别为23级或更高版本,需要用户授权。
<uses-permission android:name="android.permission.NFC" />
//获取允许应用程序通过NFC执行I / O操作权限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
//获取应用程序访问有关Wi-Fi网络的信息权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
//获取应用程序接收系统启动广播权限。
//注:开启此权限后会增加了系统启动所需的时间,并且这个行为为自动行为用户不可见。
<uses-permission android:name="android.permission.VIBRATE" />
//获取应用程序访问振动器权限。
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
//获取应用程序结束所有相关任务权限
//注:API8级时已经被废弃
小编的血泪总结
1.APP测试增加关注点:关闭所有权限后APP是否会出现崩溃,如下图
2.APP测试增加关注点:假如APP需要某项权限时,是否有合理弹窗,如下图
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。