Android 2分钟刷Android 8.0系统 和 8.0适配 完美方案

 

1.Android 3步搞定事件分发机制,再也不用担心onTouch和onTouchEvent&dispatchTouchEvent

https://blog.csdn.net/WHB20081815/article/details/62888575

2.Android 滑动冲突的完美解决方案 listview和scroView

https://blog.csdn.net/WHB20081815/article/details/88617041

3.Android 深入理解 View 的绘制流程和机制

https://blog.csdn.net/WHB20081815/article/details/62236641

4.Android 5.0 6.0 以及7.0新特性 MD风格 敏感权限 文件访问

https://blog.csdn.net/WHB20081815/article/details/70244065

5.Android 万能适配方案和UI屏幕适配 不同分辨率 最全面 最易懂的

https://blog.csdn.net/WHB20081815/article/details/76937801

6.Android 2分钟刷Android 8.0系统 和 8.0适配 完美方案

https://blog.csdn.net/WHB20081815/article/details/75669925

7.Android快速理解Activity、View及Window&WindowManager之间关系

https://blog.csdn.net/WHB20081815/article/details/62419059

 

 

 

 

本文将从以下3个方面详细介绍Anroid 8.0完美适配

1).快速刷Anroid 8.0系统

2).应用API的主要修改,源代码详解,值得注意的地方

3).Anroid O新特性,行为变更

 

一).2分钟刷新Android 8.0的系统

 

1. Google O 版本的 O正式版已经发布, O-preview 的 SDK 下载地址: https://android.googlesource.com/platform/external/selinux/+/android-o-preview-1 

 

4.Google   源码托管地址:https://android.googlesource.com/platform/packages       需要翻墙才能用

 

5.API差异:https://developer.android.google.cn/sdk/api_diff/26/changes.html

 

6. Google O 版本的 O-正式版  source code 下载方法: <a href=""https://source.android.com/source/downloading.html">https://source.android.com/source/downloading.html 

 

7. 目前 Nexus5X、Nexus6P、Nexus Player、Pixel C、Pixel、Pixel XL 可以升级 O 版本,

下载地址如下:https://developer.android.google.cn/preview/download.html#flashable-images

 

根据:opp4知道:是preview4,现在下载的最新版本是Android 8.0正式版本

  

 

最好采用的机器:Nexus6P:是谷歌系统,由华为代工

 

      建议采购 Nexus6P手机做自验证,O 版本(不包括 O)以后,Nexus 设备将不会再支持 android 新系统。

Android 新系统都会 第一时间支持自家手机。 刷手机的方法:

 

刷机流程如下:刷机有风险,操作需谨慎

 

从下面地址下载对应的镜像压缩包和脚本。

https://developer.android.google.cn/preview/download.html#flashable-images

 

 1.下载对应设备的压缩包并解压;

 2.手机连上 USB 后,执行 adb reboot bootloader 命令;

 3.等手机出现小机器人以后,并且显示‘unlock’字样时,执行压缩包中的 bat 脚本。

 如果是‘lock‘字样:

 1.连续点击设置-版本号 3 次,打开开发人员选项;

 2.在开发人员选项中打开 OEM unlock;

 3.连接手机到电脑,执行 adb reboot bootloader 命令到小机器人界面; 

 4.执行fastboot flashing unlock ,因为有些手机下面执行失败

 5.执行 fastboot oem unlock,这样手机就解锁了,再使用上面的刷机方法即可。

 

刷机流程总结:解锁,下载镜像,执行脚本就OK了,只需要10分钟解决

 

 没有 6P 等支持 O 版本的手机,怎么办?

 A.可以使用华为终端开放实验室 OpenLab 云测试平台进行兼容性测试和远程调测。 

平台介绍及使用说明:https://deveco.huawei.com/manualinstuction。

云测试平台: https://deveco.huawei.com,可以利用该平台选择 Nexus 6P 复现 O 版本的问题。 

 

fastboot工具:Android studio里面自带了fastboot

 

刷机注意的问题:

1.机型和镜像系统要对应

 

变更的东西:

 1. Google O 版本版本计划: https://developer.android.google.cn/preview/overview.html#timeline

 2. Google O 版本主要行为变更: https://developer.android.google.cn/preview/behavior-changes.html#o-apps

 需要重点关注 Background execution limits、Permissions 和 Security 

 

二).Android 8.0系统的主要行为变更

 

分为俩部分,针对所有 API 级别的应用针对 Android 8.0 的应用

针对所有 API 级别的应用,需要特别关注的如下几个重点

 

1)后台运行限制

Android 8.0 还对特定函数做出了以下变更:

  • 如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一个 IllegalStateException
  • 新的 Context.startForegroundService() 函数将启动一个前台服务。现在,即使应用在后台运行,系统也允许其调用 Context.startForegroundService()。不过,应用必须在创建服务后的五秒内调用该服务的startForeground() 函数

     

    3).安全相关的变化

     

  • 此平台不再支持 SSLv3。
  • 在与未正确实现 TLS 协议版本协商的服务器建立 HTTPS 连接时,HttpsURLConnection 不再尝试回退到之前的 TLS 协议版本并重试的权宜方法。
  • Android 8.0 将使用安全计算 (SECCOMP) 过滤器来过滤所有应用。允许的系统调用列表仅限于通过 bionic 公开的系统调用。此外,还提供了其他几个后向兼容的系统调用,但我们不建议使用这些系统调用。
    • 现在,您的应用的 WebView 对象将在多进程模式下运行。网页内容在独立的进程中处理,此进程与包含应用的进程相隔离,以提高安全性。

