2024年Android最新AndroidManifest(1),面试不会的题

最后

上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。

也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。

我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料

部分文件:


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

val appNameField = Class.forName(“a.a.aaa.R.string”).getField(“app_name”)

return appNameField.get(null) as String

}

}

这里我们使用到了反射,通过反射获取一个R.string类中的app_name变量。

接下来,我们直接手动修改AndroidManifest.xml中的package的值为:a.a.bbb,然后就会发现有3个地方报错了,如下:

在这里插入图片描述

这是因为,.MainActivity前面的那个点,代表以package中声明的包名作为前缀的,现在我们改在了a.a.bbb,所以就报错了,因为a.a.bbb.MainActivity并不存在,所以这里只能使用全包名形式了:a.a.aaa.MainActivity

第二个报错,MainActivity:

在这里插入图片描述

前面我们说了package中的包名用于指定自动生成的类所在的包,没修改之前,a.a.aaa.R.layout.activity_main和a.a.aaa.MainActivity在同一个包下,所以不用导包,修改之后,自动生成的activity_main为a.a.bbb.R.layout.activity_main和a.a.aaa.MainActivity不在同一个包下了,所以需要导包:import a.a.bbb.R

第三个报错,Utils:

在这里插入图片描述

容易理解,R文件已经不在a.a.aaa包下,所以这里会报错,而且这里的反射我们也需要手动修改包名,如果是一个真实的项目,类很多,那要这样手动改的话,真是要累死人的,所以要使用重构的方式,我们把代码还原一下,然后在aaa包名上点击一下,然后按下Shift + F6,此时会弹出一个警告对话框,如下:

在这里插入图片描述

这个汉化的内容我感觉不太对,于是关闭汉化插件再看一下对话框,如下:

在这里插入图片描述

根据我试验的结果,此对话框提示a.a.aaa目录在3个地方都有,一个是我们的android主项目src\main\java\a\a\aaa,一个是对应的Android测试目录src\androidTest\java\a\a\aaa,一个是对应的java测试目录src\java\a\a\aaa,对话框问我们是想要重命名整个包还是只重命名src\main\java\a\a\aaa这一个目录?重构整个包名会重构到上面说的3个目录。

我们先使用“重命名目录”按钮,出现如下对话框:

在这里插入图片描述

我们输入bbb,然后点击“预览”按钮,此时会在AndroidStudio的底部出现“重构预览”即在发生重构前,先让你知道重构会改变哪些地方,如下:

在这里插入图片描述

可以看到,有两个地方会被修改,第一个是告诉你MainActivity.kt文件会被移动到a.a.bbb目录,第二个是告诉你MainActivity.kt中的package a.a.aaa也会改成package a.a.bbb,这也很容易理解,因为MainActivity已经放到a.a.bbb目录下了,当然package也要改成对应的包。感觉上因为就真的只有这两个地方会被修改,但是ide会做的更多,我们点击“执行重构”,然后提交代码(我提前把代码放到SVN上了),然后就能看到有哪些改动了,如下:

在这里插入图片描述

我们发现,activity_main.xml和AndroidManifest.xml中也有改动,如下:

activity_main.xml:

在这里插入图片描述

AndroidManifest.xml:

在这里插入图片描述

还挺智能的,它知道MainActivity的位置变了,不在相对于a.a.aaa的位置了,所以需要使用全包名的形式。

很明显,这种方式不是我们想要的,它并没有为我们重命名清单文件中的package属性。我们把代码还原,然后再执行重构,这次我们选择“重命名包”按钮,然后出现对话框,如下:

在这里插入图片描述

我们把aaa改成bbb,然后点击预览按钮,如下:

在这里插入图片描述

双击对应的条目即可快速跳转到相应的位置,比如双击最前面的aaa,我们发现它被定位到主项目的aaa目录,如下:

在这里插入图片描述

这里工具有点问题,有两个aaa都指向了同一个地方,另外两个aaa分别指向对应的Android测试目录和Java测试目录,如下:

在这里插入图片描述

在这里插入图片描述

再往下,这3个目录中对应了3个类,所以类里面的package语句中的包肯定也是要修改的,再往下是清单文件中package的值也会被修改,最后是Utils中使用到了import a.a.aaa.R也会被修改,因为package的值修改了,则自动生成的R对应的包肯定也是需要修改的,但是我们代码中反射使用到了a.a.aaa啊,它不给我重构一下吗?我们取消这次的重构预览,重新执行重构,如下:

在这里插入图片描述

这次我们勾选了“在注释和字符中搜索”,再次预览,结果如下:

在这里插入图片描述

这还不错啊,找到了我们反射的字符串了,但是同时问题也来了,还会找到了更多我们不想要重构的地方,如下:

在这里插入图片描述

这里的项目名称和应用的进程名,我们并不想改,甚至在jdk和sdk中的一些注释或字符串它也改搜索出来了,如下:

在这里插入图片描述

最后

由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

https://bbs.csdn.net/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值