发布网友 发布时间:2022-04-24 08:44
共3个回答
热心网友 时间:2022-06-18 03:19
Android手机位和32位的软件存在兼容。
关于Android 位系统兼容32位应用的实现的简单分析:
Android 的zygote进程的实现不同于之前的版本,除了有zygote进程之外还有zygote进程。
在init.zygote32_.rc中有明确指出:
service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote
...
service zygote_secondary /system/bin/app_process -Xzygote /system/bin --zygote --socket-name=zygote_secondary
...
其中app_process32 和app_process 就是zygote进程的可执行程序,启动后会改名成zygote。
顾名思义,zygote32即app_process32是一个运行在32位的进程,它所连接的库也都是32位的。而zygote就是运行在位的进程,它所连接的库都是位的。
在不考虑有32/兼容库的情况下,一个进程如果要正确运行,就必须从可执行程序入口开始到所有使用的库都保持32/位的一致性。
因为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出来,位应用进程由zygote进程fork出来。那么之前说的abi参数就是决定应用是32还是位的关键所在,跟踪这个参数,发现这个参数在ApplicationInfo的primaryCpuAbi中决定
这个值由PackageManagerService在做scanPackageLI的时候决定,具体这个值的得出有一个公式化的过程,主要就是判断这个apk有没有使用native的库
如果使用了,那就看使用了的是32位的还是位的,另外还要看系统支持的是32位还是位的。
在位设备上,如果app的 lib 目录下 存在armeabi,则以32位兼容方式运行。
如果存在arm-v8a 则已位运行。如果没有任何 so,则 primaryCpuAbi 为空,按照系统的默认配置决定,也就是位运行。
根据这些因素就可以决定这个apk是应该是32位的还是位的。以上就是Android L 位系统兼容32位应用的基本实现过程。另外记录一点,在源码环境下如果要PREBUILT第三方的so
如果是32位的需要专门标注 LOCAL_MULTILIB := 32以此告诉编译系统so位32位,防止编译到位下去。
扩展资料:
位和32位芯片的区别
其实手机处理器和PC处理器对于位数的概念是相同的,这里我就用PC的处理器来说明了。对CPU有些了解的*概都知道Pentium 3和Pentium 4,了解更深的,还会知道是i386处理器在20几年前把处理器从16位带入32位时代。
处理器经过了近30多年的考验后,到现在已经跃升到位,这可不同1GHz到3GHz的频率提升。如果说频率的提升是把一条4车道高速公路的时速*从120公里提升到了360公里的话
那么从32位到位的提升就是将这条提升了3倍时速*的高速公路从4车道拓宽到了8车道,也就是说,这条公路的运力提升了一倍,这可是质的飞跃。
热心网友 时间:2022-06-18 03:19
安卓系统理论上不存在所谓的位,32位软件。
安卓是以虚拟机为中心的系统,虚拟机是多失位,就决定了虚拟机上的app是多少位。
也就是说,安卓位和32位的区别也就是换一个位或32位的虚拟机。简单说,不需要开发商特别开发位软件,换个内核,原来手机上的应用就立即升级为位。
这就是为什么安卓从dalvik转向art的原因。
简单说就是:目前85%的google Play应用完全为虚拟机代码,可以无需修改立即兼容bit!!!!!
——这个是非常重要,目前大部分的安卓应用根本无需修改转换,安装在位安卓手机和位内核上,直接就是位应用。
而其他15%的应用需要含有部分本地代码需要开发者进行对bit架构针对性的编译,因为这些应用当初开发的时间太早。
在切换至bit和分辨率适配的过程中,安卓要比ios有天然的接合优势,因为ios系统需要开发针对32位和位系统的应用。
bit的纯性能提升,部分应用是13-19%,ARM指令集有数倍的加密性能提升,但是不应算到bit头上。另外因为现在还没有大于4G内存的手机,所以bit可以读取大容量内存减少I/O带来的数十倍提升并未显现出来。
——所谓位处理器比32位处理器翻倍,哪是谣传,实际同一个架构的32位改进到位,性能增加最多就20%。而目前所谓的位8核的cortex a53,实际性能就相当2,3年前的cortex a9。
另外在使用针对位的安卓5.0版本之后,会导致内存占用增加,一般规律比32位系统要多50%。所以如果没有对应的大ram,位a53+2g只相当32位a9+1g的水平。现在2,3000买a53 8核的,一年之内就会被淘汰。
总结,
第一,你根本无需担心安卓手机32位和位的软件兼容问题,因为安卓本身就没有位和32位的软件游戏。一个“32位”的软件游戏,安装在art内核的位安卓手机之上,就自动变成位的软件游戏。
第二,位手机的性能不是32位的2倍,而是20%的增加,甚至位处理器可能还不如32位。你要认准的是性能架构,而不是位数。
热心网友 时间:2022-06-18 03:20
安卓手机目前没有32位和位之分,只有安卓平台的版本划分。追问软件存在兼容性问题吗
追答一般兼容的。