3).隐私策略变化  AndroidID

 

  • 对于在 OTA 之前安装到某个版本 Android 8.0(API 级别 26)的应用,除非在 OTA 后卸载并重新安装,否则 ANDROID_ID 的值将保持不变。要在 OTA 后在卸载期间保留值,开发者可以使用密钥/值备份关联旧值和新值。
  • 对于安装在运行 Android 8.0 的设备上的应用,ANDROID_ID 的值现在将根据应用签署密钥和用户确定作用域。应用签署密钥、用户和设备的每个组合都具有唯一的 ANDROID_ID 值。因此,在相同设备上运行但具有不同签署密钥的应用将不会再看到相同的 Android ID(即使对于同一用户来说,也是如此)。
  • 只要签署密钥相同(并且应用未在 OTA 之前安装到某个版本的 O),ANDROID_ID 的值在软件包卸载或重新安装时就不会发生变化。
  • 即使系统更新导致软件包签署密钥发生变化,ANDROID_ID 的值也不会变化。

    要借助一个简单的标准系统实现应用获利,请使用广告 ID。广告 ID 是 Google Play 服务针对广告服务提供的唯一 ID,此 ID 可由用户重置。4

    4).

    4.记录未捕获的异常

    如果某个应用安装的 Thread.UncaughtExceptionHandler 未移交给默认的 Thread.UncaughtExceptionHandler,则当出现未捕获的异常时,系统不会终止应用。从 Android 8.0 开始,在此情况下系统将记录异常堆栈跟踪情况;在之前的平台版本中,系统不会记录异常堆栈跟踪情况。

    我们建议,自定义 Thread.UncaughtExceptionHandler 实现始终移交给默认处理程序处理;遵循此建议的应用不受 Android 8.0 此项变更的影响。

    5.集合的处理

    现在,AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 始终引发 NullPointerException;之前,当集合为空时不会引发NullPointerException。此项变更使行为符合文档要求。

    在 Android 8.0 中,Collections.sort() 是在 List.sort() 的基础上实现的。在 Android 7.x(API 级别 24 和 25)中,则恰恰相反。在过去,List.sort() 的默认实现会调用 Collections.sort()

此项变更使 Collections.sort() 可以利用优化的 List.sort() 实现,但具有以下限制:

  • List.sort() 的实现不能调用 Collections.sort(),因为这会导致堆栈因无限递归而溢出。相反,如果您需要 List 实现的默认行为,应避免重写sort()

    如果父类以不适当的方法实现 sort() ,通常最好使用在 List.toArray()Arrays.sort() 和 ListIterator.set() 的基础上构建的实现重写List.sort()。例如:

    @Override
    public void sort(Comparator<? super E> c) {
      Object[] elements = toArray();
      Arrays.sort(elements, c);
      ListIterator<E> iterator = (ListIterator<Object>) listIterator();
      for (Object element : elements) {
        iterator.next();
        iterator.set((E) element);
      }
    }
    public void sort(Comparator<? super E> c) {
      Object[] elements = toArray();
      Arrays.sort(elements, c);
      ListIterator<E> iterator = (ListIterator<Object>) listIterator();
      for (Object element : elements) {
        iterator.next();
        iterator.set((E) element);
      }
    }

    在大多数情况下,您也可以使用根据 API 级别委托给其他默认实现的实现重写 List.sort()。例如:

    @Override
    public void sort(Comparator<? super E> comparator) {
      if (Build.VERSION.SDK_INT <= 25) {
        Collections.sort(this);
      } else {
        super.sort(comparator);
      }
    }
    public void sort(Comparator<? super E> comparator) {
      if (Build.VERSION.SDK_INT <= 25) {
        Collections.sort(this);
      } else {
        super.sort(comparator);
      }
    }

    如果您选择后者只是因为您希望开发一种适用于所有 API 级别的 sort() 函数,可以考虑赋予其一个唯一的名称,例如 sortCompat(),而不是重写sort()

  • 现在,Collections.sort() 只是对调用 sort() 的 List 实现进行的一项结构性修改。例如,在 Android 8.0 之前的平台版本中,如果通过调用List.sort() 进行排序,则当迭代处理 ArrayList 以及在迭代过程中调用 sort() 时,会引发 ConcurrentModificationException。而Collections.sort() 则不会引发异常。

    此项变更使平台行为更加一致:现在,两种方法都会引发 ConcurrentModificationException

 影响面向android O  8.0应用的:

