解读apk分包-32位安装包、32位64位兼容包和64位安装包

这篇具有很好参考价值的文章主要介绍了解读apk分包-32位安装包、32位64位兼容包和64位安装包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、apk为何要分包(32位安装包、32位64位兼容包和64位安装包)?

2、影响apk适配的cpu架构的因素-原生代码(C/C++代码)

3、如何判断apk支持的cpu架构?

        3.1 查看apk支持的cpu架构

        3.2 不同cpu架构之间的so库的兼容关系

4、针对应用平台适配64位政策-让apk适配 64 位架构

5、Android Studio如何构建支持不同架构的apk

6、引用:


1、apk为何要分包(32位安装包、32位64位兼容包和64位安装包)?

        安卓设备的核心是cpu(中央处理器),cpu常用架构有ARM架构和x86架构,cpu又分为32位和64位,因此不同架构也分为32位和64位。

        apk为适配市面上不同安卓设备,apk运行在Android系统调用系统驱动时需要兼容不同的CPU架构,apk的应对策略是分包。

        大部分手机使用的是ARM架构,ARM架构分为32位架构、兼容32位的64位架构,以及即将推出的只支持64位的架构。

        因此apk包分为32位安装包、32位64位兼容包和64位安装包。

        注意:32位架构只支持32位安卓应用,兼容32位的64位架构支持32和64位安卓应用,不兼容32位的64位架构只支持64位安卓应用。

2、影响apk适配的cpu架构的因素-原生代码(C/C++代码)

        为什么原生代码决定apk适配的架构?为什么java代码不影响?

        安卓系统的内核是Linux,Linux是使用C语言和汇编语言编写的,Android系统是使用Java语言开发的,Java代码需要通过JNI调用原生代码才能实现对操作系统底层的调度。

        而为适配不同的cpu架构,可能需要根据cpu架构的不同编写不同的原生代码。

3、如何判断apk支持的cpu架构?

        3.1 查看apk支持的cpu架构

        通常apk中使用原生代码,基本都是将原生代码打包成so库供Java代码使用,因此判断apk支持的cpu架构只需要判断apk中包含的so库的架构即可。

        构建apk时会将不同架构的so库分不同的文件夹放置在lib文件夹下,架构和文件夹名称的对应关系如下:

        ARM架构:

        32 位:lib/armeabi-v7a、lib/armeabi

        64 位:lib/arm64-v8a

        x86架构:

        32 :lib/x86

        64 :lib/x86_64

        判断apk支持的cpu架构的方法就是检测apk文件的结构即可,具体方法如下:

        方法一:查看apk安装包中的lib文件夹下的库文件

        使用Android Studio菜单Build->Analyze APK->选择需要检测的apk,查看检测结果lib文件夹下的文件夹,如果有 armeabi、armeabi-v7a 或 x86文件夹,则说明有 32 位库,如有x86_64或arm64-v8a文件夹,则说明有64位库,如两种都有则说明即有32位库也有64位库。

        将apk文件后缀改为.zip,然后解压查看lib文件夹下的内容也可以。

        方法二:查看安卓引用代码中支持的so库的位数

        查看app模块下build.gradle文件下的android标签下的defaultConfig标签下的ndk标签下的abiFilters包含的支持的so库的位数。

        abiFilters 的值分别有以下几种,一个安卓应用可以兼容多种,用,分割

        ARM架构:

        32 位:'armeabi', 'armeabi-v7a'

        64 位:'arm64-v8a'

        x86架构:

        32 位:'x86'

        64 位: 'x86_64'

        如安卓应用没有使用任何so库,那么该安卓应用不存在主动去调度操作系统的功能,此安卓应用不管运行的手机是32位还是64位都不存在硬件调度的兼容问题,此安卓应用可以称之为32位和64位兼容包。

        3.2 不同cpu架构之间的so库的兼容关系

        Android设备如何加载.so文件

        arm64-v8a架构:

解读apk分包-32位安装包、32位64位兼容包和64位安装包

        armeabi-v7a架构:

解读apk分包-32位安装包、32位64位兼容包和64位安装包

        armeabi架构

解读apk分包-32位安装包、32位64位兼容包和64位安装包

        x86架构

解读apk分包-32位安装包、32位64位兼容包和64位安装包

        一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。不同CPU架构的Android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,但是如果没有找到对应的.so文件,也不会去armeabi下去寻找了。

        当在项目的build.gradle中设置了abiFilters时,要么对应的Filter的SO文件都有,要么都没有,那么应用程序就会直接向armeabi查找SO文件进行兼容处理。

ndk {

//APP的build.gradle设置支持的SO库架构

abiFilters 'armeabi', 'armeabi-v7a','arm64-v8a'

}

解读apk分包-32位安装包、32位64位兼容包和64位安装包

         适配不同的平台

   目前主流的Android设备是armeabi-v7a架构的,然后就是x86和armeabi了。如果同时包含了 armeabi,armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。

   armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。

        第三方平台的.so库怎么处理

   第三方的类库只提供了armeabi下的.so文件,我们项目里适配了armeabi-v7a和x86,如果不在对应的文件下放对应的.so文件,就可能导致某些Android设备会出一些问题,我们可以复制armeabi下得.so文件到不同的文件夹下。如果第三方提供了不同平台的.so文件,则复制不同平台的.so文件到项目中对应的文件夹下即可

