Android7.0适配事项

概述

Android每发一个新版本都多多少少要去做适配的工作,7.0已经出来那么久了,也需要总结下相关的适配事项,要不8.0正式发布后再来记录就真的有点晚了。来看看这一年适配遇到的问题及解决办法吧。

先罗列下开发中遇到的问题(后续有遇到再添加):

  1. 文件访问权限
  2. v2签名问题

文件访问权限

Android现在也越来越重视安全性的问题了,并加大了对隐私的保护力度,这是往好的方向发展。在Android6.0时就引入了动态权限控制(Runtime Permissions),可以让用户很好的管理应用权限了,不再依赖第三方的全家桶。在Android7.0又为用户带来更加安全的操作系统,应用私有目录将被限制访问,最大的影响就是文件共享不能再使用file://这样的uri去分享访问了,会报FileUriExposedException错误。官方也提供了新的类来解决此问题,这个类就是FileProvider。

这个新特性影响的模块有:

  1. 照相功能
  2. 应用间的文件共享

因为照相会生成一个文件uri,这里是file://类型的uri,之前的文件访问了是如此,需要用FileProvider把它改成content://类型的进行访问。

来看下FileProvider的使用吧

首先要在Manifest中注册provider:


    

android:resource的值是自定义的一个xml文件,里面指定了可以访问的目录,例如:



    
        
        
        
    

这里说明下paths的配置:

  1. 代表的根目录: Context.getFilesDir()
  2. 代表的根目录: Environment.getExternalStorageDirectory()
  3. 代表的根目录: getCacheDir()

path的值可以指定为根目录或指定的子目录。

看官方例子的使用:

File imagePath = new File(Context.getFilesDir(), "images");
File newFile = new File(imagePath, "default_image.jpg");
Uri contentUri = getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);

其实就是使用FileProvider的getUriForFile静态方法去做一个转换,转换成content://类型的uri。

另一个要注意的就是当使用intent带file uri时,要添加临时访问权限:

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

关于FileProvider就介绍到这里了,还有不明白的可以多看看官方的文档。

APK Signature Scheme v2

Android 7.0引入了全新的 APK Signature Scheme v2。这是加强对包的校验,启动了新的签名后,像美团的多渠道打包方案在7.0机器上就会报错了,我们当时就遇到了这个问题。

解决的办法也很简单,官方提供了关闭v2签名的方法,只需要在gradle上配置一下即可:

 signingConfigs {
      release {
        .......
        v2SigningEnabled false
      }
    }

在signingConfigs中增加关闭配置即可。

你可能感兴趣的:(Android7.0适配事项)