背景
android os6,7推出后,公司的APP在市场上面反映的一些问题。初始方案在7月份已经整了一份,但是邮件发出大部分同学都看不到,这里在博客里面整理后再在部门内邮件发出来。
android os6
对于6.0的几个主要的变化,查看查看官网的这篇文章http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.htm
这里主要说下跟测试相关的,运行时权限处理方面的内容
推荐阅读官网权限相关文章:
运行时权限的变化及特点
6.0以下
APP在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信等)。
6.0以后
我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝。当然你也可以在设置界面对每个app的权限进行查看,以及对单个权限进行授权或者解除授权。
新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。
android权限可以自行通过adb shell pm list permissions -d -g
进行查看。
- Normal Permissions
以下是普通权限,只需要在AndroidManifest.xml中申请即可。(这块对测试不会有太大影响)
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_NOTIFICATION_POLICY android.permission.ACCESS_WIFI_STATE android.permission.ACCESS_WIMAX_STATE android.permission.BLUETOOTH android.permission.BLUETOOTH_ADMIN android.permission.BROADCAST_STICKY android.permission.CHANGE_NETWORK_STATE android.permission.CHANGE_WIFI_MULTICAST_STATE android.permission.CHANGE_WIFI_STATE android.permission.CHANGE_WIMAX_STATE android.permission.DISABLE_KEYGUARD android.permission.EXPAND_STATUS_BAR android.permission.FLASHLIGHT android.permission.GET_ACCOUNTS android.permission.GET_PACKAGE_SIZE android.permission.INTERNET android.permission.KILL_BACKGROUND_PROCESSES android.permission.MODIFY_AUDIO_SETTINGS android.permission.NFC android.permission.READ_SYNC_SETTINGS android.permission.READ_SYNC_STATS android.permission.RECEIVE_BOOT_COMPLETED android.permission.REORDER_TASKS android.permission.REQUEST_INSTALL_PACKAGES android.permission.SET_TIME_ZONE android.permission.SET_WALLPAPER android.permission.SET_WALLPAPER_HINTS android.permission.SUBSCRIBED_FEEDS_READ android.permission.TRANSMIT_IR android.permission.USE_FINGERPRINT android.permission.VIBRATE android.permission.WAKE_LOCK android.permission.WRITE_SYNC_SETTINGS com.android.alarm.permission.SET_ALARM com.android.launcher.permission.INSTALL_SHORTCUT com.android.launcher.permission.UNINSTALL_SHORTCUT
- Dangerous Permissions:
以下是危险权限,权限的处理跟APP测试会相关,请注意!
group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTACTS group:android.permission-group.PHONE permission:android.permission.READ_CALL_LOG permission:android.permission.READ_PHONE_STATE permission:android.permission.CALL_PHONE permission:android.permission.WRITE_CALL_LOG permission:android.permission.USE_SIP permission:android.permission.PROCESS_OUTGOING_CALLS permission:com.android.voicemail.permission.ADD_VOICEMAIL group:android.permission-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA permission:android.permission.CAMERA group:android.permission-group.SENSORS permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.WRITE_EXTERNAL_STORAGE group:android.permission-group.MICROPHONE permission:android.permission.RECORD_AUDIO group:android.permission-group.SMS permission:android.permission.READ_SMS permission:android.permission.RECEIVE_WAP_PUSH permission:android.permission.RECEIVE_MMS permission:android.permission.RECEIVE_SMS permission:android.permission.SEND_SMS permission:android.permission.READ_CELL_BROADCASTS
dangerous permissions都是一组一组的。对于授权机制是这样的:如果你申请某个危险的权限,假设你的app早已被用户授权了同一组的某个危险权限,那么系统会立即授权,而不需要用户去点击授权。
比如你的app对READ_CONTACTS
已经授权了,当你的app申请WRITE_CONTACTS
时,系统会直接授权通过。此外,对于申请时弹出的dialog上面的文本说明也是对整个权限组的说明,而不是单个权限(ps:这个dialog是不能进行定制的)。
android内部处理:
- (1)checkSelfPermission:检查是否拥有这个权限
- (2)requestPermissions:请求权限,一般会弹出一个系统对话框,询问用户是否开启这个权限。
- (3)shouldShowRequestPermissionRationale:Android原生系统中,如果第二次弹出权限申请的对话框,会出现“以后不再弹出”的提示框,如果用户勾选了,你再申请权限,则shouldShowRequestPermissionRationale返回true,意思是说要给用户一个 解释,告诉用户为什么要这个权限。然而,在实际开发中,需要注意的是,很多手机对原生系统做了修改,比如小米,小米4的6.0的shouldShowRequestPermissionRationale 就一直返回false,而且在申请权限时,如果用户选择了拒绝,则不会再弹出对话框了。。。。 所以说这个地方有坑,可行的解决方法有,在回调里面处理,如果用户拒绝了这个权限,则打开本应用信息界面,由用户自己手动开启这个权限。
- (4)每个应用都有自己的权限管理界面,里面有本应用申请的权限以及各种状态,即使用户已经同意了你申请的权限,他也随时可以关闭
重点:
为什么android的dangerous permissions处理会跟APP测试相关呢?
1.权限false完全没做处理,用户拒绝后应用直接崩溃!
2.权限禁用后无对应提示,一些核心功能无法正常使用!
android os7
针对android os7 目前整理了两套选择方案
1.使用android 模拟器测试,android avd已支持创建 android N模拟器
从用户的角度而言,使用该模式的场景非常多。比如一边打开浏览器,一边播放视频;一边打开浏览器,一边打开邮件类app;一边打开浏览器,一边使用社交类app。 那么作为测试,主要关注的是: 1)我们的产品分屏时是否能正常显示? 2)页面缩放、无图模式等功能能否正常使用? 3)分屏时,和其他产品交互(drag & drop)时是否会出错?
• 全新下拉快捷开关页
在安卓7.0中,下拉打开通知栏顶部即可显示5个用户常用的快捷开关,支持单击开关以及长按进入对应设置。
该特性对APP测试无影响
• 主屏拥有两种设计风格可选:经典及摩登
经典风格并没有变化;摩登风格则类似iOS。其实这个摩登风格,就是当时号称”要去掉应用抽屉”的风格。
目前,部分app会在应用抽屉和桌面上同时生成两个图标,图标的名字还有可能不一致。
1)那么7.0是两套桌面分开管理从而切换,还是通过调整UI进行切换? 2)如果用户装了这样的应用,从经典模式切换为摩登模式的时候,图标会不会出现重复? 3)切换时能否存在后台app? 4)如果能,是否会导致后台运行的app出错? 这些都是可能出现错误的场景。
• 通知消息快捷回复和归拢
7.0加入了全新的API,支持第三方应用通知的快捷操作和回复。来电会以横幅方式在屏幕顶部出现接通或挂断;信息/社交类应用通知可以打开键盘,在输入栏里进行快捷回复。同一应用的多条通知和提示消息将归拢为一项,点击该项可展开此前的全部通知,允许用户对每个通知执行单独操作。
比如在浏览器里,回复/评论某个新闻,别人给你点赞或者回复时,你会收到通知消息。
1)那么这个通知能否正确的归拢和单独操作? 2)归拢是否有上限? 3)归拢太多时会不会造成响应缓慢或app的崩溃? 这些用户场景的模拟,也是测试需要关注的。
• DataSaver
该功能可以限制App的后台流量偷跑。用户通过设置名单,当Data Saver开启后,名单中的App将会受到流量限制措施。同时谷歌也减少了一些图像传输的分辨率,限制移动流媒体服务的码率,限制一些软件的预缓存功能(自动读取用户并未请求的数据)。
这个功能的出发点挺不错,但是可以想象的到,将会带来一系列的问题: 1)比如用户后台下载,流量被限制了,可能过了几个小时还没下载好。 2)比如app需要在后台接收数据、推送通知,被限制后无法正常推送。 3)比如游戏挂在后台时掉线。 那么产品是否应该弹出窗口或进行推送,请用户不要对其进行限制呢? 从弹出窗口到推送,再至不限制之后能否在后台正常运行,这都将会增加一系列的测试点。
• 夜间模式
该功能依然需要在系统调谐器中开启,从顶部下划打开快捷设置页,然后长按其中的设置图标,齿轮旋转10秒钟左右即可提示已开启系统调谐器,之后用户在设置中即可找到“系统调谐器”设置项。点开其中的“色彩和外观”,即可找到夜间模式,开启后即可使用全局的深色主题模式,同时亮度和色彩也会进行一定的调整,该功能可以基于时间或地理位置自动开启。另外,系统调谐器中也提供了RGB红绿蓝三色调节滑动条,允许用户手动精细调节,例如减少蓝色或增加红色以提供类似护眼模式的效果。
这个功能的出发点挺不错,但是可以想象的到,将会带来一系列的问题: 1)比如夜晚打开APP,APP未做暗色调处理,看不清。 实际系统可能会自行处理,但测试的时候还是需要关注。
• 全新设置样式
安卓7.0启用了全新的设置样式,首先每个分类下各个子项之间的分割线消失了,只保留分类之间的分割线。另外,你还可以看到,全新的设置菜单还提供了一个绿色的顶栏,允许用户通过后方的下拉箭头,快速设定勿扰模式等。除了勿扰模式外,顶栏菜单还可以显示诸多其他的设置状态,例如数据流量的使用情况,自动亮度是否开启等。
该特性对APP测试无影响
• 改进的Doze休眠机制
只要手动在后台删掉应用卡片,关屏后该应用就会被很快深度休眠。目前谷歌尚未透露Doze的更多细节,该特性可能会阉割
未确定特性
• 系统级电话黑名单功能
在安卓7.0中,谷歌将电话拦截功能变成了一个系统级功能。其它应用可以调用这个拦截名单,但只有个别应用可以写入,包括拨号应用、默认的短信应用等。
该特性对APP测试无影响
• 菜单键快速应用切换
双击菜单键,就能自动切换到上一个应用。如果你不停地点击菜单键的话,就会在所有应用中不间断地轮换,应用窗口会自动放大,顶部还会出现倒计时条,停止点击且倒计时结束后,当前应用会自动放大并返回到前台。
该特性对APP测试无影响
• 超快应用安装速度
在安卓6.0中需要几分钟时间才能安装和优化完成的,在安卓7.0中仅仅需要几秒钟就可以搞定
该特性对APP测试无影响
• 紧急个人救护信息功能
项功能可以在Android 7.0的“设置”——“用户”下面找到,当点击之后,系统就会要求你填写一些个人紧急救护信息,比如你的姓名、家庭住址、血型、药物过敏史、正在服用的药物、以及过往疾病史等信息,还可以填写数个紧急联系人信息。
紧急信息窗口仅在当你设置了安全锁屏且在紧急拨号面板下才会显示出来,毕竟当遇到突发急症等险境时,如果在手机上设置了锁屏,别人就无法主动通过手机联系家人或朋友。如果你设置了个人紧急信息,在锁屏下进入紧急拨号面板时,你就会看到上方会有红色的紧急信息提示框,连续点击两次便可看到此前输入的个人信息和紧急联系人,点击可以直接进行拨叫。
好东西,但该特性对APP测试无影响
android N或者叫Android 7.0 ,从今年7月已有项目披露BUG并直接通知公司进行修复,相应的兼容测试需要引起注意!
项目问题详情可了解:国元理财OTC【华为 Android N版本三方应用兼容性问题反馈】