Android 7.0 & 8.0 升级兼容

AGP 8.0升级后,greenDAO编译报错?手把手教你修复Gradle 8.0+下的任务依赖问题 本文详细解析了AGP 8.0升级后greenDAO编译报错的原因,并提供了针对Gradle 8.0+任务依赖问题的完整解决方案。通过显式声明任务依赖关系,开发者可以顺利解决Android Gradle Plugin升级带来的兼容性问题,确保greenDAO代码生成与编译任务正确执行。 阅读详情

一、7.0 问题记录

参考

1. 安装APK报错,FileUriExposedException

2. 调取系统相机崩溃,FileUriExposedException

二、8.0 问题记录

参考

1. 未知来源应用安装权限

2. 针对通知的限制

3. 运行时权限策略变化

4. 针对顶级弹窗的限制

三、7.0 修改记录

版本: 24

环境:三星S7-API24

1. Uri.paurse(file) 无法进行外部应用调用

已发现的场景

  • 拍照
  • 应用内升级
  • 打开/分享文件

错误日志

11-14 14:37:18.799 21548-21548/com.sangfor.pocket W/System.err: android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.sangfor.pocket/cache/20181114_143718.jpg exposed beyond app through ClipData.Item.getUri()

原因分析

引用官方描述:

对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file://URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。如需了解有关权限和共享文件的详细信息,请参阅共享文件。

通俗点就是Android 7.0不允许intent带有“file://”地址的URI离开自身的应用了,要不然会抛出FileUriExposedException,想要在自己应用和其他应用之间共享File数据,只能使用“content://”的地址。

处理方法

  • 第一步: 在app下面的AndroidManifest.xml添加如下内容:
    <!--用来7.0以上手机的文件选择器的跳转-->
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.sangfor.pocket"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
  • 第二步: 在res/xml下添加文件 file_paths.xml :
<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <!--系统相机使用的path-->
    <!--图片文件 - 外部存储地址-->
    <external-path
        name="moa_out_pic_path"
        path="Android/data/com.sangfor.pocket/cache/"/>
    <!--图片文件 - 内部存储地址-->
    <files-path
        name="moa_in_pic_path"
        path=""/>

    <!--分享/打开文件使用到的path-->
    <!-- snagfor 附件文件 - 外部存储地址 -->
    <external-path
        name="moa_sangfor_attachment_path"
        path="sangfor/attachment/"/>
    <!-- snagfor_office 附件文件 - 外部存储地址 -->
    <external-path
        name="moa_sangfor_office_attachment_path"
        path="sangfor_office/attachment/"/>


    <!--自动更新使用到的path-->
    <!-- snagfor apk文件 - 外部存储地址 -->
    <external-path
        name="moa_sangfor_apk_path"
        path="sangfor/apk/"/>
    <!-- snagfor_office apk文件 - 外部存储地址 -->
    <external-path
        name="moa_sangfor_office_apk_path"
        path="sangfor_office/apk/"/>
</paths>

各个标签对应的路径如下表:

tag path
external-path Environment.getExternalStorageDirectory()
files-path /data/user/0/com.xx.xx/files/
cache-path /data/user/0/com.xx.xx/cache/
external-files-path Context.getExternalFilesDir(null);
/storage/emulated/0/Android/data/com.hm.camerademo/files/
external-cache-path Context.getExternalCacheDir();
/storage/emulated/0/Android/data/com.hm.camerademo/cache/
external-media-path Context.getExternalMedi
老旧安卓手机变废为宝:零成本搭建便携Kali Linux渗透测试环境 渗透测试是网络安全领域评估系统安全性的重要方法,其核心原理是通过模拟攻击者的技术手段,发现潜在漏洞。在技术实现层面,Linux系统因其开源特性和丰富的安全工具链,成为渗透测试的首选平台。对于安全爱好者和学习者而言,专业硬件设备往往成本高昂。本文介绍一种极具性价比的工程实践方案:利用闲置的安卓手机,通过Termux终端和PRoot容器技术,在用户空间部署完整的Kali Linux系统。该方案完美融合了移动便携与功能完备性,无需刷机或Root权限,即可运行Nmap、SQLMap等主流安全工具,将老旧设备转化为随 阅读详情

相关推荐

