记录自己成长,分享技术博客,探索软件开发系列问题。

值得你关注的Android6.0上的重要变化(二)

系统变化 方耀宇 915℃ 0评论

十 Android KeyStore变化

此版本上Android Keystore provider不再支持DSA,仍旧支持ECDSA。
锁屏密码在(如用户或设备管理器)禁用或重置的情况下,不需要加密部分将不再被删除,而加密部分则会被删除。

十一 Wi-Fi和网络变化(Wi-Fi and Networking Changes)

此版本在Wi-Fi和网络API执行行为上有如下的变化

(1)现在,你的app只能修改你自己创建的WifiConfiguration对象的状态,而不再允许修改或删除由用户或其它app创建的WifiConfiguration对象

(2)之前,应用可以使用enableNetwork(),设置disableAllOthers=true,来使设备断开其它网络,如蜂窝网络,而强制连接指定的Wi-fi网络。在此版本上,设备将不会从其它网络断开连接。如果你的app的targetSdkVersion是20或者更低,将固定在选择的Wi-Fi网络。如果targetSdkVersion是21或者更高,使用multinetwork APIs (如openConnection(), bindSocket()和bindProcessToNetwork()方法)来保证网络流量被发送到指定的网络上。

十二 相机服务变化(Camera Service Changes)

在此发布版本上,访问相机服务模型将由原来的“先来先服务”方式,改为基于优先级的访问方式。服务行为的变化包括:

(1)客户端应用进程基于优先级的方式访问相机子系统,包括打开和配置设备相机。用户可见的应用进程通常被赋予高优先级,使得相机资源的获取和使用更可靠。

(2)高优先级的应用能够“驱逐”低优先级应用,而使用相机(译注:高优先级应用能以抢占方式使用相机)

(3)在有合适的相机的硬件上,多个应用进程可以同时且独立地使用相机设备。但是,多进程同时访问的情况下,会导致相机设备的性能显著降低,而现在相机服务会检测并不允许此种情况发生。这种变化导致低优先级的应用被“驱逐”,直到没有其它应用直接访问同一个相机设备。

(4)改变当前使用者(译注:多用户情况下的用户切换)后,引起之前使用者所拥有的应用无法再使用相机。访问相机被限制在设备的当前使用者上。实际上,这意味着一个“guest”用户账户在切换到其它用户账户时,不能再保留一个运行的进程访问相机服务。

十三 运行时(Runtime)

ART运行时可以恰当的实现newInstance()的访问规则。这一变化修复了之前版本中,Dalvik不正确的检查访问规则的问题。如在你的app使用newInstance()方法,而且你想利用setAccessible()方法,输入参数为true,改变它的访问规则的情况。如果你的app使用 v7 appcompat library或 v7 recyclerview library,你必须使用这些库的最新版本来更新应用。另外,确保在XML中引用的自定义类也被更新,以便其构造函数能够被访问。

此版本更新了动态链接器(dynamic linker)的行为。动态链接器现在能够识别库的soname和它的路径(public bug 6670)的区别,而且实现了通过soname查找。之前错误使用DT_NEEDED entries(通常以绝地路径的形式在编译应用的设备文件系统中)的应用在加载时可能会失败。

dlopen(3) RTLD_LOCAL 标识现在已被正确实现。注意RTLD_LOCAL是默认的,因此如果调用dlopen(3)时,没有明确使用RTLD_LOCAL也受到影响(除非你的应用明确使用RTLD_GLOBAL)。在设置了RTLD_LOCAL,符号对于后来调用dlopen(3)加载的库是不可用的(与DT_NEED entries的引用不同)。

在Android之前的版本,如果你的应用通过text relocation的方式请求系统加载一个共享库,系统显示一个警告,但仍然允许这个库被加载。在此版本中,如果你的应用的目标版本是大于或等于23的话,系统拒绝加载这个库。为了帮助你检测一个库是否加载失败,你的应用应该记录dlopen(3)的失败日至,而且包括调用dlerror(3)返回的问题描述。查看这个指南了解更多关于text relocations。

十四 APK验证(APK Validation)

