Android手机64位和32位的软件存在兼容问题吗 如何解决64位系统与32位软件不兼容

作者&投稿:巫药 (若有异议请与网页底部的电邮联系)

Android手机64位和32位的软件存在兼容。

关于Android 64位系统兼容32位应用的实现的简单分析:

Android 的zygote进程的实现不同于之前的版本,除了有zygote进程之外还有zygote64进程。

在init.zygote32_64.rc中有明确指出:

service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote

...

service zygote_secondary /system/bin/app_process64 -Xzygote /system/bin --zygote --socket-name=zygote_secondary

...

其中app_process32 和app_process64 就是zygote进程的可执行程序,启动后会改名成zygote。

顾名思义,zygote32即app_process32是一个运行在32位的进程,它所连接的库也都是32位的。而zygote64就是运行在64位的进程,它所连接的库都是64位的。

在不考虑有32/64兼容库的情况下,一个进程如果要正确运行,就必须从可执行程序入口开始到所有使用的库都保持32/64位的一致性。

因为zygote进程是所有第三方应用程序的父进程,所以可以认为,如果应用程序是32位的,那没他的父进程也肯定是32位,换句话说,如果需要启动某个32位的应用,那么肯定是通过32位的zygote进程fork出来的。

这个一点可以在ActivityManagerService上得到验证。

ActivityManagerService中startProcessLocked方法实现启动应用,主要通过Process中的startViaZygote方法

这个方法最终是向相应的zygote进程发出fork的请求 zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi), argsForZygote);

其中openZygoteSocketIfNeeded(abi)会根据abi的类型,选择不同的zygote的socket监听的端口

在之前的init文件中可以看到zygote32位监听的端口就是–socket-name=zygote另外一个就是–socket-name=zygote_secondary

因此可以证实,之前的猜测,即32应用进由32位zygote进程fork出来,64位应用进程由64zygote进程fork出来。那么之前说的abi参数就是决定应用是32还是64位的关键所在,跟踪这个参数,发现这个参数在ApplicationInfo的primaryCpuAbi中决定

这个值由PackageManagerService在做scanPackageLI的时候决定,具体这个值的得出有一个公式化的过程,主要就是判断这个apk有没有使用native的库

如果使用了,那就看使用了的是32位的还是64位的,另外还要看系统支持的是32位还是64位的。

在64位设备上,如果app的 lib 目录下 存在armeabi,则以32位兼容方式运行。

如果存在arm64-v8a 则已64位运行。如果没有任何 so,则 primaryCpuAbi 为空,按照系统的默认配置决定,也就是64位运行。

根据这些因素就可以决定这个apk是应该是32位的还是64位的。以上就是Android L 64位系统兼容32位应用的基本实现过程。另外记录一点,在源码环境下如果要PREBUILT第三方的so

如果是32位的需要专门标注 LOCAL_MULTILIB := 32以此告诉编译系统so位32位,防止编译到64位下去。

扩展资料:

64位和32位芯片的区别

其实手机处理器和PC处理器对于位数的概念是相同的,这里我就用PC的处理器来说明了。对CPU有些了解的人大概都知道Pentium 3和Pentium 4,了解更深的,还会知道是i386处理器在20几年前把处理器从16位带入32位时代。

处理器经过了近30多年的考验后,到现在已经跃升到64位,这可不同1GHz到3GHz的频率提升。如果说频率的提升是把一条4车道高速公路的时速限制从120公里提升到了360公里的话

那么从32位到64位的提升就是将这条提升了3倍时速限制的高速公路从4车道拓宽到了8车道,也就是说,这条公路的运力提升了一倍,这可是质的飞跃。



安卓系统理论上不存在所谓的64位,32位软件。


安卓是以虚拟机为中心的系统,虚拟机是多失位,就决定了虚拟机上的app是多少位。

也就是说,安卓64位和32位的区别也就是换一个64位或32位的虚拟机。简单说,不需要开发商特别开发64位软件,换个内核,原来手机上的应用就立即升级为64位。


这就是为什么安卓从dalvik转向art的原因。



简单说就是:目前85%的google Play应用完全为虚拟机代码,可以无需修改立即兼容64bit!!!!!

——这个是非常重要,目前大部分的安卓应用根本无需修改转换,安装在64位安卓手机和64位内核上,直接就是64位应用。

而其他15%的应用需要含有部分本地代码需要开发者进行对64bit架构针对性的编译,因为这些应用当初开发的时间太早。

在切换至64bit和分辨率适配的过程中,安卓要比ios有天然的接合优势,因为ios系统需要开发针对32位和64位系统的应用。



64bit的纯性能提升,部分应用是13-19%,ARM64指令集有数倍的加密性能提升,但是不应算到64bit头上。另外因为现在还没有大于4G内存的手机,所以64bit可以读取大容量内存减少I/O带来的数十倍提升并未显现出来。

——所谓64位处理器比32位处理器翻倍,哪是谣传,实际同一个架构的32位改进到64位,性能增加最多就20%。而目前所谓的64位8核的cortex a53,实际性能就相当2,3年前的cortex a9。

另外在使用针对64位的安卓5.0版本之后,会导致内存占用增加,一般规律比32位系统要多50%。所以如果没有对应的大ram,64位a53+2g只相当32位a9+1g的水平。现在2,3000买a53 8核的,一年之内就会被淘汰。




