安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Android12快速适配要点,永远别为适配掉光了头发

1月13日 九阙忬投稿
  作者:恋猫de小郭
  Android12需要更新适配点并不多,本篇主要介绍最常见的两个需要适配的点:android:exported和SplashScreen。一、android:exported
  它主要是设置Activity是否可由其他应用的组件启动,true则表示可以,而false表示不可以。若为false,则Activity只能由同一应用的组件或使用同一用户ID的不同应用启动。
  当然不止是Activity,Service和Receiver也会有exported的场景。
  一般情况下如果使用了intentfilter,则不能将exported设置为false,不然在Activity被调用时系统会抛出ActivityNotFoundException异常。相反如果没有intentfilter,那就不应该把Activity的exported设置为true,这可能会在安全扫描时被定义为安全漏洞。
  而在Android12的平台上,也就是使用targetSdkVersion31时,那么你就需要注意:
  如果Activity、Service或Receiver使用intentfilter,并且未显式声明android:exported的值,App将会无法安装。
  这时候你可能会选择去AndroidManifest一个一个手动修改,但是如果你使用的SDK或者第三方库没有支持怎么办?或者你想要打出不同target平台的包?这时候下面这段gradle脚本可以给你省心:修改Android12因为exported的构建问题android。applicationVariants。all{variantvariant。outputs。all{outputoutput。processResources。doFirst{pmStringmanifestPathoutput。processResources。manifestFiledefmanifestFilenewFile(manifestPath)defxmlnewXmlParser(false,true)。parse(manifestFile)defexportedTagandroid:exported指定spacedefandroidSpacenewgroovy。xml。Namespace(http:schemas。android。comapkresandroid,android)defnodesxml。application〔0〕。。findAll{挑选要修改的节点,没有指定的exported的才需要增加(it。name()activityit。name()receiverit。name()service)it。attribute(androidSpace。exported)null}添加exported,默认falsenodes。each{defisMainfalseit。each{if(it。name()intentfilter){it。each{if(it。name()action){if(it。attributes()。get(androidSpace。name)android。intent。action。MAIN){isMaintrueprintln(。。。。。。。。。。。。。。。。。。。。。。MAINFOUND。。。。。。。。。。。。。。。。。。。。。。)}}}}}it。attributes()。put(exportedTag,{isMain})}PrintWriterpwnewPrintWriter(manifestFile)pw。write(groovy。xml。XmlUtil。serialize(xml))pw。close()}}}
  这段脚本你可以直接放到appbuild。gradle下执行,也可以单独放到一个gradle文件之后apply引入,它的作用就是:
  在打包过程中检索所有没有设置exported的组件,给他们动态配置上exported。这里有个特殊需要注意的是,因为启动Activity默认就是需要被Launcher打开的,所以android。intent。action。MAIN需要exported设置为true。如果有需要,还可以自己增加判断设置了intentfilter的才配置exported。
  二、SplashScreen
  Android12新增加了SplashScreen的API,它包括启动时的进入应用的动作、显示应用的图标画面,以及展示应用本身的过渡效果。
  它大概由如下4个部分组成,这里需要注意:1最好是矢量的可绘制对象,当然它可以是静态或动画形式。2是可选的,也就是图标的背景。与自适应图标一样,前景的三分之一被遮盖(3)。4就是窗口背景。
  启动画面动画机制由进入动画和退出动画组成。进入动画由系统视图到启动画面组成,这由系统控制且不可自定义。退出动画由隐藏启动画面的动画运行组成。如果要对其进行自定义,可以通过SplashScreenView自定义。
  更详细的介绍这里就不展开了,有兴趣的可以自己看官方的资料:https:developer。android。comguidetopicsuisplashscreen,这里主要介绍下如何适配和使用的问题。
  首先不管你的TargetSDK什么版本,当你运行到Android12的手机上时,所有的App都会增加SplashScreen的功能。
  如果你什么都不做,那App的Launcher图标会变成SplashScreen界面的那个图标,而对应的原主题下windowBackground属性指定的颜色,就会成为SplashScreen界面的背景颜色。这个启动效果在所有应用的冷启动和热启动期间会出现。其实不适配好像也没啥问题。
  关于如何迁移和使用SplashScreen可以查阅官方详细文档:https:developer。android。comguidetopicsuisplashscreenmigrate
  另外还可以参考《Jetpack新成员SplashScreen:打造全新的App启动画面》这篇文章,文章详细介绍了如果使用官方的Jetpack库来让这个效果适配到更低的Target平台:https:juejin。cnpost6997217571208445965
  而正常情况下我们可以做的就是:1、升级compileSdkVersion31、targetSdkVersion31buildToolsVersion31。0。02、添加依赖implementationandroidx。core:coresplashscreen:1。0。0alpha023、增加valuesv31的目录4、添加styles。xml对应的主题,例如:resourcesstylenameLaunchThemeparentTheme。SplashScreenitemnamewindowSplashScreenBackgroundcolorsplashScreenBackgrounditem!itemnamewindowSplashScreenAnimatedIcondrawablesplashitemitemnamewindowSplashScreenAnimationDuration500itemitemnamepostSplashScreenThemestyleAppThemeitemstyleresources5、给你的启动Activity添加这个主题,不同目录下使用不同主题来达到适配效果。PS:我个人是一点都不喜欢这个玩意。
  三、其他1、通知中心又又又变了
  Android12更改了可以完全自定义通知外观和行为,以前自定义通知能够使用整个通知区域并提供自己的布局和样式,现在它行为变了。
  使用TargetSDK为31的App,包含自定义内容视图的通知将不再使用完整通知区域;而是使用系统标准模板。
  此模板可确保自定义通知在所有状态下都与其他通知长得一模一样,例如在收起状态下的通知图标和展开功能,以及在展开状态下的通知图标、应用名称和收起功能,与Notification。DecoratedCustomViewStyle的行为几乎完全相同。
  2、AndroidAppLinks验证
  AndroidAppLinks是一种特殊类型的DeepLink,用于让Web直接在Android应用中打开相应对应App内容而无需用户选择应用。使用它需要执行以下步骤:如何使用可查阅:https:developer。android。comtrainingapplinksverifysiteassociationsautoverification
  使用TargetSDK为31的App,系统对AndroidAppLinks的验证方式进行了一些调整,这些调整会提升应用链接的可靠性。如果你的App是依靠AndroidAppLinks验证在应用中打开网页链接,那么在为AndroidAppLinks验证添加intent过滤器时,请确保使用正确的格式,尤其需要注意的是确保这些intentfilter包含BROWSABLE类别并支持https方案。
  3、安全和隐私设置3。1、大致位置
  使用TargetSDK为31的App,用户可以请求应用只能访问大致位置信息。如果App请求ACCESSCOARSELOCATION但未请求ACCESSFINELOCATION那么不会有任何影响。
  TargetSDK为31的App请求ACCESSFINELOCATION运行时权限,还必须请求ACCESSCOARSELOCATION权限。当App同时请求这两个权限时,系统权限对话框将为用户提供以下新选项:
  3。2、SameSiteCookie
  Cookie的SameSite属性决定了它是可以与任何请求一起发送,还是只能与同站点请求一起发送。没有SameSite属性的Cookie被视为SameSiteLax。带有SameSiteNone的Cookie还必须指定Secure属性,这意味着它们需要安全的上下文,需要通过HTTPS发送。站点的HTTP版本和HTTPS版本之间的链接现在被视为跨站点请求,因此除非将Cookie正确标记为SameSiteNSecure,否则Cookie不会被发送。在WebViewdevtools中切换界面标志webviewenablemoderncookiesamesite,可以在测试设备上手动启用SameSite行为。
  4、应用休眠
  Android12在Android11(API级别30)中引入的自动重置权限行为的基础上进行了扩展。
  如果TargetSDK为31的App用户几个月不打开,则系统会自动重置授予的所有权限并将App置于休眠状态。更多可以查阅:https:developer。android。comtopicperformanceapphibernation
  四、最后
  大致需要注意的就是这些,基本上其实除了exproted和SplashScreen之外,其他基本都不怎么需要适配,事实上SplashScreen我个人觉得会很遭产品嫌弃,毕竟MaterialDesign在国内的待遇确实有点惨,没办法去掉SplashScreen这点估计需要和产品扯皮一段时间,不过产品和设计一般没有Android手机,何况Android12,所以日后再说吧
  在这里还分享一份由大佬亲自收录整理的学习PDF架构视频面试文档源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
  这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
  当然,你也可以拿去查漏补缺,提升自身的竞争力。
  真心希望可以帮助到大家,Android路漫漫,共勉!
  如果你有需要的话,只需私信我【进阶】即可获取
