Android7.0适配事项

作者: dylanhuang88 | 来源:发表于2017-04-20 20:34 被阅读279次

概述

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:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.dylan.demo.fileprovider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/paths" />
</provider>

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <files-path name="internal_files" path="/"/>
        <external-path name="external" path="/files" />
        <cache-path name="internal_cache" path="/" />
    </paths>
</resources>

这里说明下paths的配置:

  1. <files-path/>代表的根目录: Context.getFilesDir()
  2. <external-path/>代表的根目录: Environment.getExternalStorageDirectory()
  3. <cache-path/>代表的根目录: 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适配总结

    Android7.0适配注意事项 权限更改 Android6.0引入了动态权限控制(Runtime Permiss...

  • 图片处理工具

    Android7.0 完美适配——FileProvider 拍照裁剪全解析 适配 android7.0 中的拍照相...

  • Android7.0适配事项

    概述 Android每发一个新版本都多多少少要去做适配的工作,7.0已经出来那么久了,也需要总结下相关的适配事项,...

  • Android7.0的适配

    关于Android7.0的适配 最近在软件的维护和更新过程中,了解到一些关于Android7.0的适配,在这里和大...

  • Appium适应Android7.0

    Appium适配Android7.0以上版本 测试机型: 华为荣耀V9 安卓版本: Android7.0 appi...

  • Android WebView 调用系统拍照和相册

    由于本应用版本较低 未写Android7.0以上权限适配和文件读取适配; mWebView.setWebViewC...

  • Android7.0

    详解7.0带来的新工具类:DiffUtil Android7.0适配心得

  • Android 7.0权限的适配

    公司的需求,做了一下android7.0适配,适配7.0主要就是对手机本地文件的Uri做转换处理。7.0的适配,就...

  • RecyclerView+PopupWindow实现下拉列表选择

    已适配Android7.0 popuwindow全屏显示问题 实现主要代码: 条目点击事件接口: 调用: 源码地址...

  • Android7.0适配

    1、文件相关 fileproviderhongyang 2、popupwindow android 7.0bug,...

网友评论

    本文标题:Android7.0适配事项

    本文链接:https://www.haomeiwen.com/subject/yezlzttx.html