【移动应用开发技术】详解Android版本适配:9.0 Pie_第1页
【移动应用开发技术】详解Android版本适配:9.0 Pie_第2页
【移动应用开发技术】详解Android版本适配:9.0 Pie_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】详解Android版本适配:9.0Pie

一、前言本文主要是从官方文档中筛选出一些常见的适配项,若有任何纰漏或需要补充的,欢迎大家在评论区指出。二、版本适配1.限制HTTP网络请求Android9.0中限制了HTTP(明文传输)网络请求,若仍继续使用HTTP请求,则会在日志中提示以下异常(只是无法正常发出请求,不会导致应用崩溃):

适配的方法如下:第一种在资源目录中新建一个xml文件作为网络安全配置文件,例如xml/network_security_config.xml,然后在文件中填写以下内容:

在AndroidManifest.xml进行配置:第二种(感谢AllenChiang同学的提醒)Android6.0中引入了是否允许网络使用明文传输的配置:原来默认为true,但在Android9.0中默认值改为了false,因此将配置手动设为true即可解决明文传输被限制的问题2.弃用ApacheHTTPClient由于官方在Android9.0中移除了所有ApacheHTTPClient相关的类,因此我们的应用或是一些第三方库如果使用了这些类,就会抛出找不到类的异常:若需要继续使用ApacheHTTPClient,可通过以下方法进行适配:在AndroidManifest.xml中添加以下内容:或者在应用中直接将ApacheHTTPClient相关的类打包并进行引用3.限制非SDK接口的调用3.1简述一直以来,官方提供的接口分为了SDK接口和非SDK接口。SDK接口即官方支持的接口,开发者可以直接调用不会有任何限制。一般而言,SDK接口都记录在官方的接口索引中,没有记录的就视为非SDK接口,例如一些使用了@hide标注的方法。以往开发者对于非SDK接口的调用通常是利用反射或者JNI间接调用的方式进行,但这样的调用方式如果处理不当会比较容易出现一些未知的错误。为了提升用户体验和降低应用发生崩溃的风险,Android9.0对应用能使用的非SDK接口实施了限制,具体的限制手段请见下表:

此外,为了开发者能够顺利过渡到Android9.0,官方对非SDK接口进行了分类,共分为三类,light-greylist(浅灰名单)、dark-greylist(深灰名单)以及blacklist(黑名单):3.2如何测试应用是否使用非SDK接口可以通过以下方式进行测试(详情请至官方文档):建议使用第三种方式,该工具的扫描结果会列出应用对于三个限制名单中的接口的调用细节。

4.前台服务权限在Android9.0中,应用在使用前台服务之前必须先申请FOREGROUND_SERVICE权限,否则就会抛出SecurityException异常。此外,由于FOREGROUND_SERVICE权限只是普通权限,因此开发者只需在AndroidManifest.xml中注册此权限即可,系统会自动对此权限进行授权:5.强制执行FLAG_ACTIVITY_NEW_TASK要求在Android7.0(API级别24)之前,若开发者需要通过非Activitycontext启动Activity,就必须设置Intent标志FLAG_ACTIVITY_NEW_TASK,否则会启动失败并抛出以下异常

android.util.AndroidRuntimeException:CallingstartActivity()fromoutsideofanActivity

contextrequirestheFLAG_ACTIVITY_NEW_TASKflag.Isthisreallywhatyouwant?

android.util.AndroidRuntimeException:CallingstartActivity()fromoutsideofanActivity

contextrequirestheFLAG_ACTIVITY_NEW_TASKflag.Isthisreallywhatyouwant?

但这个要求在更新Android7.0以后由于系统问题被临时取消了,开发者即使不设置标志也可以正常启动Activity。而在Android9.0中官方修复了这个问题,这个要求重新开始强制执行,因此开发者在适配Android9.0时需要注意这个问题。

6.不允许共享WebView数据目录Android9.0中为了改善应用稳定性和数据完整性,应用无法再让多个进程共用同一WebView数据目录。此类数据目录一般存储Cookie、HTTP缓存以及其他与网络浏览有关的持久性和临时性存储。如果开发者需要在多进程中使用WebView,则必须先调用WebView.setDataDirectorySuffix()方法为每个进程设置用于存储WebView数据的目录。若多进程WebView之间需要共享数据,开发者需自己通过IPC的方式实现。此外,若开发者只想在一个进程中使用WebView,并且希望严格执行这个规则,可以通过在其他进程中调用WebView.disableWebView()方法,这样其他进程创建WebView实例就会抛出异常。7.其他API方面的修改7.1Region.Op相关Android9.0中如果在使用绘图裁剪功能时设置了除Region.Op.INTERSECT或Region.Op.DIFFERENCE以外的类型,就会抛出以下异常:

java.lang.IllegalArgumentException:InvalidRegion.Op-onlyINTERSECTandDIFFERENCEareallowed

java.lang.IllegalArgumentException:InvalidRegion.Op-onlyINTERSECTandDIFFERENCEareallowed具体原因是官方废弃了那几个具有Region.Op参数的裁剪方法,如clipRect(@NonNullRectFrect,@NonNullRegion.Opop):

对于这个问题,可以通过以下方法进行适配:7.2Build.SERIAL被弃用Android9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论