Android targetSdkVersion从23升级到26适配指南

根据华为开发者平台AppGallery目标 API等级(targetSdkVersion)重要变更要求的通知,自2018年7月18日,华为应用市场联合国内主流应用预置与分发服务提供者,作为发起单位,共同签署电信终端产业协会(TAF)发布的《移动应用软件高API等级预置与分发自律公约》。按照公约规定,自2019年5月1日起,华为应用市场新上架应用应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。自2019年8月1日起,现有应用的更新应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。

这里对本次适配过程中遇到的适配内容做一次总结。

一、自动安装更新适配

     在Android 8.0以后,Google对第三方app安装apk进行了严格的限制,新增了android.permission.REQUEST_INSTALL_PACKAGES权限,如果你的应用想要获得安装apk的权限,必须在manifest中声明此权限。 由于Android向下兼容的关系,targetSdkVersion低于26则不用关心这个,但是现在我们需要适配到26+,如果我们有应用内更新或者下载安装其他apk的需求,就必须要关注安装权限了。

<!--适配Android8.0未知来源应用安装权限--> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

二、FileUriExposedException异常适配

    在targetSdkVersion升级到26之后,在读取媒体库文件(例如调用第三方应用打开PDF文件等)、安装apk的时候会出现崩溃,报错FileUriExposedException。Google认为通过诸如file://URI这样的URI访问文件是不安全的,特别是访问其它应用的私有目录和文件,因此很早就提供了FileProvider这样的东西用于管理文件访问。在Android 7.0+的系统上,Android SDK的 StrictMode 不再允许在应用外部公开file://URI,如果携带file://URI离开自己的应用(访问PackageInstaller,访问相册 etc.),就会抛出FileUriExposedException

 该问题有两种适配方案:

1.FileProvider适配

 在res目录下新建一个xml文件夹,并且新建一个provider_paths的xml文件

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path path="." name="camera_photos" />
    <external-path name="images" path="Pictures/" />
    <external-path name="dcim" path="DCIM/" />
</paths>

在AndroidManifest.xml中添加如下代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    <application
        ...
        <provider

             android:name="android.support.v4.content.FileProvider"

             android:authorities="${applicationId}.fileprovider"

             android:exported="false"

            android:grantUriPermissions="true">

            <meta-data

                 android:name="android.support.FILE_PROVIDER_PATHS"

                 android:resource="@xml/file_paths" />

        </provider>
    </application>
</manifest>

适配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏文超IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值