范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  作者:恋猫de小郭
  Android 12 需要更新适配点并不多,本篇主要介绍最常见的两个需要适配的点: android:exported 和 SplashScreen 。 一、android:exported
  「它主要是设置 Activity 是否可由其他应用的组件启动」 , "true " 则表示可以,而"false "表示不可以。 若为"false",则 Activity 只能由同一应用的组件或使用同一用户 ID 的不同应用启动。
  当然不止是  Activity , Service  和 Receiver  也会有 exported  的场景。
  「一般情况下如果使用了 intent-filter,则不能将 exported 设置为"false"」 ,不然在 Activity  被调用时系统会抛出 ActivityNotFoundException  异常。 相反如果没有 intent-filter ,那就不应该把 Activity  的 exported  设置为true  ,「这可能会在安全扫描时被定义为安全漏洞」 。
  而在 Android 12 的平台上,也就是使用  targetSdkVersion 31  时,那么你就需要注意:
  「如果 Activity 、 Service 或 Receiver 使用 intent-filter ,并且未显式声明 android:exported 的值,App 将会无法安装。」
  这时候你可能会选择去  AndroidManifest  一个一个手动修改,但是如果你使用的 SDK 或者第三方库没有支持怎么办?或者你想要打出不同 target 平台的包?这时候下面这段 gradle 脚本可以给你省心: /**  * 修改 Android 12 因为 exported 的构建问题  */ android.applicationVariants.all { variant ->     variant.outputs.all { output ->         output.processResources.doFirst { pm ->             String manifestPath = output.processResources.manifestFile             def manifestFile = new File(manifestPath)             def xml = new XmlParser(false, true).parse(manifestFile)             def exportedTag = "android:exported"             ///指定 space             def androidSpace = new groovy.xml.Namespace("http://schemas.android.com/apk/res/android", "android")             def nodes = xml.application[0]."*".findAll {                 //挑选要修改的节点,没有指定的 exported 的才需要增加                 (it.name() == "activity" || it.name() == "receiver" || it.name() == "service") && it.attribute(androidSpace.exported) == null              }             ///添加 exported,默认 false             nodes.each {                 def isMain = false                 it.each {                     if(it.name() == "intent-filter") {                         it.each {                             if(it.name() == "action") {                                 if(it.attributes().get(androidSpace.name) == "android.intent.action.MAIN") {                                     isMain = true                                     println("......................MAIN FOUND......................")                                 }                             }                         }                     }                 }                 it.attributes().put(exportedTag, "${isMain}")             }              PrintWriter pw = new PrintWriter(manifestFile)             pw.write(groovy.xml.XmlUtil.serialize(xml))             pw.close()         }     } }
  这段脚本你可以直接放到  app/build.gradle  下执行,也可以单独放到一个 gradle 文件之后 apply  引入,它的作用就是:
  「在打包过程中检索所有没有设置 exported 的组件,给他们动态配置上 exported」 。这里有个特殊需要注意的是,因为启动 Activity  默认就是需要被 Launcher 打开的,所以 "android.intent.action.MAIN"  需要 exported  设置为 true  。 如果有需要,还可以自己增加判断设置了 "intent-filter"  的才配置 exported 。
  二、SplashScreen
  Android 12 新增加了  SplashScreen  的 API,它包括启动时的进入应用的动作、显示应用的图标画面,以及展示应用本身的过渡效果。
  它大概由如下 4 个部分组成,这里需要注意:  1 最好是矢量的可绘制对象,当然它可以是静态或动画形式。  2 是可选的,也就是图标的背景。  与自适应图标一样,前景的三分之一被遮盖 (3)。  4 就是窗口背景。
  启动画面动画机制由进入动画和退出动画组成。  进入动画由系统视图到启动画面组成,这由系统控制且不可自定义。  退出动画由隐藏启动画面的动画运行组成。如果要对其进行自定义,可以通过  SplashScreenView  自定义。
  更详细的介绍这里就不展开了,有兴趣的可以自己看官方的资料:https://developer.android.com/guide/topics/ui/splash-screen ,这里主要介绍下如何适配和使用的问题。
  「首先不管你的 TargetSDK 什么版本,当你运行到 Android 12 的手机上时,所有的 App 都会增加 SplashScreen 的功能」 。
  如果你什么都不做,那 App 的 Launcher 图标会变成  SplashScreen  界面的那个图标,而对应的原主题下 windowBackground  属性指定的颜色,就会成为 SplashScreen  界面的背景颜色。「这个启动效果在所有应用的冷启动和热启动期间会出现。」  其实不适配好像也没啥问题。
  关于如何迁移和使用  SplashScreen  可以查阅官方详细文档:https://developer.android.com/guide/topics/ui/splash-screen/migrate
  另外还可以参考 《Jetpack新成员SplashScreen:打造全新的App启动画面》 这篇文章,文章详细介绍了如果使用官方的  Jetpack  库来让这个效果适配到更低的 Target 平台:https://juejin.cn/post/6997217571208445965
  而正常情况下我们可以做的就是:  1、升级  compileSdkVersion 31  、 targetSdkVersion 31  & buildToolsVersion "31.0.0"  2、 添加依赖  implementation "androidx.core:core-splashscreen:1.0.0-alpha02"  3、增加  values-v31  的目录 4、添加  styles.xml  对应的主题,例如:       5、给你的启动  Activity  添加这个主题,不同目录下使用不同主题来达到适配效果。 「PS: 我个人是一点都不喜欢这个玩意。」
  三、其他1、通知中心又又又变了
  「Android 12 更改了可以完全自定义通知外观和行为,以前自定义通知能够使用整个通知区域并提供自己的布局和样式,现在它行为变了」 。
  使用 TargetSDK 为 31 的 App,包含自定义内容视图的通知将不再使用完整通知区域;而是使用系统标准模板。
  此模板可确保自定义通知在所有状态下都与其他通知长得一模一样,例如在收起状态下的通知图标和展开功能,以及在展开状态下的通知图标、应用名称和收起功能,与 Notification.DecoratedCustomViewStyle 的行为几乎完全相同。
  2、Android App Links 验证
  Android App Links 是一种特殊类型的 DeepLink ,用于让 Web 直接在 Android 应用中打开相应对应 App 内容而无需用户选择应用。使用它需要执行以下步骤:  如何使用可查阅:https://developer.android.com/training/app-links/verify-site-associations#auto-verification
  使用 TargetSDK 为 31 的 App,系统对 Android App Links 的验证方式进行了一些调整,这些调整会提升应用链接的可靠性。  如果你的 App 是依靠 Android App Links 验证在应用中打开网页链接,那么在为 Android App Links 验证添加 intent 过滤器时,请确保使用正确的格式,「尤其需要注意的是确保这些 intent-filter 包含 BROWSABLE 类别并支持 https 方案」 。
  3、安全和隐私设置3.1、大致位置
  「使用 TargetSDK 为 31 的 App,用户可以请求应用只能访问大致位置信息」 。 如果 App 请求 ACCESS_COARSE_LOCATION  但未请求 ACCESS_FINE_LOCATION 那么不会有任何影响。
  TargetSDK 为 31 的 App 请求  ACCESS_FINE_LOCATION  运行时权限,还必须请求 ACCESS_COARSE_LOCATION  权限。当 App 同时请求这两个权限时,系统权限对话框将为用户提供以下新选项:
  3.2、SameSite Cookie
  Cookie 的  SameSite  属性决定了它是可以与任何请求一起发送,还是只能与同站点请求一起发送。 没有  SameSite  属性的 Cookie 被视为 SameSite=Lax 。 带有  SameSite=None  的 Cookie 还必须指定 Secure  属性,这意味着它们需要安全的上下文,需要通过 HTTPS 发送。 站点的 HTTP 版本和 HTTPS 版本之间的链接现在被视为跨站点请求,因此除非将 Cookie 正确标记为  SameSite=None; Secure ,否则 Cookie 不会被发送。 在 WebView devtools 中 切换界面标志 webview-enable-modern-cookie-same-site,可以在测试设备上手动启用 SameSite 行为。
  4、应用休眠
  Android 12 在 Android 11(API 级别 30)中引入的自动重置权限行为 的基础上进行了扩展。
  如果 TargetSDK 为 31 的 App 用户几个月不打开,则系统会自动重置授予的所有权限并将App 置于休眠状态。  更多可以查阅:https://developer.android.com/topic/performance/app-hibernation
  四、最后
  大致需要注意的就是这些,基本上其实除了  exproted  和 SplashScreen  之外,其他基本都不怎么需要适配,「事实上 SplashScreen 我个人觉得会很遭产品嫌弃,毕竟 Material Design 在国内的待遇确实有点惨」 ,没办法去掉 SplashScreen  这点估计需要和产品扯皮一段时间,不过产品和设计一般没有 Android 手机,何况 Android 12,所以日后再说吧
  在这里还分享一份由大佬亲自收录整理的学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
  这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
  当然,你也可以拿去查漏补缺,提升自身的竞争力。
  真心希望可以帮助到大家,Android路漫漫,共勉!
  如果你有需要的话,只需私信我【进阶】即可获取

华为手机桌面图标,自己动手设计,玩出不同的花样手机上面安装的各个应用图标都是默认的。每天看着这些图标也有厌烦的时候,喜欢折腾手机,喜欢个性的人,会想着改变应用图标,让自己的手机桌面变得与众不同。其实,手机是支持自定义设置图标的新款手机发布后,为什么买的人变少了,主要是这3个原因,涨知识很多细心的网友,可能已经感觉到了,身边买新手机的人越来越少,大家使用的还是以前购买的手机,同时网上也有数据表明,在2021年的第4季度,国产手机的出货量下降了6,同时2022年的第wenno深扒!十个妈妈八个被骗!这四种检测,费钱又坑娃孩子的健康成长,一直是妈妈们最关心的问题。育儿的道路上,总是担心给孩子的不够,一些不良商家便抓住了这一软肋进行忽悠。一些听起来十分高大上的检测其实毫无意义,今天小编就给大家盘点下,8个月宝宝爱吃辅食,奶奶偷偷倒奶,孩子身高体重停止增长中国营养学会建议孩子在一岁之前以奶为主!所以孩子在一岁之前添加的食物叫辅食,所谓的辅食就是辅助的食物,孩子70左右的营养还是来源于母乳或者奶粉!主要是孩子的消化能力还比较弱,所以流春天记得给孩子吃这道莴笋下饭菜,钾含量高,助力孩子成长常言道春令莴笋似黄金,如今正值百花争艳百鸟歌唱的春季,莴笋悄悄地占据了蔬菜市场的C位,怎么能错过它呢?冬季漫长,白菜和萝卜是我们饮食上的主力军,凉拌腌制炖着吃,早就吃得够够的了。春陈三废妻子孕期胖25斤,长期贫血吸氧却坚持顺产,理由令人鼻酸引子陈三废的妻子离预产期越来越近,陈三废每天都会更新视频,跟粉丝做汇报。每天都在营销怀孕,真的好吗?陈三废的妻子陈澄,虽然已经生了2个孩子,但在怀孕期间,还是有很大反应。曾长期吸氧为儿女带孩子,享受的快乐才是人间最美的爱昨晚与小外孙子,在家属院的篮球场上打篮球,哄孩子的同时,我也顺便锻炼了自己,这实在是一个一举两得的好事。这种情景,每周都要有三四天。如果没有小外孙子拽着我玩,我是不可能自己去打篮球童话故事也要与时俱进,融合了奇幻与机械要素,更适合小孩子观看童话故事的过去说起现在观众们所熟悉的那些童话故事,无论是安徒生童话故事还是一千零一夜,事实上都源自于过去的一些口口相传的故事,而这些故事原本的受众并不是对少年儿童来说的,而是一个更孩子沉迷游戏,父母该怎么办,孩子沉迷游戏,这早已是家长们热聊的话题,游戏危害有多大,为什么有那么多的家长反对自家孩子玩游戏。有一个家长这样说道她孩子玩游戏性格变暴躁,内向,基本人性都没有了,一天二十四小时有二滨水休闲产业与文化产业的融合发展导语滨水休闲产业是大旅游产业的一部分,是旅游产业中休闲度假业态的重要内容,与文化产业体育产业休闲渔业度假地产等存在着许多业态融合,是一个综合性的多行业参与的有水域资源特色的旅游休闲维生素缺乏症一览表,看看自己缺什么,不妨了解一下,建议收藏维持机体正常功能所必需,需要量很少,不供给能量,但人体不可缺少,不能在体内合成或合成量太少,需要从食物中摄取,目前发现的维生素大约有14种,可分为脂溶性维生素和水溶性维生素。脂溶性
体育竞技远离政治给大家讲个笑话让政治远离体育!意思就是不应以政治原因阻碍体育发展。是的,那个不给以色列运动员发放签证的印度尼西亚被国际足联剥夺了U20世界杯举办权,原因是政治参与足球,因为印度尼西鲁媒费南多黄政宇随泰山队前往浙江,德尔加多下家仍未确定直播吧3月30日讯据济南时报报道,费南多黄政宇随泰山队前往浙江,德尔加多下家仍未确定。3月30日下午,山东泰山将帅由济南飞抵衢州。4月1日晚进行的首届衢州有礼2023体彩杯足球邀请国足的希望在哪里?自从2022年11月26日,李铁被带走之后,幕后的小虾小鱼都被收入网中。2023年1月19日中国足协执委原秘书长刘奕接受监察调查2023年1月19日中国足协常务副秘书长兼国管部部长中国足协原副主席王登峰,被双开长安街知事微信公众号记者秦羽销毁证据,对抗组织审查利用职务便利,为特定关系人谋取利益为他人在项目承揽赛事承办等方面谋取利益,并非法收受财物3月31日,教育部体育卫生与艺术教育司原司教育部体育卫生与艺术教育司原司长王登峰被双开中央纪委国家监委网站讯据中央纪委国家监委驻教育部纪检监察组山东省纪委监委消息日前,中央纪委国家监委驻教育部纪检监察组山东省监察委员会对教育部体育卫生与艺术教育司原司长王登峰严重违纪萌翻了!喜看神州大地小动物闹春图万物复苏的季节,谁能最先嗅到春天?水鸟在南方的湖泊旁翩翩起舞时,紫貂还在北方的雪地里睡眼惺忪广西的孙大圣在林间上蹿下跳,新疆的咩星人在山间优雅漫步春天属于每一个勤劳的生命,属于万物南美洲风景优美,为何去那里旅游的人不多?南美洲由于距离欧亚大陆太远,很晚才被发现,算得上是世界的尽头了。这里有几个叫得响的地方,什么亚马逊雨林,阿根廷,但人们旅游总是去欧美日韩,去南美的人就不多了,因为南美知名度不高,人青海玉树生态环境持续向好野生动物频频出圈来源人民网青海频道雪豹金钱豹等旗舰物种在玉树同框出现野生欧亚水獭在玉树市扎曲河畔嬉戏打闹近年来,青海省玉树藏族自治州频频因为或萌态十足或野性满满的野生动物出圈,这恰好是生态环境向好国家一级保护动物黑颈鹤频现乐山金口河原标题国家一级保护动物黑颈鹤频现乐山金口河(周家伊记者李举涛)连日来,国家一级保护动物黑颈鹤组团停留于乐山金口河区八月林自然保护区大瓦山国家湿地公园等地,时而仰天长歌嬉戏打斗,时而雷丰年3。31黄金短线偏涨回踩多,沪金沪银走势分析操作解套常有人感叹,活得真累。有时候想想,这人生就是一个又一个车站,走到一个站点,累了,歇一歇,明天还得继续出发,而一路上,也会遇到不同的人来陪我们一起走,大家或陌生,或熟悉,总会给我们孤沙漠动物军团,申请出战!远方的家中国自然秘境摄制组来到新疆霍城霍城县坐落在伊犁河谷西北部北依天山南濒伊犁河绿洲环绕着荒漠特殊的地理环境让这里成为爬行动物生息繁衍的乐土今天就让我们来认识一下这些沙漠精灵吧0