1.后台限制 
(1)startService() 将抛出 IllegalStateException 
(2)限制在AndroidManifest.xml中注册接收隐式广播,如ACTION_PACKAGE_REPLACED ,但也有些例外如ACTION_BOOT_COMPLETED,ACTION_LOCALE_CHANGED(所有例外参考文末连接)。(注意此部分限制都是只针对targetSdkVersion为android O,或者编译的SDK为android O及以上的的,低于的则不受影响)

2.隐私相关变化 
(1)获取系统属性net.dns1、net.dns2、net.dns3 和 net.dns4不再可用 
(2)不再支持 Build.SERIAL,而改为 Build.getSerial()

3.本地库变化 
在Android O上强制要求Segment不能同时具备写和可执行,如数据段不可执行,代码段不可写。

4.ContentProvider的变更通知 
调用 ContentResolver.notifyChange()和registerContentObserver(Uri, boolean, ContentObserver) 实现通知和监听某些Uri上的变化,在Android O上则要求uri对应的ContentProvider要正确定义,但是没有定义会有怎样的问题并没有提及

5.应用快捷方式变化 

 

以com.android.launcher.action.INSTALL_SHORTCUT广播方式创建快捷方式不再有效,而要使用 ShortcutManager的 requestPinShortcut()方法。

3.网络连接及HTTPS相关:在connect失败之后,调用send(DatagramPacket)会抛出SocketException,以及其他一些细节的变化 

 

6.其他 
Alter Window的显示,集合排序方法的变化和获取用户帐号权限变化等。

 

三.Android 8.0新特性

Android O 新特性一   通知渠道 — Notification

创建通知渠道的步骤:

  1. 创建 NotificationChannel 对象,并设置应用内唯一的通知 ID。
  2. 配置通知渠道的属性,比如提示声音等。
  3. 在 NotificationManager 中注册通知渠道对象。

Android O 新特性二自适应图标 —Adaptive Icons

Android 的屏幕适配一直以来都折磨着不少的开发者。为了帮助开发者更好的与设备 UI 集成,Android O 支持创建自适应图标,

系统可以基于设备选择的蒙版将这些图标显示为不同形状。系统还将实现与图标的自动交互,并在启动器、快捷方式、设置、共享对话框以及概览屏幕中使用它们。

 

在以前的 Android 版本中,图标大小定义为 48 x 48 dp。现在你必须按照以下的规范定义你的图层大小:

  1. 两张图层大小都必须为 108 x 108 dp。
  2. 图层中心 72 x 72 dp 范围为可视范围。
  3. 系统会保留四周外的 36dp 范围用于生成有趣的视觉效果(如视差和跳动)。

 

Android O 新特性三画中画模式 — PIP

 

Android O 现已支持 Activity 的画中画模式。PIP 是一种多窗口显示模式,多用于视频播放,即你可以一边发微信一边看视频。

 

画中画模式图示

开发指南

1> 关于生命周期

PIP 模式不会改变 Activity 的生命周期。在指定时间只有最近与用户交互过的 Activity 为活动状态。 该 Activity 将被视为顶级 Activity。 所有其他 Activity 虽然可见,但均处于暂停状态。当一个 Activity 处于 PIP 模式时,其实它是出在暂停状态,但其内容会继续展示。

2> API变更

在 Android O 中新增 PictureInPictureArgs 对象来指明你的 Activity 在 PIP 模式中的属性,比如长宽比等。

Android O 还新增了以下方法来支持 PIP。

  1. Activity.enterPictureInPictureMode(PictureInPictureArgs args):将Activity置于 PIP 模式之下。
  2. Activity.setPictureInPictureArgs():用于更新 Activity 在 PIP 模式下的设置。如果 Activity 正处于 PIP 模式之下,那么更改的属性将立即生效。

     

参考链接

http://blog.csdn.net/w7849516230/article/details/68935953

 

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
移植 Android 8.0 的 kernel.img 是指将 Android 8.0 的内核移植到其他硬件平台上的过程。这个过程可以分为以下几个步骤。 首先,需要了解目标硬件平台的架构和规格,以便知道要移植的内核需要做哪些适配和修改。比如,了解目标硬件的处理器类型、内存大小、设备驱动等信息。 其次,下载 Android 8.0 的内核源代码,并配置正确的编译环境。根据目标硬件平台的架构,进行编译设置,例如选择合适的交叉编译工具链。 然后,根据目标硬件平台的需求,对内核源代码进行适配和修改。这可能包括添加或修改设备驱动、调整内存管理、更新中断处理等方面的工作。还需要根据目标硬件平台的特性进行配置调整,如开启或关闭特定功能模块。 在完成修改后,进行内核编译。根据编译环境和目标硬件平台的要求,进行编译操作。编译过程中可能会出现一些错误和警告,需要进行适当的处理和修正。 最后,编译成功后,将生成的 kernel.img 分别烧录到目标硬件设备上。确保设备启动时加载新内核,并对其进行测试和调试,以确保内核移植的准确性和稳定性。 总结来说,移植 Android 8.0 的 kernel.img 需要了解目标硬件平台的架构和规格,并进行适配和修改。然后进行编译和烧录测试。这个过程需要对内核的架构和编译环境有一定的了解和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值