5分钟搞定Cocos Creator安卓打包:用Android Studio一键生成APK(附常见错误修复)

本文详细介绍了如何使用Android Studio快速完成Cocos Creator安卓打包,生成APK文件,并提供了常见错误修复方案。从环境配置到构建流程优化,再到高频问题解决,帮助开发者提升效率,减少打包过程中的困扰。

j0k1l2m3n的博客 276

android 7.1 广播权限,告诉你一个坏消息,Android7.0的自定义广播接收需要权限了!!!...

本篇博客主要介绍如何解决Android7.0新增的广播权限验证问题,这个还得从一个项目上说起,在项目上需要使用广播进行跨进程通信,在7.0之前的版本测试都是OK,在7.0上搞死接收不到发送的广播,关键不是这个,关键是广播因为权限问题被拒接,系统不会报错,也不会抛异常(因为异常被内部捕获了,错了都不知道错在哪,真是坑!!),最后在输出的log中进行全局搜索才确定的问题所在!!!解决方法其实很简单,就...

weixin_39939601的博客 436

安卓应用开发环境

本文会持续更新修改,主要记录在安卓应用开发中,遇到的一些问题和解决方案。

Watom_663的博客 1881

关于intent之android.intent.action.USER_PRESENT的接收与使用

在做解锁监听程序时,一开始采用监听屏幕SCREEN_ON和SCREEN_OFF这两个action。 但奇怪的是,这两个action只能通过代码动态的形式注册,才能被监听到,使用AndroidManifest.xml 完全监听不到。 百度后发现这是PowerManager那边在发这个广播的时候做了限制,限制只能有register到代码中的receiver才能接收。 后来就找各种能静

coder 3万+

Android7.0设备在程序安装之后无法接收android.intent.action.BOOT_COMPLETED广播

Android程序接收设备开机广播的流程如下: 1、定义一个broadcastReceiver,在AndroidManifest.xml中配置intent-filter &lt;intent-filter&gt; &lt;action android:name="android.intent.action.BOOT_COMPLETED" /&gt; &lt;/intent-filter&gt; 2、增加接收开机广播的权限 &lt;!-- 增加接收系统广播权限 --&gt; &lt;use

chali1314的博客 2558

android官方升级包下载安装,安卓7.0正式版安装包下载

安卓7.0正式版安装包是一款针对低端手机打造的安卓系统。目前运行Android 7.0开发者预览版的设备能够第一时间收到推送,而还处于Android 6.0的设备则需要更长时间,用户可以通过线刷的方式来让自己的手机进行升级。【全新功能】分屏多任务进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个APP所占的比例。...

weixin_39696197的博客 1万+

Android app下载更新(包含7.0 8.0适配)

在很多的APP中,我们一般采用的是APP接口链接更新,或者第三方平台更新。 我们现在来说说的是链接下载更新APP。 1.首先添加权限 &amp;lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&amp;gt; &amp;lt;uses-permission android:name=&quot;android.permis...

sqj199567的博客 5136

安卓SDK升级遇到的问题

安卓系统版本与SDK的对应关系 1、android8.0遇到的问题: Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation 原因:谷歌在安卓8.0版本时为了支持全面屏,增加了限制:如果是透明的Activity,则不能固定它的方向,因为它的...

你这泼猴,又打为师的女人 634

Unity安卓打包Gradle Daemon报错:dependencyResolutionManagement方法找不到的根治方案

Gradle作为Android项目的主流构建工具,其核心机制在于通过声明式脚本管理依赖与任务。Gradle Daemon作为常驻进程,旨在加速构建,但其版本兼容性问题常引发构建失败。dependencyResolutionManagement是Gradle 7.0+引入的依赖解析管理DSL,用于集中配置仓库,提升项目管理效率。当旧版Gradle(如Unity 2022默认的6.x)遇到包含此新语法的构建脚本时,会因方法无法识别而报错,导致构建流程中断。这在Unity安卓打包场景中尤为常见,通常源于Unity

weixin_34127717的博客 401

android的guava库冲突,处理guava-21.0兼容Android错误:DexArchiveBuilderException: Failed to process guava-21.0.j...

Android项目里使用guava-21.0报错:Error:com.android.builder.dexing.DexArchiveBuilderException:FailedtoprocessC:\Users\cc\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\21.0\3a3d111be1be1b745edf...