总结,

第一,你根本无需担心安卓手机32位和64位的软件兼容问题,因为安卓本身就没有64位和32位的软件游戏。一个“32位”的软件游戏,安装在art内核的64位安卓手机之上,就自动变成64位的软件游戏。

第二,64位手机的性能不是32位的2倍,而是20%的增加,甚至64位处理器可能还不如32位。你要认准的是性能架构,而不是位数。



安卓手机目前没有32位和64位之分,只有安卓平台的版本划分。

手机处理器64位兼容32位软件吗~

处理器不存在兼容性问题,是可以向下兼容的,但是需要运行兼容模式,控制兼容模式的这一块由系统管理,所以,只要能安装到系统上的32位手机软件,都是可以正常运行的。

1、在64位Win7系统下运行游戏,弹出错误对话框。

2、然后我们需要右击该程序,选择属性

3、然后我们需要然后切换到兼容性标签

4、先勾选以兼容模式运行这个程序,然后选择Windows7,在特权等级里面勾选以管理员身份运行此程序。确定,重新启动程序,不兼容的问题即可解决。

Android手机64位和32位的软件存在兼容问题吗
答:1、Android手机64位和32位的软件存在兼容。关于Android64位系统兼容32位应用的实现的简单分析:Android的zygote进程的实现不同于之前的版本,除了有zygote进程之外还有zygote64进程。2、不能。32位的操作系统是不能安装64位的软件的。但64位的操作系统是可以安装所以32位的软件的。32位应用过多,经常闪退...

手机32位和64位的区别 在哪方面有差异
答:1、设计初衷不同。64位操作系统的设计初衷是:满足机械设计和分析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求。换句简明的话说就是:它们是 高科 技人员使用本行业特殊软件的运行平台。而32位操作系统是为普通用户设计的。2、要求配置不同。64...

手机32位和64位的区别 手机32位和64位有什么区别
答:1.处理器有所不同。32位和64位处理器的位数。位数指的是CPU的GPRs的数据宽度为。32位和64位。一次能够处理32bit和64bit的数据。2.软件有所区别。64位操作系统。主要是运行一些比较特殊的行业性应用软件。这些软件都是采用64位计算。所以这些软件只能运行在64位操作系统下。32位应用软件主要是一些日常...

32位系统与64位系统哪个快?
答:64位应用相比较32位应用,拥有着更快的运行速度以及更好的兼容性。对比32位应用,64位应用具有更快的运行速度、更低的数据延迟和更快的用户响应。它能够更有效地管理内存使用,同时降低运行功耗,提高手机的续航能力等。正是这些优点,ARM早在2021年就公开宣布,自2023年开始,所有采用ARM架构的芯片,其...

手机处理器64位兼容32位软件吗
答:Android手机64位和32位的软件存在兼容。关于Android64位系统兼容32位应用的实现的简单分析:Android的zygote进程的实现不同于之前的版本,除了有zygote进程之外还有zygote64进程。处理器不存在兼容性问题,是可以向下兼容的,但是需要运行兼容模式,控制兼容模式的这一块由系统管理,所以,只要能安装到系统上的...

怎样判断一部手机是32位还是64位的?
答:手机32位与62位的查看方法如下:工具/原料:oppoReno7、colorOS12、CPU设备信息3.3.7。1、打开软件,点击设备信息。2、进入页面后,点击CPU信息。3、如图,即可完成查看。手机的保养方法 1、保护手机外壳。手机外壳是手机保护最为重要的部分,可以选择戴上手机壳或者贴上保护膜来防止手机外壳磨损和划伤...

Android手机64位和32位的软件存在兼容问题吗
答:Android手机64位和32位的软件存在兼容。关于Android 64位系统兼容32位应用的实现的简单分析:Android 的zygote进程的实现不同于之前的版本,除了有zygote进程之外还有zygote64进程。在init.zygote32_64.rc中有明确指出:service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-...

小米手机64位比32位应用有哪些优势?
答:但只有lpi是描述光学分辨率的尺度的。虽然dpi和ppi也属于分辨率范畴内的单位,但是他们的含义与lpi不同。而且lpi与dpi无法换算,只能凭经验估算 。64位的比32位的处理的数据多一倍。理论上也就快了一倍。因为速度是当今电脑追求的目标,所以64位软体的研发更是趋势,因此64位在以后的软体选择上会更快。

安卓手机32和64位的区别是什么?
答:安卓32位与62位区别是对内存总线位宽的支持不同。安卓运行于arm,armv7是32位指令集,32位安卓只能在armv7架构上运行,内存小于等于4GB,这对程序的读取和运行多有限制,而从armv8/armv9开始,64位安卓出现,手机内存普遍超过4GB,甚至达到12GB,内存耗尽现象大大减少。4+32g的安卓手机够用吗?如果说是...

手机32位和64位有什么区别?
答:区别:处理器有所不同 所谓64位处理器的“位数”,这个位数指的是CPU的GPRs(General-Purpose Registers通用寄存器)的数据宽度为64位,一次能够处理64bit的数据(32位是32bit),而寄存器是CPU中用来种暂时存放数据和地址的,是CPU构成的一部分。软件有所区别 64位操作系统主要考虑是运行一些比较特殊的...