4、针对应用平台适配64位政策-让apk适配 64 位架构

        原因:

        目前,Arm架构将逐步限制32位应用的运行。32位应用仅支持跑在小核之上,会导致纯32位应用在性能与功耗等方面出现明显的体验问题。预计2023底上市的旗舰机,Arm的IP架构将只支持64位应用。

        政策解读:

        Arm将推出只支持64位应用的架构,因此应用要适配64位架构,修改的目的是为了确保应用能够在仅支持 64 位架构的环境中正常运行。

        针对政策的解决方案:

        确保应用包含64位库即可,如包含不做修改,如未包含,需添加64位库即可。

        应用不一定要支持所有 64 位架构,但对于支持的每种原生 32 位架构,应用都必须包含相应的 64 位架构。

5、Android Studio如何构建支持不同架构的apk

        修改build.gradle文件下的android标签下的defaultConfig标签下的ndk标签下的abiFilters值然后打包即可。

6、引用:

小米开放平台

Android打32/64位兼容包,ABI Filter的使用及其原理 - freewsf - 博客园

如何检测Android应用是32位还是64位_黄毛火烧雪下的博客-CSDN博客_怎么看app是不是64位文章来源地址https://www.toymoban.com/news/detail-414388.html

到了这里,关于解读apk分包-32位安装包、32位64位兼容包和64位安装包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 纯鸿蒙!华为HarmonyOS NEXT不再兼容安卓应用,无法安装Apk文件

            8月7日消息,近日,华为举行2023年华为开发者大会(HDC.Together)上,除了发布HarmonyOS 4、全新升级的鸿蒙开发套件外,华为还带来了HarmonyOS NEXT开发者预览版。 据了解,HarmonyOS NEXT开发者预览版8月面向合作企业开发者开放,2024年第一季度面向所有开发者开放。  

    2024年02月09日
    浏览(61)
  • 论如何创建APP打开提示手机框架不兼容(架构:32位和64位)

    1.我目前使用的APP获取安装二维码的方式为谷歌aab分享 通过jenkins打包好APP的aab包,放到play internal app sharing-开发提供的分享地址 参考:https://www.likecs.com/show-203641655.html 将aab文件放入上传栏,生成分享文件后复制链接,进入草料二维码转为二维码(https://cli.im/) 2.用32位手机扫

    2024年02月10日
    浏览(43)
  • Socket TCP/IP协议数据传输过程中的粘包和分包问题

    一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解: 下面对上面的图进行解释: 1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。 2.粘包情况:Socket Client发送的数据包,

    2024年02月12日
    浏览(44)
  • 使用uniapp在打包微信小程序时主包和vendor.js过大(uniCloud的插件分包)

    正常的的微信小程序在编译后,主包应保持在2MB左右(限制最大2MB),其余的文件通过分包来进行加载  但是有的情况下,微信小程序的主包能达到3MB,vendor.js会达到1.5MB 当你发现的你的微信vendor.js只有1个文件夹,且这个文件非常大时,首先需要检查 manifest.json 在这个文件夹

    2024年02月02日
    浏览(72)
  • Yocto系列讲解[技巧篇]92 - armv8 aarch64兼容armv7 32位程序运行环境

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力!

    2024年01月24日
    浏览(62)
  • VMware安装Android-x86_64-9.0-r2系统兼容arm设置

    Android-x86_64-9.0-r2虚拟机安装兼容arm的android应用程序 1. 安装后WLAN提示已连接无网络(实际网络联通),终端模拟器依次输入以下命令后回车重启系统 2. 安装ES文件浏览器: (1)浏览器输入www.estrongs.com,点击Android下载安卓apk (2)左上角通知点开后点击刚下载的apk安装ES文件

    2024年02月11日
    浏览(33)
  • 全网最稀缺的安卓工具资源APPMT管理+NP管理+云注入+云注入入口解密工具+Apk单机弹窗注入+小黄鸟+黑盒(32位)+黑盒(64位)+算法助手+mhook等等……

    1.MT管理器 MT管理器是一款强大的文件管理工具和APK逆 向修改神器。 软件有汉化应用、替换资源、修改 布局、修改逻辑代码、资源混淆、去除签名校验 等功能 https://wwos.lanzouf.com/ife2J0lakxsd 密码:c2ri 2.NP管理器 NP管理器NPManager安卓反编译工具,NP管 理器是一款强大的安卓反编译

    2024年02月04日
    浏览(233)
  • Keil5软件安装方法(兼容stm32与c51方法)

    目录 一、下载软件包 二、安装软件 1、安装C51v960a.exe (1)右键以管理员权限运行程序  (2)开始安装软件  (3)勾选协议 (4)选择安装路径  (5)填写名字与邮箱  (6)等待安装 (7)安装完毕  (8)以管理员打开软件 (9)打开注册机 (10)破解成功 2、安装mdk528.exe

    2023年04月24日
    浏览(45)
  • office安装时显示已有32位的,无法安装64位

    重新安装office2019时,总显示电脑内已经安装有32位的office,不能安装64位的。把卸载程序里所有可见的office删掉也没有用,试了网上的删除注册表的一些文件也没有用。最后看官网给出了办法 从PC卸载Office 下载该工具,重启计算机即可

    2024年02月11日
    浏览(36)
  • 尝试安装时出现“无法安装 Office(64 位或 32 位)”错误

    如果尝试在已安装 32 位版或 64 位版 Office 的计算机上安装 64 位版或 32 位版 Office 套件或 Visio 等 Office 独立应用程序,可能会看到如下所示的错误消息。 发生这种情况是因为 64 位版和 32 位版 Office 不能混用。 微软官方【从 PC 卸载 Office】 选择以下按钮,下载并安装 Office 卸载

    2024年02月04日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包