weixin_39810856的博客 711

Unity Android打包避坑:compileSdkVersion升级的版本匹配原则与实战

Android应用开发中,构建工具链的版本兼容性是确保项目稳定打包的核心基础。Gradle作为主流的构建系统,其与Android Gradle Plugin(AGP)、Android SDK版本之间存在着严格的依赖关系链。理解这套依赖原理,对于避免构建失败、提升开发效率具有重要技术价值。尤其在游戏开发领域,Unity引擎与Android原生构建环境的集成,使得版本匹配问题更加复杂。本文聚焦于Unity项目打包Android时常见的compileSdkVersion升级陷阱,通过分析“Manifest me

weixin_30940783的博客 392

GreenDao在Gradle 8.0下的完整配置指南:从插件安装到实体类生成

本文详细介绍了在Gradle 8.0环境下配置GreenDao的完整流程,包括插件安装、实体类生成及常见问题解决方案。针对Gradle 8.0的API变更,提供了版本兼容对照表和优化建议,帮助开发者高效集成GreenDao到Android项目中,实现数据库的快速开发与管理。

5b6n7m8的博客 184

2020版本Unity项目发布到GooglePlay: 要求Target API Level 35(Android 15)和Play 结算库版本必须更新到版本 6.0.1 或更高版本

当前unity版本:Unity2020.3.38f1,打包API level 35失败,与Unity版本,Gradle版本,JDK版本有关,不兼容

libobo666的博客 36

Android Studio Narwhal:AGP 8.7+ 与 Gradle 8.9 构建范式重构指南

Android Studio Narwhal(2025)标志着 Android 构建体系从脚本驱动到模型驱动的根本性演进。其核心在于 AGP 8.7+ 作为语义中枢、Gradle 8.9+ 作为执行底座的主从协同架构,彻底摒弃 Groovy 脚本与废弃 API,强制采用 Kotlin DSL 声明式配置。这一转向不仅消除了‘deprecated gradle features’等兼容性警告,更通过内存中 Project Model 实现编译前静态分析、实时依赖推演与增量构建优化,显著提升大型项目构建与 ID

daxi1047的博客 477

怎么用 tauri 创建编译 android 应用程序

怎么用 tauri 创建编译 android 应用程序

小妖666个人笔记 929

Cocos Creator 3.8 Android打包APK报错与版本兼容排查指南

Android应用构建流程中,Gradle、AGP(Android Gradle Plugin)与JDK之间的版本匹配是决定构建成败的基础。AGP 8.x强制要求JDK 17,而Gradle版本又需与AGP严格对应,任何一环脱节都会引发同步失败、资源编译出错或诡异的运行期异常。理解这些底层机制,有助于快速定位构建链路中的典型故障,例如Unsupported class file major version、AAPT2资源处理失败及NDK工具链缺失。掌握命令行编译、日志分析和手动配置技巧,能显著提升打包效率

weixin_34354945的博客 715

Android Studio 为自己的应用程序添加自动更新功能

最近在完善自己开发的移动办公系统,为系统添加了检测版本以及更新版本的功能,检测版本实现很简单,只需要对比服务器返回的版本号就知道需不需要更新,而自动更新功能则相对复杂点,这里记录下。 先来看下后端是如何下载应用程序的。 /* * app下载 */ @Override public String appDownload(Params params,HttpServletResponse response) { JSONObject jsonObject = new JSONObject(

weixin_41233219的博客 5357

React Native 0.55环境搭建与版本控制实战指南

在跨平台移动开发领域,版本控制是保证构建稳定性的关键技术。React Native作为混合开发框架,其环境配置涉及Node.js、Java和Android工具链的版本协同。本文以RN 0.55为例,详解Windows环境下如何通过精确锁定Node 12.2.0、JDK 8u202等组件版本,解决Gradle插件兼容性、metro打包器配置等典型问题。针对Windows特有的PATH超长、文件监视限制等系统级问题,提供注册表修改和杀毒软件白名单等工程实践方案。通过Android Studio 3.1.4的兼容

weixin_34391445的博客 658
上一篇: Response 的头部没有 Content-Length
下一篇: Zxing库解析类源码分析(不含算法)
ICodeMan
博客等级 码龄11年 9粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值