Android 5.0

2014年发布,代号:Lollipop

1、全新的Material Design设计风格;

2、支持64位ART虚拟机(放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译);

3、V7中引入CardView和RecycleView等新控件;

4、新增悬挂式Notification;

5、引入更加灵活的Toolbar,取代ActionBar;

Android 6.0

Google I/O 2015大会如约已于2015年5月28日举行。在发布会上代号为“Marshmallow(棉花糖)”的安卓6.0系统正式推出,API级别:23

1、运行时权限(最主要)

要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的 requestPermissions() 方法;

2、取消支持Apache HTTP客户端

如果您的应用使用该客户端,并以 Android 2.3(API 级别 9)或更高版本为目标平台,请改用 HttpURLConnection 类。此 API 效率更高,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。要继续使用 Apache HTTP API,您必须先在 build.gradle 文件中声明以下编译时依赖项:

android {

    useLibrary 'org.apache.http.legacy'//使用Apache库

}

3、统一支付标准Android Pay;

4、指纹支持;

5、Doze电量管理(手机静止不动一段时间后,会进入Doze电量管理模式,提高续航时间);

6、APP Links(加强了软件间的关联,支持点击链接跳转到对应的App);

7、Now on Tap(长按Home键激活Now on Tap,他会识别当前屏幕上的内容并创建Now卡片);

8、其他:

①、大量漂亮流畅的动画;

②、支持快速充电的切换;

③、支持文件夹拖拽应用;

④、相机新增专业模式;

⑤、新增睡眠模式和待机模式;

Android 7.0

Android 7.0是Google推出的智能手机操作系统,官方代号为“Nougat”(牛轧糖)。于2016年5月18-20日(美国西部时间)在Google I/O开发者大会上正式发布,发布地点是山景城的Shoreline Ampitheatre圆形剧场;

Android 7.0 包括旨在延长设备电池寿命和减少 RAM 使用的系统行为变更。这些变更可能会影响您的应用访问系统资源,以及您的应用通过特定隐式 intent 与其他应用交互的方式;

1、低电耗模式

Android 6.0引入了低电耗模式,当用户设备未插接电源,处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 Android 7.0 则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式;

2、系统权限的更改

为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问 (0700)。此设置可防止私有文件的元数据泄漏,如它们的大小或存在性。此权限更改有多重副作用;

传递软件包网域外的 file:// URI 可能给接收器留下无法访问的路径。因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider;

3、多窗口模式(分屏模式)

进入多窗口的Activity生命周期变化,会先onDestroy销毁,随后重建,停在onPause状态。

推出多窗口的Activity生命周期变化,接着上面onPause->onDestroy,随后正常重建。

禁用多窗口模式:在manifest.xml中配置android:resizeableActivity="false"

4、Data Server(一种流量保护机制,启用Data Server后,系统将拦截后台应用的数据使用)

5、改进的java8语言支持

6、自定义壁纸(设置壁纸时,可以选择是设置桌面还是锁屏壁纸)

7、快捷回复(在通知中快捷回复)

8、快速设置(下拉通知栏顶部,有edit按钮,可以对菜单进行自定义添加、删除、拖动排序)

9、其它:Daydream VR、后台省电、Unicode 9支持和全新的emoji表情符号、Google Assistant、夜间模式;

Android N上对VR的支持,实际上是使用了一个新的跨平台图形计算库——Vulkan,Vlukan API提升处理能力,减少GPU处理,从而获得更佳的游戏体验,所以说,如果一个手机支持VR,那么从某种意义上来说,这个手机的性能应该是很赞的!

引入全新的jit编辑器,是app安装速度快了75%,代码编译规模减少50%;

Android 8.0

2017年8月22日,谷歌正式发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥) 。2017年12月5日谷歌正式发布了Android 8.1的正式版。

1、通知渠道 - Notification Channels

通知渠道是由应用自行定义的通知内容类别,借助渠道,开发者可以让用户对不同种类的通知进行精细控制,用户可以单独拦截或更改每个渠道的行为,而不是统一管理应用的所有通知;

2、画中画模式- PIP

Android O 现已支持 Activity 的画中画模式。PIP 是一种多窗口显示模式,多用于视频播放。这和普通的画中画分屏模式并不相同。这一功能的唤醒只需要点击Home键按钮,如果想结束这一模式,可以将小窗口滑下来以终止;

3、自适应启动器图标(桌面icon在不同的设备型号上显示为不同的形状);

4、后台执行限制

        ①、后台service限制;

        ②、广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播;

5、后台位置信息限制(为降低耗电量,后台应用检索用户当前位置信息的频率会得到限制);

6、其它:自动填充框架、自动调整TextView的大小、WebView API、多显示器支持;

Android 9.0

Android 9.0是谷歌研发的移动端操作系统,开发代号为“Pie”(派),于2018年8月7日正式发布

1、利用wifi RTT 进行室内定位

ndroid 9 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台支持,从而让您的应用可以利用室内定位功能;

