android app targetsdk从23升级到28

android app target sdk从23升级到28

  • 一、23升级到24
    • 1.隐式广播
    • 2.权限更改
    • 3.NDK 应用链接至平台库
  • 二、24升级到26
    • 1.后台服务
    • 2.语言区域和国际化
    • 3.提醒窗口
    • 4.集合的处理
    • 5.权限
  • 三、26升级到28
    • 1.Apache HTTP 客户端弃用
    • 2.对使用非 SDK 接口的限制

一、23升级到24

1.隐式广播

Android 7.0 移除了三项隐式广播,以帮助优化内存使用和电量消耗。
面向 Android 7.0 开发的应用不会收到 CONNECTIVITY_ACTION 广播,即使它们已有清单条目来请求接受这些事件的通知。在前台运行的应用如果使用 BroadcastReceiver 请求接收通知,则仍可以在主线程中侦听 CONNECTIVITY_CHANGE。
应用无法发送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 广播。此项优化会影响所有应用,而不仅仅是面向 Android 7.0 的应用。
修改方案:
Android 框架提供多个解决方案来缓解对这些隐式广播的需求。例如,JobScheduler API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。您甚至可以使用 JobScheduler 来适应内容提供程序变化。

2.权限更改

为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问 (0700)。私有文件的文件权限不应再由所有者放宽,为使用 MODE_WORLD_READABLE 和/或 MODE_WORLD_WRITEABLE 而进行的此类尝试将触发 SecurityException。
对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。
修改方案:
要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。

3.NDK 应用链接至平台库

从 Android 7.0 开始,系统将阻止应用动态链接非公开 NDK 库,这种库可能会导致您的应用崩溃。

二、24升级到26

1.后台服务

Android 8.0 的应用不允许其创建后台服务的情况下使用 startService() 函数,否则将引发一个 IllegalStateException。
修改方案:
修改为 Context.startForegroundService() 函数将启动一个前台服务。

2.语言区域和国际化

在 Android 8.0 中,以下函数使用 Locale.getDefault(Category.DISPLAY) 来代替 Locale.getDefault()。
Currency.getDisplayName()
Currency.getSymbol()
Locale.getDisplayScript()

3.提醒窗口

Android 8.0,使用 TYPE_APPLICATION_OVERLAY 窗口类型来显示提醒窗口。

4.集合的处理

AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 始终引发 NullPointerException

5.权限

在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会将属于同一权限组并且在清单中注册的其他权限也一起授予应用。
对于针对 Android 8.0 的应用,系统只会授予应用明确请求的权限。
例如,假设某个应用在其清单中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。应用请求 READ_EXTERNAL_STORAGE,并且用户授予了该权限。如果该应用针对的是 API 级别 24 或更低级别,系统还会同时授予 WRITE_EXTERNAL_STORAGE,因为该权限也属于同一 STORAGE 权限组并且也在清单中注册过。如果该应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE;不过,如果该应用后来又请求 WRITE_EXTERNAL_STORAGE,则系统会立即授予该权限,而不会提示用户。

三、26升级到28

1.Apache HTTP 客户端弃用

在 Android 6.0 中,我们取消了对 Apache HTTP 客户端的支持。 从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。
要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

2.对使用非 SDK 接口的限制

为帮助确保应用稳定性和兼容性,此平台对某些非 SDK 函数和字段的使用进行了限制;无论您是直接访问这些函数和字段,还是通过反射或 JNI 访问,这些限制均适用。 在 Android 9 中,您的应用可以继续访问这些受限的接口;该平台通过 toast 和日志条目提醒您注意这些接口。 如果您的应用显示这样的 toast,则必须寻求受限接口之外的其他实现策略。

你可能感兴趣的:(android app targetsdk从23升级到28)