Android版本适配(6.0~9.0)

1 :  安卓6.0适配

权限适配:

动态权限适配是 Android 6.0 最先开始的,也是 Android 系统对开发者影响最大的改动之一, 只有属于危险权限的才需要申请动态权限。

Android6.0之前,权限只需要在清单文件中遵守约定在 Android 6.0 ~ Android 8.0,危险权限不需要动态申请。如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用,即对于同一组内的权限,只要有一个被同意,其他的都会被同意。在 Android 8.0 之后,此行为已被纠正。系统只会授予应用明确请求的权限。然而一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准,但是若没有请求相应的权限而进行操作的话就会出现应用 crash 的情况。


低耗电模式:

当手机没有连接电源,屏幕关闭,并且静置一段时间不晃动,就可以进入低耗电模式.这时系统会定期退出低电量模式一会,再退出一段时间把那些延迟的工作同步执行,同时允许app访问网络.

app待机模式:

指app不在前台进程的情况下,如果用户一段时间没有使用该app,则该app进入待机模式,系统会禁止该app访问网络,暂停同步和jobs,也不是绝对禁止,系统允许每个app每天大约一次的频率访问网络.

app待机模式和低耗电模式的区别:

低耗电模式必须关闭屏幕处于静止,没有连接充电器,针对所有app;

app待机模式针对的是某一个应用,不需要关闭屏幕,不需要手机保持静止,只要某一个app是非前台线程,一般用户一段时间未使用该app,那么该app就会进入待机模式,即使此刻用户在使用其他app;

2:安卓7.0

APK signature scheme v2

Android 7.0 引入一项新的应用签名方案 :APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用。


1.只勾选V1签名就是传统方案签署,但是在 Android 7.0 上不会使用V2安全的验证方式。

 2.只勾选V2签名7.0以下会显示未安装,Android 7.0 上则会使用了V2安全的验证方式。

 3.同时勾选V1和V2则所有版本都没问题。

org.apache不支持问题

// build.gradle里面加上这句话

 defaultConfig {

useLibrary 'org.apache.http.legacy'

 }

SharedPreferences闪退

Android7.0前,我们对于app的私有文件,比如sp,我们可以设置权限(MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE)来让其他应用访问,Android 7.0以后不能使用这个获取,会闪退// 应修改成MODE_PRIVATE

 SharedPreferences read = getSharedPreferences(RELEASE_POOL_DATA, MODE_WORLD_READABLE); 

进一步增强低耗电模式:

Android7.0系统的改变主要针对于延长电池的使用寿命以及减少内存的使用,6.0需要手机处于未充电,屏幕关闭,手机处于静止;7.0不需要手机处于静止(例如用户外出时把设备放在口袋里),系统会让部分CPU和网络受到限制,进一步增强了低电耗模式.

后台优化:

用过苹果手机的老铁们想必都知道,苹果手机是很难出现卡顿现象的,而安卓手机卡顿的较为严重,主要是因为苹果系统里,app想在后台一直运行是很难的,未经允许的app在后台最多存活不到几分钟,而安卓应用后台悄悄启动的机会太多了,比如清单文件里注册了某app的静态广播,静态广播是不受进程影响的,比如监听网络状态改变的广播,监听手机拍照或录像的广播,即使应用被关闭了,一旦广播发出,注册了广播的应用也直接被唤醒,造成杀不死的现象,而7.0针对这一现象,限制了这三种广播在清单文件的静态注册,只能动态注册.

文件共享:

app之间的私有文件共享只能用FileProvider这种方式.FileProvider是通过一种临时授权的方式让其他app来访问我自己app私有文件夹的方式,访问过一次就失效了,下次想访问就失效了除非再次授权.

Android 8.0适配

Android 8.0中PHONE权限组新增两个权限

ANSWER_PHONE_CALLS:允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 acceptRingingCall() 函数。 READ_PHONE_NUMBERS:权限允许您的应用读取设备中存储的电话号码。

后台执行适配

8.0增加了许多特性,但是对我们开发过程中影响比较大的主要就是后台执行限制,后要执行限制分为后台服务限制广播限制.

1:后台服务限制:

首先区分一下后台和前台: 具有可见Activity(不管该Activity已启动还是已暂停),具有前台服务,另一个前台应用已关联到该应用.这是前台.否则就是后台.

对于后台服务的限制就是指不让处于后台的app任意创建和运行前台和后台服务.处于前台时,应用可以自由创建和运行前台服务与后台服务.进入后台时,在一个持续数分钟的时间窗内,应用仍可以创建和使用服务.时间窗结束后应用被视为处于空闲状态.此时系统将停止应用的后台服务.

在Android8.0之前,创建前台服务的方式通常是先创建一个后台服务,然后将后台服务推向前台.Android8.0之后,系统不允许后台应用创建后台服务.因此引入了一个全新的方法Context.startForegroundService(),以在前台启动新服务.在系统创建服务后,应用有五秒时间来调用该服务的startForegroud()方法来把后台服务推向前台显示并在通知栏显示服务可见,如果应用在此时间内未调用startForegroud(),则系统将停止服务并声明此应用ANR.

2:广播限制:

Android 8.0中把广播分为隐式和显示两种,并禁止app在清单文件中注册部分隐式广播. 只能通过动态方式注册. 为了更好的管制通知的提醒,不想一些不重要的通知打扰用户,新增了通知渠道,用户可以根据渠道来屏蔽一些不想要的通知。




Android 9.0适配

在9.0中有一些原生的刘海屏的适配,电源管理和http网络请求的限制.

http网络请求的限制就是如果我们的app target版本是28+,那么不管我们是原生的HttpUrlConnection还是okhttp,那么如果使用http请求网络将会报错.解决办法有三种:

1:降低target版本,小于28即可

2:http换成https.

3:在res目录下新增一个xml目录,再在xml目录下建立一个文件名任意的xml文件,内容大概就是运行开启http请求.


然后在清单文件里application标签增加以下属性:







你可能感兴趣的:(Android版本适配(6.0~9.0))