在运行 Android 9 且具有硬件支持的设备上,应用可以使用 RTT API 来测量与附近支持 RTT 的 Wi-Fi 接入点 (AP) 的距离。 设备必须已启用位置服务并开启 Wi-Fi 扫描(在 Settings > Location 下),同时您的应用必须具有 ACCESS_FINE_LOCATION 权限;

2、显示屏缺口支持

Android 9 支持最新的全面屏,其中包含为摄像头和扬声器预留空间的屏幕缺口。 通过 DisplayCutout 类可确定非功能区域的位置和形状,这些区域不应显示内容。 要确定这些屏幕缺口区域是否存在及其位置,请使用 getDisplayCutout() 函数;

适配方案(全屏方案,以Activity为例):

import android.view.Window;
import android.view.WindowManager

WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
this.getWindow().setAttributes(lp);

3、前台服务

如果应用以 Android 9 或更高版本为目标平台并使用前台服务,则必须请求 FOREGROUND_SERVICE 权限。这是普通权限,因此,系统会自动为请求权限的应用授予此权限:

// 9.0这个前台服务权限不要忘了
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

4、启动Activity

在9.0 中,不能直接非 Activity 环境中(比如Service,Application)启动 Activity,否则会崩溃报错。

这类问题一般会在点击推送消息跳转页面这类场景,解决方法就是 Intent 中添加标志FLAG_ACTIVITY_NEW_TASK

5、Apache HTTP 客户端弃用

在 Android 6.0 时,就已经取消了对 Apache HTTP 客户端的支持。从 Android 9.0 开始,默认情况下该库已从 bootclasspath 中移除。但是耐不住有些SDK中还在使用,比如我见到的友盟QQ分享报错问题。

所以要想继续使用Apache HTTP,需要在应用的 AndroidManifest.xml 文件中添加:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:networkSecurityConfig="@xml/network_security_config"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.MyGitignore">
    <uses-library android:name="org.apache.http.legacy" android:required="false"/>//使用这个
<application/>

6、动画(引入AnimatedImageDrawable类,用于显示GIF和WebP动画图像);

7、隐私变更(限制后台访问设备传感器,限制通过WiFi扫描检索到的信息等);

8、其它:机器学习,HDR VP9视频、HEIF图像压缩和Media API、对使用非SDK接口的限制;

Android 10

Android 10包含多项功能升级,包括手势导航、通知栏管理、全局黑暗模式等等,通知管理新增了“优先”、“无声”和“自适应通知”三种功能,新增深色主题的背景。

1、用户存储权限的变更

Android Q 在外部存储设备中为每个应用提供了一个“隔离存储沙盒”(例如 /sdcard)。任何其他应用都无法直接访问您应用的沙盒文件。由于文件是您应用的私有文件,因此您不再需要任何权限即可在外部存储设备中访问和保存自己的文件。此变更可让您更轻松地保证用户文件的隐私性,并有助于减少应用所需的权限数量。

谷歌官方推荐应用在沙盒内存储文件的地址为Context.getExternalFilesDir()下的文件夹。比如要存储一张图片,则应放在Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)中;

2、用户的定位权限的变更

为了让用户更好地控制应用对位置信息的访问权限,Android Q 引入了新的位置权限 ACCESS_BACKGROUND_LOCATION;

与现有的 ACCESS_FINE_LOCATION和 ACCESS_COARSE_LOCATION权限不同,新权限仅会影响应用在后台运行时对位置信息的访问权。除非应用的某个 Activity 可见或应用正在运行前台服务,否则应用将被视为在后台运行;

与iOS系统一样,Q中也加入了后台位置权限ACCESS_BACKGROUND_LOCATION,如果应用需要在后台时也获得用户位置(比如滴滴),就需要动态申请ACCESS_BACKGROUND_LOCATION权限;

当然如果不需要的话,应用就无需任何改动,且谷歌会按照应用的targetSDK作出不同处理:

targetSDK <= P 应用如果请求了ACCESS_FINE_LOCATION或 ACCESS_COARSE_LOCATION权限,Q设备会自动帮你申请ACCESS_BACKGROUND_LOCATION权限;

ACCESS_FINE_LOCATION:过全球定位系统(GPS)或网络位置信息(例如基站和WLAN)获取精准地理位置信息;

ACCESS_COARSE_LOCATION:通过网络位置信息(例如基站和WLAN)获取大致地理位置信息;

ACCESS_BACKGROUND_LOCATION: 应用进入后台后,可以继续获取定位;

3、设备唯一标识符的变更

从 Android Q 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE签名权限才能访问设备的不可重置标识符(包含 IMEI 和序列号);

如果您的应用没有该权限,但您仍尝试查询标识符的相关信息,会返回空值或报错。

设备唯一标识符需要特别注意,原来的READ_PHONE_STATE权限已经不能获得IMEI和序列。

如果想在Q设备上通过使用以下代码获取设备的ID:

((TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId()

则执行以上代码会返回空值(targetSDK<=P)或者报错(targetSDK==Q)。且官方所说的READ_PRIVILEGED_PHONE_STATE权限只提供给系统app,所以这个方法行不通了。谷歌官方给予了设备唯一ID最佳做法,但是此方法给出的ID可变,可以按照具体需求具体解决。本文给出一个不变和基本不重复的UUID方法:

public static String getUUID() {
    String serial = null;
    String m_szDevIDShort = "35" +
        Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
        Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
        Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
        Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
        Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
        Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
        Build.USER.length() % 10; //13 位
    try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                serial = android.os.Build.getSerial();
            } else {
                serial = Build.SERIAL;
            }
            //API>=9 使用serial号
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
      }
    //使用硬件信息拼凑出来的15位号码
    return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}

4、5G支持

5、支持可折叠设备;

6、暗黑主题;

7、手势导航(全面屏手势操作);

8、智能回复(通过机器学习预测你在回复消息时可能会说些什么);

9、用户隐私。给用户更多应用程序控制权(提供仅这一次、应用使用时授权等选择);

10、ART优化(添加了一种垃圾回收机制,节省垃圾回收的时间,帮助在低版本设备上顺畅运行);

11、机器学习更新;

Android 11

Android 11正式版系统在2020年9月9日正式发布。系统主要增强了聊天气泡,安全性和隐私性的保护,电源菜单,可以更好的支持瀑布屏,折叠屏,双屏和 Vulkan 扩展程序等.

1、短信更新改进(提供更加友好的交互);

2、电话号码相关权限:

Android 11 更改了您的应用在读取电话号码时使用的与电话相关的权限;

其实就是两个API:

TelecomManager 类中的 getLine1Number() 方法;

TelecomManager 类中的 getMsisdn() 方法;

也就是当用到这两个API的时候,原来的READ_PHONE_STATE权限不管用了,需要READ_PHONE_NUMBERS权限才行;

在Android10的用户隐私基础上,新增了位置、麦克风和摄像头的一次性权限许可;

3、现在需要APK签名方案V2

对于以 Android 11(API 级别 30)为目标平台,且目前仅使用 APK 签名方案 v1 签名的应用,现在还必须使用 APK 签名方案 v2 或更高版本进行签名。用户无法在搭载 Android 11 的设备上安装或更新仅通过 APK 签名方案 v1 签名的应用;

如果你的targetSdkVersion修改到30,那么你就必须要加上v2签名才行。否则无法安装和更新;

4、内置屏幕录制;

5、适配不同设备;

        ①、折叠屏支持优化,增加铰链角度传感器API等;

        ②、高刷新率支持;

6、网络优化(新增『动态计量API』,如果检测到连接到无限5G信号,将可以访问最高质量的视频和图片);

Android 12

Android 12 重新发现了代号为 “Columbus”的功能,并且优化了触发问题,新的手势需要更加用力敲击背面。新的双击背面手势可以截取屏幕截图、召唤谷歌 Assistant、打开通知栏、控制媒体播放或打开最近的应用程序列表 - 2021年;

1、AVIF图像支持

为了为您提供更高的图像质量和更有效的压缩,Android 12引入了对AV1图像文件格式(AVIF)的平台支持。AVIF是用于使用AV1编码的图像和图像序列的容器格式。与其他现代图像格式一样,AVIF利用了视频压缩中的帧内编码内容。与JPEG等较旧的图像格式相比,这可以显着提高相同文件大小的图像质量;

AVIF(18.2kB)JPEG(20.7kB)

2、前台服务优化(后台应用无法再启动前台服务);

前台服务是应用程序管理某些类型的面向用户任务的重要方式,但是如果过度使用,它们可能会影响性能,甚至导致应用程序中断。为了确保为用户带来更好的体验,对于以新平台为目标的应用,我们将从后台阻止前台服务启动。为了更轻松地从此模式过渡,我们在JobScheduler中引入了一个新的加急作业,该作业获得了较高的进程优先级,网络访问权限,并且可以在不考虑节电或节电的情况下立即运行。为了实现向后兼容,我们还在最新版本的Jetpack WorkManager库中内置了加急作业。。另外,为了减少用户的注意力,我们现在将某些前台服务通知的显示延迟最多10秒钟。这使短暂的任务有机会在显示通知之前完成;

3、原生的ImageDecoder支持GIF和WebP格式;

4、支持圆角(Display.getRounderCorner()获取屏幕圆角的详细信息);

5、更易用的模糊、色彩滤镜等特效(View.setRenderEffect(RenderEffect) 将特效直接应用于视图);

6、限制对MAC地址的访问;

7、应用覆盖控制:

可以控制是否允许在自己的内容上显示这些覆盖图层,调用Window#setHideOverlayWindows(),表明不允许TYPE_APPLICATION_OVERLAY的窗口显示;

8、应用无法关闭系统对话框(弃用了 ACTION_CLOSE_SYSTEM_DIALOGS intent 操作);

9、Activity/BroadcastReciver/Service 声明了Filter,则必须显示设置android:exported属性;

10、必须为每个PendingIntent设置可变性;

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