起源 在targetSdkVersion为30的情况下,在Android 11的小米10手机上运行,调用ToastUtil的时候闪退报错: null cannot be cast to non-null type android.widget.LinearLayout 且看已知条件: targetSdkVersion 30 Android 11 小米10 文末附Android 11适配手册 定位问题 view as LinearLayout 现在看来其实是没有错的,事实上运行在Android11以下也确实没问题。 适配方案 综上所诉,适配方案也了然于心了。 Android 11开发手册 《Android 11 开发者手册》
何为适配,适配就是当我们的开发环境、运行环境等发生变化的时候,程序依然能稳健运行。 而适配中最难为程序员的就是Android了,除了开发环境、运行环境等因素之外,因为Android开源的原因,还要适配各大厂商。。 而适配条件之多,经常让Android程序员为之头疼。 来看看相机、相册相关的适配历程: Android 6 权限适配 Android 7 文件适配 Android 10/11 存储适配 ok,接下来以一个更换头像的小例子来讲解一下。 适配二: intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri) android 11以后强制分区存储,外部资源无法访问,所以添加一个输出保存位置photoUri Android 11开发手册 《Android 11 开发者手册》 参考 官方相机文档 官方权限文档 官方存储文档
是时候适配一波Android11了,为后面项目适配铺平道路。 介绍 2020年6月11日,Google正式推送了Android 11 Beta版本,同年年9月9日正式发布。 开始适配Android 11。 隐私变更 强制执行分区存储机制 为了避免存储空间的读写权限被滥用,手机中存在着大量不明文件,且应用卸载后也没有删除掉。 android:requestLegacyExternalStorage="true" 但是这个适配方法在Android 11中已经失效,必须按照存储机制来乖乖适配,不一样的是Android 11允许使用 的同时不能请求其它权限,否则系统会抛出异常(在没研究Android 11适配的时候,我就已经发现了这个bug,当时以为是系统的bug,还截了两张图,后面仔细查看,找资料才发现是Android 11的变更 如何适配呢?在之前接入微信支付的时候,文档就有提示Android 11 第三方应用无法拉起应用适配,适配方案为在主工程的AndroidManifest.xml 中增加 <queries> 标签。
❝「是的,你没看错,现在就要带你适配 Android13」。 ,所以本篇也是结合 Oppo 的 Android 13 应用兼容性适配指导 和官方提供的一些文档内容做一个整理测试。 image-20220520154519270 目前 Android 13 主要的兼容问题还是在于隐私权限上,所以本次的适配指南相关内容也是着重在这一部分, 「这里涉及面比较广的应该就是相册和通知权限」 MediaStore.ACTION_PICK_IMAGES); 就可以打开,支持视频、音频、图片分类,支持多选和单选」 ,另外官方也表示过,这个特性不仅仅会在 Android 13 中出现,谷歌还会将其放置到 Play 商店中,向 Android 11 ❝「注意」:这是受到“硬性限制”的权限,除非设备的安装程序针对你的应用将该权限列入了许可名单,否则你的应用将无法获得此权限,如需了解详情,请参阅有关受限权限的指南。
唯鹿 读完需要 11 分钟 速读仅需4分钟 作者:唯鹿 链接:https://juejin.im/post/5d48bfece51d4561f17a5055 1 前言 国内从去年开始就有消息说,应用上架或者更新要求 TargetSdkVersion最低要为26以上,也就是最低也要适配到8.0。 其实如果你的页面不需要全屏显示,那么不需要额外的适配工作。 如果页面是全屏显示(比如启动页)。为了防止你的内容被遮挡,大部分场景下都是可以使用获取状态栏高度来处理遮挡的适配问题。 当然,如果你想利用起来刘海区域,就需要获取刘海位置等信息进行适配。 在Android 9.0中官方提供了DisplayCutout 类,可以确定刘海区域的位置,国内的部分厂商在8.0就有了自己的适配方案。
light 适配浅色主题,dark 适配深色主题,no-preference 表示获取不到主题时的适配方案。 那么针对项目的深色模式适配方案也一样,主要分为三步:一、组件库深浅色主题 适配;二、项目中深浅色的颜色适配;三、 完成 CSS 变量到页面的注入。 ,可以保持适配前的样式。 至此就实现了一套完整的深色模式适配方案。 native 深色适配 iOS 在 iOS 系统中,开发者从颜色和图片两个方面来进行适配,我们不需要关心切换模式后该怎么操作,因为这些都由系统帮我们实现。 颜色的适配,需要使用系统提供的 API,在回调用中不同的模式下分别设置颜色,而图片的适配,需要在 XCode 的 工具栏中 Appearances 下选择 Any,Dark,在同一名称资源的配置下分别添加图片资源
Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; 然而这正是我们平时用的很多的 Api,所以不必太在意,浅灰名单属于非常低级别的警告, 客户端适配迫切需要解决的是 系统将根据应用所属的群组限制每个应用可以访问的设备资源: 活跃 如果用户当前正在使用应用,应用将被归到“活跃”群组中,例如: 应用已启动一个 Activity 应用正在运行前台服务 应用的同步适配器与某个前台应用使用的
今天就和大家一起看看Android11到底改了些什么,以及最重要的,我们需要怎么适配?targetversion不改到30,是不是就不用适配了呢? 以下我分为两部分讲述,分别是 以Android11 为目标版本的应用(targetSdkVersion>=30才有影响)⭐ 所有应用在Android11设备上适配改动(无论targetSdkVersion Tips:此适配文章会不间断更新,根据Android11发布进度调整,欢迎点赞关注。 但是Google Play可不一定能滥用哦,它为需要QUERY_ALL_PACKAGES 权限的应用会提供相关指南,但是还没出来,具体要看后面的消息了。 至于国内市场。。。 android:foregroundServiceType="location|camera|microphone" /> </manifest> 适配Android11手机 此模块的修改内容针对所有项目在
目录 项目简介 bcal 工具介绍 适配 HarmonyOS 的准备工作 构建脚本实现 遇到的问题与解决方案 构建结果验证 使用示例 总结 项目简介 bcal (Byte CALculator) 是一个 适配 HarmonyOS 的准备工作 1. '15 kib + 15 gib \n r / 5' | bcal -m # 从文件输入 $ cat expr 15 gib + 15 kib r / 5 $ bcal -m < expr 总结 适配要点
下面,从以下两个方面来探究APP完美适配全面屏手机的方法: 更大的屏幕高宽比例 虚拟导航键(NavigationBar) 屏幕高宽比例 由于全面屏手机的高宽比比之前大,如果不适配的话,Android默认为最大的宽高比是 1.86(即16:9),小于全面屏手机的宽高比,因此在全面屏手机上打开没有适配全面屏的App时,上下就会显示空白空间。 针对此问题,Android官方提供了适配方案,即提高App所支持的最大屏幕纵横比,实现起来也比较简单,在AndroidManifest.xml中做如下配置即可: <meta-data android:name ; 虚拟导航键适配 适配虚拟导航键是适配全面屏的重要内容,由于不同手机厂商对系统做了不同的修改,因此对系统界面底部的NavigationBar处理方式也就各不相同。 那么,对于开发者来说,怎么知道是否开启了虚拟导航键呢,又如何进行适配呢?
背景 最近在项目中着手做Android10和Android11 适配时候,期间遇到了不少的坑。之前有专门写过qq、微信分享的适配。但是此次在针对偏业务侧适配工作的时候还是碰到了一些新的问题。 但是,这里有个坑: 在Android10上不行,在Android11上又可以!!为什么? 因为Google改回来了,让Android11支持file://格式了。。。。 (wtf? 三、终极适配方案 在Android10上 开启标志位 :android:requestLegacyExternalStorage="true"来开启兼容模式,关闭分区适配,相当于targetSdkVersion 在Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。 答: 如果按照上面正常适配,肯定完全没得问题!
Android 11 应用兼容性适配指导 本文档基于谷歌Android 11 Developer Preview 4(DP4)版本的变更输出,后续Beta版如有新的变更和特性,我们会刷新文档的相关章节内容 如果您需要对已安装的应用进行适配分区存储的数据迁移,则可以在应用更新到目标平台为Android 11版本后仍暂时保留原有的存储模式。 3 适配指导 (1)Target Android 11 使用自定义的UI界面向用户展示申请ACCESS_BACKGROUND_LOCATION权限原因和过程。 Firebase JobDispatcher迁移指南: https://developer.android.google.cn/topic/libraries/architecture/workmanager /migrating-fb GcmNetworkManager迁移指南: https://developer.android.google.cn/topic/libraries/architecture
Environment.isExternalStorageLegacy();//存储是否为兼容模式 在适配Android11的时候requestLegacyExternalStorage 标签会在Android11 Android10适配的时候可以通过requestLegacyExternalStoragec使用兼容模式; Android11适配可以通过preserveLegacyExternalStorage让Android10 及一下的设备使用兼容模式,但Android11及以上的设备无论是覆盖安装还是重新安装都无法使用兼容模式; 可以通过调用 Environment.getExternalStorageState() 查询该卷的状态 适配指导 Android Q Scoped Storage新特性谷歌官方适配文档:https://developer.android.google.cn/preview/privacy/scoped-storage 适配指导如下,分为:访问APP自身App-specific目录文件、使用MediaStore访问公共目录、使用SAF 访问指定文件和目录、分享App-specific目录下文件和其他细节适配。
单独请求在后台访问位置信息 正如有关如何在运行时请求位置信息访问权限的指南中所述,您应该执行递增位置信息请求。如果您的应用以 Android 11 或更高版本为目标平台,系统会强制执行此最佳做法。 如需了解详情,请参阅有关如何审核对数据的访问权限的指南。 简单描述一下该功能的使用,创建一个带标记的Context。 总结 Android11的适配和Android10适配最好一起进行,因为这两个版本相关隐私变更对开发者的影响主要是分区存储相关的适配导致的业务逻辑修改。 ,我们在进行Android11适配的时候会更加容易; 在进行Android11相关分区存储适配时,应用内的相关媒体操作我们授权存储权限之后还可以是用File API。 参考文章:拖不得了,Android11真的要来了,最全适配实践指南奉上
: 注意:当您将应用更新为以 Android 11(API 级别 30)为目标平台后,如果应用在搭载 Android 11 的设备上运行,系统会忽略 requestLegacyExternalStorage 这段信息,简单可以理解为 requestLegacyExternalStorage=true 只能解燃眉之急,到了 Android 11 上,还是要做适配工作。 ,如果应用在 Android 11 的设备上运行,系统会忽略 requestLegacyExternalStorage属性,强制开启分区存储。 3、如果 App 中有通过 File Api 访问外部存储共有目录的代码,还是要需做适配的,至于怎么去做本文就不再讨论了 教训 绕了一圈之后,得出两个教训: 适配新版本的时候,最好先用真机测试一下,万一完美运行就不用适配了 认真读文档、认真读文档、认真读文档 Glide 加载缩略图 最后,说个与适配不太相干的话题,只想看适配内容的朋友可以先跳过了。
Android 11 (R) Android 11 (R) 在 Android 10 (Q) 中分区存储的基础上进行了调整。 1. 新增执行批量操作 为实现各种设备之间的一致性并增加用户便利性,Android 11 向 MediaStore API 中添加了多种方法。 缺点当然是不强制启用的话,国内 APP 适配进度估计得延后了。不过好消息是在查资料的时候,看到了国内大厂的相关适配文章,至少说明大厂在跟进了。 关于适配的难度: 对绝对路径相关接口依赖比较深的 APP 适配还是改动挺多的;其次权限的划分很细,什么时候需要什么权限以及调用哪个接口,理解起来需要一定时间; MediaStore API SAF API 所以虽然明年才会强制执行分区存储,但还是建议尽早理解和 review 项目中需要适配的代码。
导语 本文主要是对iOS 11下APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。 一、iOS 11下APP中tableView内容下移20pt或下移64pt的原因分析 问题如下图所示: 1. 安全区域是iOS 11新提出的,如下图所示: 安全区域帮助我们将view放置在整个屏幕的可视的部分。 通过设置iOS 11新增的属性addtionalSafeAreaInset; iOS 11之前,大家是通过将Controller的automaticallyAdjustsScrollViewInsets 那样写是不规范的,只实现高度,而没有实现view,但代码这样写在iOS 11之前是没有问题的,iOS 11之后应该是由于开启了估算行高机制引起了bug。
作为第一个强制要求分区存储的 API 级别,Android 11无疑是近几年适配工作较为复杂的版本,各个 APP 的适配进度也被寄予期盼。 二、变更要点 2.1 包可见性 适配 Android 11 之前,APP可以获取到手机已安装的应用列表信息。 适配 Android 11 后,Mac 地址和 ICCID 的获取都受限了。 APP 无需权限就可以读写属于它的应用私有目录,这点在适配 Android 11前后都没有变化。 3.1 精确定位范围 部分业务较多的产线比较少直接操作存储或调用了需适配的 API,因此 Android 11 的适配理论上应该尽可能少地对他们产生影响。
| 导语 本文主要是对iOS 11下企鹅 FM APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。 一、iOS 11下APP中tableView内容下移20pt或下移64pt的原因分析 问题如下图所示: ? 1. 安全区域是iOS 11新提出的,如下图所示: ? 安全区域帮助我们将view放置在整个屏幕的可视的部分。 通过设置iOS 11新增的属性addtionalSafeAreaInset; iOS 11之前,大家是通过将Controller的automaticallyAdjustsScrollViewInsets 那样写是不规范的,只实现高度,而没有实现view,但代码这样写在iOS 11之前是没有问题的,iOS 11之后应该是由于开启了估算行高机制引起了bug。