Android 适配 64 位架构,2024年最新软件开发面试题库

小米应用商店与OPPO应用商店、vivo应用商店等已经发出通知

  • 2021年12月底:现有和新发布的应用/游戏,需上传包含64位包体的APK包(支持双包在架,和64位兼容32位的两个形式,不再接收仅支持32位的APK包)
  • 2022年8月底:硬件支持64位的系统,将仅接收含64位版本的APK包
  • 2023年底:硬件将仅支持64位APK,32位应用无法在终端上运行

32 和 64 位区别

这里需要先说一下 CPU 类型,每种 CPU 类型对应了一种 ABI(Application Binary Interface),常见的 abi 有 armeabi、armeabi-v7a、arm64-v8a、x86、x86_64 等。

  • armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多,基本可以淘汰了
  • armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它
  • arm64-v8a: 第8代、64位ARM处理器
  • x86: 平板、模拟器用得比较多
  • x86_64: 64位的平板

这里主要看 arm 架构的,新的架构能够兼容旧的 abi 对应的 so,例如 arm64-v8a 架构的 CPU 能够运行 armeabi-v7a 架构的 so,反过来不行,这就是为什么现在很多 APP 只包含 armeabi-v7a 的包但是能够在最新的 CPU 上运行。如果以后的 CPU 不再兼容旧的架构了的话,现在只包含 armeabi 或者 armeabi-v7a 架构的 APP 就不能再运行了。

那如果同时包含两种架构呢?如果是支持 64 位系统的机器,会有两个Zygote(一个32位,一个64位)进程同时运行。APP 安装的时候根据 lib 目录里面支持的架构和机器自己的 CPU 类型来决定 primaryCpuAbi,在启动的时候会根据安装时候确定的 primaryCpuAbi 的值来决定是从64位还是32位的Zygote进程fork出子进程,如果从 64的 fork,则是以64位模式运行。

是否已满足 64 位要求

如果没有使用任何原生代码,那就已经满足 64 位的要求了。如何查看是否有使用原生库?,比较快捷的方法是使用 Android Studio 提供的 APK 分析器。入口在菜单 Build > Analyze APK…

查看 lib 文件夹,如果里只有 armeabi 或者 armeabi-v7a 文件夹,就是只支持 32 位,不支持 64 位。 如果同时还有 arm64-v8a 文件夹,则说明有 64 位原生库,是否与 32 位有相同的功能和质量,还需要进行测试。

快速找出不支持 64 位的原生库

应用内的原生库的来源一般有三处:

  • 第三方库
  • 工程内的 so 文件
  • C/C++ 源码模块

目前很多第三方库已经同时支持 32 和 64 位了,但是有些还不支持,如何找出这部分不支持的库或者文件呢?如果项目中的 so 文件数量很多,就很难通过肉眼的方式来查找,这里提供一个 gradle 脚本可以很方便快速得找出那些不支持 64 位的库。 在主模块的 build.gradle 最后面添加如下代码:

tasks.whenTaskAdded { task ->
if (task.name==‘mergeDebugNativeLibs’) {
task.doFirst {
println(““)
def v7a = []
def arm64 = []
it.inputs.files.each { file ->
if (file.absolutePath.endsWith(”/jni")) {
// println("
" + file.absolutePath)
if (file.isDirectory()) {
file.listFiles().each { soFileDir ->
if (soFileDir.absolutePath.contains(“armeabi-v7a”)) {
if (soFileDir.isDirectory()) {
soFileDir.listFiles().each {
println(it.absolutePath)
v7a.add(it.name)
}
}
}
if (soFileDir.absolutePath.contains(“arm64-v8a”)) {
if (soFileDir.isDirectory()) {
soFileDir.listFiles().each {
println(it.absolutePath)
arm64.add(it.name)
}
}
}
}
}
}
}
println(“v7a size: ${v7a.size()}”)
println(“arm64 size: KaTeX parse error: Expected '}', got 'EOF' at end of input: …t)) { println("it”)
}
}
println("
==========”)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

写在最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-SwXo6rwa-1712608924288)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值