是时候适配一波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> 标签。
起源 在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 开发者手册》
背景 最近在项目中着手做Android10和Android11 适配时候,期间遇到了不少的坑。之前有专门写过qq、微信分享的适配。但是此次在针对偏业务侧适配工作的时候还是碰到了一些新的问题。 一、 私有目录下资源访问 存在这样一个场景:我们要分享一张图片到qq或者微信,首先第一步是要是得到这个bitmap(通过本地生成或者网络加载),然后存储到本地sd卡上,最后把存储的图片的绝对路径传给qq 在以上的场景中,涉及到了这些关键点: 把图片存储到sd卡 把绝对路径path传递给qq或者微信 1.1 直接访问sd卡的根目录 通过FileOutPutStream来完成,在Android10以下都没问题 但是,这里有个坑: 在Android10上不行,在Android11上又可以!!为什么? 因为Google改回来了,让Android11支持file://格式了。。。。 (wtf? 在Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。
Android 11 应用兼容性适配指导 本文档基于谷歌Android 11 Developer Preview 4(DP4)版本的变更输出,后续Beta版如有新的变更和特性,我们会刷新文档的相关章节内容 如果您需要对已安装的应用进行适配分区存储的数据迁移,则可以在应用更新到目标平台为Android 11版本后仍暂时保留原有的存储模式。 这些接口容易被病毒软件、间谍软件利用,引发网络钓鱼、用户安装信息泄露等安全事件,而同时此类接口的合法应用场景也很多,仅靠软件商店的扫描检测监控很难识别这类接口的滥用。 信息提示,使用方法请参考: https://developer.android.google.cn/training/snackbar/showing#display 3 如果snackbar不适用业务场景 使用如下命令开启或关闭此特性,查看您的应用是否有错误的使用指针场景。
为此,Google 终于下定决心在 Android 10 中引入了分区存储,对权限进行场景的细分,按需索取,并在 Android 11 中进行了进一步的调整。 Android 11 (R) Android 11 (R) 在 Android 10 (Q) 中分区存储的基础上进行了调整。 1. 缺点当然是不强制启用的话,国内 APP 适配进度估计得延后了。不过好消息是在查资料的时候,看到了国内大厂的相关适配文章,至少说明大厂在跟进了。 关于适配的难度: 对绝对路径相关接口依赖比较深的 APP 适配还是改动挺多的;其次权限的划分很细,什么时候需要什么权限以及调用哪个接口,理解起来需要一定时间; MediaStore API SAF API 所以虽然明年才会强制执行分区存储,但还是建议尽早理解和 review 项目中需要适配的代码。
: 注意:当您将应用更新为以 Android 11(API 级别 30)为目标平台后,如果应用在搭载 Android 11 的设备上运行,系统会忽略 requestLegacyExternalStorage 这段信息,简单可以理解为 requestLegacyExternalStorage=true 只能解燃眉之急,到了 Android 11 上,还是要做适配工作。 ,如果应用在 Android 11 的设备上运行,系统会忽略 requestLegacyExternalStorage属性,强制开启分区存储。 3、如果 App 中有通过 File Api 访问外部存储共有目录的代码,还是要需做适配的,至于怎么去做本文就不再讨论了 教训 绕了一圈之后,得出两个教训: 适配新版本的时候,最好先用真机测试一下,万一完美运行就不用适配了 认真读文档、认真读文档、认真读文档 Glide 加载缩略图 最后,说个与适配不太相干的话题,只想看适配内容的朋友可以先跳过了。
导语 本文主要是对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。
其中适配的部分细节如下,要适配分区存储,我们需要明确以下几个问题: 什么情况下会启用分区存储? 不同场景如何适配分区存储? 对于媒体文件,是否一定要用 MediaStore ? 对于数据量不大的场景,业务方也可以考虑全部迁移到分区存储。 2)不同场景如何适配分区存储? 推荐的适配方式:满足分区存储条件时,当有性能要求时,使用 MediaStore 来读取媒体文件,无性能要求仍可以通过File来读取。写入场景较少,单独适配。 操作了其他应用创建的文件 推荐的适配方式:做好权限申请的适配,如图片编辑等场景。 3)对于媒体文件,是否一定要用 MediaStore ? 在 Android 11上,如果操作的是本应用共享的媒体文件,使用原有的 File API也是可以的,但会有性能损耗,所以需要根据具体场景来取舍。
| 导语 本文主要是对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。
D["对象适配器"] --> B2_Desc["因为组合相比继承更灵活"] 3 适用场景 适配器模式可看作一种“补偿模式”,补救设计缺陷。 适配器模式的应用场景是“接口不兼容”,问题是何时接口会不兼容? 3.1 封装缺陷接口 假设依赖的外部系统接口设计有缺陷(如含大量static方法),引入后影响自身代码可测试性。 代码结构相似,但要解决的问题、应用场景不同。 9 适用场景 系统需要使用现有的类,而这些类的接口不符合系统的需要 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作 扩展 认适配器模式(Default 接口不兼容场景: 封装有缺陷的接口设计 统一多个类的接口设计 替换依赖的外部系统 兼容老版本接口 适配不同格式的数据
一、单纯升级iOS11后造成的变化 1. 升级后,发现某个拥有tableView的界面错乱,组间距和contentInset错乱,因为iOS11中 UIViewController 的 automaticallyAdjustsScrollViewInsets heightForFooterInSection:(NSInteger)section; // 这样的原理是因为之前只是实现了高度的代理方法,却没有实现View的代理方法,iOS10及以前这么写是没问题的,iOS11 如果使用了Masonry 进行布局,就要适配safeArea ([UIDevice currentDevice].systemVersion.floatValue >= 11.0) { make.edges.equalTo (self.view.safeAreaInsets); } else { make.edges.equalTo(self.view); } iOS 11适配之跳转App Store评论 在iOS
引言 近期,Google 发布了 Android 11的平台稳定版本。Android 11 将在确保用户隐私安全的前提下,更好地让用户畅享最新科技。 下图是 Android 11 发布整体流程的时间线: 个推深耕开发者领域,一直紧跟行业发展趋势,对Android 11的有关更新展开了深入研究。 本文将从分区存储、应用包可见性、权限变化和新功能四个方面来谈谈 Android 11 新特性,以帮助开发者更快速、更便捷地上手适配Android新系统。 我们可以在 AndroidMainfest 中添加 <queries>来适配特定的使用场景:(该配置相当于是添加应用白名单) 已知想获取的包名: image.png 2. 为了提升SDK的稳定性、兼容性,个推也对Android 11 的新特性进行了深入研究,并即将针对旗下产品推出全新的适配方案,以满足开发者不同的使用场景。
我们归纳出适配性的三个评测维度:渲染性能接近原生、低侵入迁移能力、分布式能力直调。在强合规场景还需关注产出物可追溯与版本安全。 这套标准不是看谁绝对快,而是看能否在目标场景中把复杂度和风险降到最低,让团队把力气花在创造业务价值上。 二、分场景/分客群解析与推荐Kuikly核心标签与适用情境Kuikly主打深度集成、原生级渲染、鸿蒙优先适配。 它不是单纯追求跑分最高,而是在需要一次性覆盖多端且保持原生体验的场景里,能让团队少踩坑,把跨端适配从“拼体力”变成“用对工具”。 四、决策公式与选型指南适配性选型思路业务类型(C端高频 / B端复杂 / 强合规) + 行业特性(消费 / 金融 / 政务) + 系统集成需求(是否需直调鸿蒙分布式能力) = 场景契合度最高的方案。
rem布局原理深度理解(以及em/vw/vh) 一、前言 我们h5项目终端适配采用的是淘宝那套《Flexible实现手淘H5页面的终端适配》方案。主要原理是rem布局。 所以在Flexible整个适配方案中,考虑文本还是使用px作为单位。只不过使用[data-dpr]属性来区分不同dpr下的文本字号大小。 五、rem布局方案 从上可以看出最好的弹性布局方案就是rem+js的方案,《Flexible实现手淘H5页面的终端适配》就是采用rem+js实现的。flexible主要做了几点。
导语:iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。 本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bug 前言 前几天发现在做的APP在 iOS11 系统上动画有异常,在其他系统的设备上都是正常的 查了下资料发现原因是 iOS11 中默认开启了Self-Sizing,在WWDC 2017 session204 Updating Your App for iOS 11 中有介绍,因此研究了下这个session Self-Sizing在iOS11下是默认开启的,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变为 总结 大概介绍了iOS 11的UI方面的一些更新,大部分内容都用代码测试过了,有些更新确实是很实用,可以适配下iOS 11,有的更新可能会给现有APP造成bug,所以学习下这些内容还是很有必要的。
大多数位置场景仅需要前台访问,比如当用户在操作 Activity 的时候。 事实上,Google Play 已经出台了相关政策限制不必要的后台位置访问。 如果您的应用包含访问敏感数据的前台服务,请确认应用场景中包含直接的用户交互,使用户可以控制所执行的任务。 这样可以为应用增加系统可见性,同时在 Android 11 中也是必须配置的属性。更多信息请访问:Android 11 中的前台服务。 出于隐私方面的考虑,这些相对“强大”的持久性和唯一性的标识符不适合用于大部分应用场景。 从 Android 10 开始,系统对不可重置的设备标识符 实施了限制。 以上内容能够帮助大家更快更新适配最新的 API ,并设计出对隐私更友好的应用。更多资源请参阅: 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 开发者手册》 参考 官方相机文档 官方权限文档 官方存储文档
最初尝试用开源网关的通用插件进行协议适配,却发现私有协议的特殊字段无法被插件解析,强行修改插件配置后,又引发教务系统报文解析异常,导致课程安排数据错乱。 这种架构既保障了本地系统不受云服务波动的影响,又能灵活适配外部云原生服务,在初期测试中,教务系统与在线平台的数据同步延迟从20分钟压缩至1.5分钟,第三方题库接口的请求成功率提升至99.8%。 数据流转效率的优化,需针对性解决混合云场景下的“跨节点传输延迟”与“数据一致性”问题。 为此,重构监控体系:在网关的请求处理链路中植入“业务标签”,每个请求携带对应的业务场景标识(如“学生选课”“教师成绩录入”“题库调用”),监控平台通过这些标签将技术指标与业务场景关联。 教育行业的特殊性—本地化老旧系统多、权限体系复杂、业务场景与教学节奏强绑定,决定了网关方案必须深度适配行业特性,而非简单套用互联网或金融行业的成熟方案。
本文基于监测范围、AI智能度、预警速度、行业适配性、服务生态五大核心维度,深度解析当前市场主流舆情产品,为您提供科学的选型参考。 - 应用场景与行业适配:不同行业场景对舆情监测的需求差异显著,优秀的产品应能提供行业垂直解决方案。- 合规安全与部署灵活性:在政务、金融等敏感领域,系统的安全性与合规性至关重要。 百分点科技:本土化的全场景智能舆情与大数据分析平台 (综合指数:★★★★☆ | 评分:9.7)- 本土 “深度适配”:深耕中国市场,全面覆盖国内主流媒体、社交平台(微信、微博、抖音等)、政务渠道及垂直行业平台 舆情监测平台 5.0 通过定制化算法训练与人工校验,实现情感计算、事件聚类等结果的高准确性,适配政务及国企对舆情判断的严谨性要求。 - 适用场景:社交舆情洞察、消费者研究及品牌形象管理有需求的客户。
本文介绍了iOS11在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bug。 查了下资料发现原因是iOS11中默认开启了Self-Sizing,在WWDC 2017 session204 Updating Your App for iOS 11 中有介绍,因此研究了下这个session iOS11下不想使用Self-Sizing的话,可以通过以下方式关闭:(前言中提到的问题也是通过这种方式解决的) iOS11下,如果没有设置estimateRowHeight的值,也没有设置rowHeight 从iOS 11开始有了一些改变,首先是可以给这些按钮添加图片了,然后是如果实现了以下两个iOS 11新增的代理方法,将会取代(tableView: editActionsForRowAtIndexPath 见下图对比: 总结 大概介绍了iOS 11的UI方面的一些更新,大部分内容都用代码测试过了,有些更新确实是很实用,可以适配下iOS 11,有的更新可能会给现有APP造成bug,所以学习下这些内容还是很有必要的