此平台执行更加严格的APK的验证。一个apk如果在manifest中声明了一个并不存在的文件,将被认为是腐败的(corrupt)。apk在移除了任何内容后都必须重新签名。

十五 USB连接(USB Connection)

通过UAB端口连接设备,默认采用仅充电模式。通过USB连接设备并获取内容,必须明确的经过用户授权这种交互权限。如果你的应用支持通过USB端口的交互,要考虑到这种交互必须被明确的启用。

十六 企业Android的变化(Android for Work Changes)

此版本Android for Work包括一下行为的变化:
个人环境中的企业联系人:当用户查看过去的通话记录时,Google拨号器的通话记录显示企业联系人(work contacts)。设置setCrossProfileCallerIdDisabled()为true,在Google拨号器中隐藏企业联系人的通话记录。默认情况下,在设备上通过蓝牙分享联系人时,企业联系人与个人联系人一起显示,除非设置setBluetoothContactSharingDisabled()为false。
Wi-Fi配置移除:通过Profile Owner添加的Wi-Fi配置(例如,调用addNetwork()方法)在其对应的企业配置(work profile)被移除后删除。
Wi-Fi配置锁定:当WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN值为非0时,用户无法修改或删除由启用的设备拥有者(Device Owner)创建的任何Wi-Fi配置。用户依然能够创建或修改他们自己的Wi-Fi配置。启用的设备拥有者拥有编辑或移除任何的Wi-Fi配置,即使这些配置不是它创建的。
通过Google账户添加的下载企业策略控制器(Work Policy Controller):在管控环境之外,当需要进行管理的Google账号要求通过企业策略控制器(WPC)app添加到设备时,新增账号流程会提示给用户去安装合适的WPC。这一行为对通过设置>账号和初始化设备时添加的账号同样起作用。
DevicePolicyManager API的变化:
(1)调用setCameraDisabled()方法,仅影响当前调用相机的用户;在managed profile中调用此方法并不影响primary user中使用相机的app运行。
(2)此外,setKeyguardDisabledFeatures()方法对配置拥有者(Profile Owner)和设备拥有者都可用。
(3)配置拥有者能够设置如下的锁屏限制:
KEYGUARD_DISABLE_TRUST_AGENTS 和 KEYGUARD_DISABLE_FINGERPRINT, 影响配置父用户(parent user)的锁屏设置
KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS, 仅影响在managed profile中应用产生的通知。
(4)createAndInitializeUser() 和 createUser()方法被废弃(deprecated)
(5)当给定的应用在前台时,setScreenCaptureDisabled()方法阻塞辅助框架(assist structure)
(6)EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM 默认为SHA-256. SHA-1 作为兼容性的备用,但未来将会被删除。
(7)EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM 目前只接受SHA-256。
(8)存在与Android6.0(API level 23)的Device initializer APIs现在被移除。
(9)EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS被移除,因此,NFC触碰配置不能在代码上解锁一个恢复出厂设置被保护的设备。
(10)现在可以使用EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE在managed device上通过NFC触碰传递数据给device owner app
(11)Android for Work API在M的运行时权限上进行了优化,包括企业配置(Work profiles),辅助层(assist layer)等。新的DevicePolicyManager 权限API并不影响Android M之前的应用。
(12)当用户在初始化设置流程中通过ACTION_PROVISION_MANAGED_PROFILE 或 ACTION_PROVISION_MANAGED_DEVICE intent退出同步部分,系统将会返回RESULT_CANCELED这一返回值

其它API的变化:
数据流量统计(Data Usage):android.app.usage.NetworkUsageStats类被重命名为NetworkStats。

全局设置变化:
(1)这些配置不再能通过setGlobalSettings()来设置:
BLUETOOTH_ON
DEVELOPMENT_SETTINGS_ENABLED
MODE_RINGER
NETWORK_PREFERENCE
WIFI_ON
(2)这些配置现在能通过setGlobalSettings()来设置:
WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN

转载请注明:方耀宇 - 个人技术博客 » 值得你关注的Android6.0上的重要变化(二)

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址