Android目标版本23升级到26修改点

本文概述了Android N(7.0)与O(8.0)版本的主要更新,包括电池与内存管理优化、后台任务调整、权限更改、NDK应用链接改进、提醒窗口更新、内容变更通知改进、安全性增强及隐私保护措施。介绍了使用JobScheduler替代延时操作、FileProvider进行文件共享、WebView HTTPS支持、DNS获取方式变化等关键信息。

Android N(7.0)

参考官网说明(https://developer.android.google.cn/about/versions/nougat/android-7.0-changes):

主要修改点有以下:

电池和内存:

问题:

  1. 应用退到后台后,可能进入低电耗模式,此时无法进行延时操作。如访问网络,以及PowerManager.WakeLock、AlarmManager 闹铃、GPS 和 WLAN 扫描应用 都无法使用;

  2. 对于全局注册的广播如 CONNECTIVITY_ACTION :网络变化监听,目前应用处于后台时无效;ACTION_NEW_PICTURE 和ACTION_NEW_VIDEO 相机和相册新增监听任何情况都是无效的;

android为了阻止应用通过全局广播频繁监测系统属性变更如网络,相册等,从而频繁拉起。

解决方案: 使用新出的JobScheduler来进行开发后台任务;通过JobScheduler来监听网络情况执行相关操作;注册局部广播不受影响(即页面初始化注册,销毁时同步销毁广播

权限更改

  1. 应用私有文件不允许通过设置Mode放宽权限( MODE_WORLD_READABLE 和/或 MODE_WORLD_WRITEABLE )供其他应用使用;

  2. 禁止通过file:// URI 向其他应用传递数据;分享传递文件推荐通过FileProvider 进行传递

  3. DownloadManager 不再按文件名分享私人存储的文件。旧版应用在访问 COLUMN_LOCAL_FILENAME 时可能出现无法访问的路径。对于由 DownloadManager 公开的文件,首选的访问方式是使用ContentResolver.openFileDescriptor()

应用间共享文件
对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。如需了解有关权限和共享文件的详细信息,请参阅共享文件。

NDK 应用链接至平台库
从 Android 7.0 开始,系统将阻止应用动态链接非公开 NDK 库,这种库可能会导致您的应用崩溃。此行为变更旨在为跨平台更新和不同设备提供统一的应用体验。即使您的代码可能不会链接私有库,但您的应用中的第三方静态库可能会这么做。因此,所有开发者都应进行相应检查,确保他们的应用不会在运行 Android 7.0 的设备上崩溃。如果您的应用使用原生代码,则只能使用公开 NDK API。

由于项目中使用的so库都是基于第三方sdk的,我们不好把控是否使用了系统私有NDK库,我们只能通过以下两个操作降低风险:

  1. 如果您的应用使用动态链接到私有平台 API 的第三方库,您可能也会看到上述 logcat 输出。利用 Android 7.0DK 中的 readelf 工具,您可以通过运行以下命令生成给定 .so 文件的所有动态链接的共享库列表:

aarch64-linux-android-readelf -dW libMyLibrary.so

  1. 于android8.0及以上手机对应用进行全面测试。

Android O(8.0):
参考官网说明(https://developer.android.google.cn/about/versions/oreo/android-8.0-changes#cwt):

  1. 提醒窗口
    使用 SYSTEM_ALERT_WINDOW 权限 的悬浮窗,应用必须使用名为 TYPE_APPLICATION_OVERLAY 的新窗口类型

  2. 内容变更通知
    Android 8.0 更改了 ContentResolver.notifyChange() 和 registerContentObserver(Uri, boolean, ContentObserver) 在针对 Android 8.0 的应用中的行为方式。
    现在,这些 API 需要在所有 URI 中为颁发机构定义一个有效的 ContentProvider。使用相关权限定义一个有效的 ContentProvider 可帮助您的应用防范来自恶意应用的内容变更,并防止将可能的私密数据泄露给恶意应用

  3. 视图焦点
    可点击的 View 对象现在默认也可以成为焦点。如果您希望 View 对象可点击但不可成为焦点,请在包含 View 的布局 XML 文件中将 android:focusable 属性设置为 false,或者将 false 传递至应用界面逻辑中的 setFocusable()

  4. 安全性(webview不设置,无影响)
    如果您的应用的网络安全性配置选择退出对明文流量的支持,那么您的应用的 WebView 对象无法通过 HTTP 访问网站。每个 WebView 对象必须转而使用 HTTPS。
    有关提升应用安全性的其他准则,请参阅面向 Android 开发者的安全性。

  5. 隐私性
    系统属性 net.dns1、net.dns2、net.dns3 和 net.dns4 不再可用,此项变更可加强平台的隐私性。
    要获取 DNS 服务器之类的网络连接信息,具有 ACCESS_NETWORK_STATE 权限的应用可以注册 NetworkRequest 或 NetworkCallback 对象。这些类在 Android 5.0(API 级别 21)及更高版本中提供。
    Build.SERIAL 已弃用。需要知道硬件序列号的应用应改为使用新的 Build.getSerial() 函数,该函数要求具有 READ_PHONE_STATE 权限。
    LauncherApps API 不再允许工作资料应用获取有关主个人资料的信息。当某个用户在托管配置文件中时,LauncherApps API 的行为就像同一配置文件组的其他配置文件中未安装任何应用一样。和之前一样,尝试访问无关联的个人资料会引发 SecurityExceptions。
    6 权限(修复系统权限授予bug,无影响)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值