投诉 评论 转载

华为Mate50系列手机或将明年初发布不支持5G网络据《深网》报道,华为的新款Mate50系列旗舰手机将于2022年初发布。Mate50系列采用的芯片分两种,一部分是麒麟990,另一部分是高通898,而且不支持5G。据早先……如何将手机语音转成文字,分享好用的方法?一般手机输入法都自带语音转文字功能,我们只需长按空格键对着手机说话,输入法就会将语音实时转为文字显示。1。手机听写助手手机录音机中,也有这样好用的功能,可以直接使用……有线耳机秒变蓝牙,HIFIMANBlueminiR2R蓝牙接有线HiFi头戴耳机的音质肯定是要超过蓝牙耳机的,但是蓝牙耳机在使用时候的方便又是头戴耳机所不能比拟,那如何让音质更出色的头戴耳机也能像蓝牙耳机一样方便呢?我手中的这个小……云数据库严重漏洞或泄露密钥,微软警告数千客户抓紧处置微软Azure云平台上的旗舰CosmosDB数据库爆出严重漏洞,攻击者能够窃取数千家企业云上数据库的访问密钥,从而读取、篡改甚至删除企业的主数据库;由于微软官方无法自行更改这些……习武之人今何在?海盗船DarkCoreRGBProSE无线鼠虽然现在鼠标轻量化成为了一个主流趋势,但我身边依然有很多朋友对习武之人级别的鼠标情有独钟,所以很多经典重鼠都通过硬件升级的方式推出了新版本。美商海盗船在2017年曾经推出过Da……诺基亚谈造车只聚焦5G网络这一端百度在沪成立云计算公司2021年5月28日精选资讯如下:【互联网新鲜事】盲盒手办备货量同比增长1000据某物流平台数据显示,已有数百万吨618预售商品备入仓库,规模同比增长100。……腾讯教育认证服务上线获证学员可获就业推荐技能证明职业技能等级证书是技能人才就业的敲门砖,是求职者获得企业、市场认可的关键。为了提高职业技能等级认定质量和水平,人社部从2020年开始部署,分步取消水平评价类技能人员职业资格,推……仅1599元,骁龙870手机中的价格屠夫,5000mAh64谈到性价比神机,许多人第一时间都会联想到红米,毕竟红米的性价比在业界是出了名的。最近几年,推出的很多产品,销量都是以百万乃至千万计算。红米Note9系列、红米K30系列都是如此……Android12快速适配要点,永远别为适配掉光了头发作者:恋猫de小郭Android12需要更新适配点并不多,本篇主要介绍最常见的两个需要适配的点:android:exported和SplashScreen。一、andro……为什么说慢充话费很可能就是洗钱?其中有哪些猫腻?在派出所工作的朋友告诉我,许多人在网上充话费时,因为贪图便宜,就会在不知不觉中参与到洗钱中,从而造成损失上亿元,而原因就是因为慢充!作为现代人已经习惯了拥有网络的时代,而……雷柏i150蓝牙TWS耳机,舒适豆美学,气质有点冷艳你是否有像这样,清晨的一段音乐,便能够幸福一整天?出生视野,万物生长之际,目遇而成乐。集多元的音乐基因,对声音的探索,用旋律代替语言,以音符沟通灵魂,清冷之外,保有着对世……腾讯阿里也开始裁员了,失业来得太突然关注啡小沫专注职场赚钱干货,和你一起飞速成长!最近最大的消息,莫过于头部互联网公司裁员的传言。3月13日,阿里裁员腾讯裁员话题直接被送上了微博热搜。我朋友圈互联网从……
试论逻辑接续及其表达手段数字环境下的大学生传统文化阅读送学生一个可透视未来的水晶球,激发中职德育课教育论文弘扬传统节日文化,增强青少年学生德育实效基于中餐菜单的英译翻译策略高校教学管理改革和创新论文让政治为音乐做嫁衣浅析体育文化与体育文学简论抗猪瘟一猪支原体肺炎二联自家高免血清的研制自治新论大学英语教学中思辨能力培养策略论文勤积累,多表达

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利