Android 64 bit的一些兼容性分析

  • 时间:
  • 浏览:1
  • 来源:大发5分6合_大发5分6合官方

通过看系统源码,从系统启动有有一好几个 app现在结速了了,需用发现系统启动有有一好几个 应用是通过ActivityManagerService中startProcessLocked最好的办法,主要通过Process中的startViaZygote最好的办法,你是什么最好的办法最终是向相应的zygote守护程序运行运行发出fork的请求 zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi), argsForZygote);

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

zygote32位监听的端口有如果我–socket-name=zygote

zygote64有如果我–socket-name=zygote_secondary

你是什么abi有如果我决定该app是fork zygote 还是fork zygote64,这三种模式就决定该app运行在何种环境。

于是,.我歌词 继续跟踪abi是从哪里传过来的,发现你是什么参数在ApplicationInfo的primaryCpuAbi中决定。

而你是什么值是PackageManagerService在scanPackageLI的从前传进来的。

最终,需用发现你是什么值是由apk的native 库决定的,需用得出有有一好几个 判断逻辑:



肯能apk中的native库中中有 arm64-v8a,则以64位的模式执行,fork zygote64

肯能这么 ,则看有这么 armeabi-v7a,armeabi这有有一好几个 ,肯能有,则以32位模式执行,fork zygote

肯能apk中这有有一好几个 库都这么 ,则默认以64位模式执行。

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

**对于android开发者,.我歌词 应该要知道些什么呢?

**

1、64位系统从前是为了加快速率地执行指令,有如果,肯能.我歌词 想提升app在64位机器运行的速率,编译so的从前最好把arm64-v8a编译出来,在Application.mk顶端加进去去APP_ABI = APP_ABI := armeabi armeabi-v7a arm64-v8a,当然,你是什么会对包size有一定的影响。

2、肯能开发者考虑更多的是兼容性励志的话 ,有点硬是引起第三方的sdk的从前,肯能sdk这么 arm64-v8的库引入来,这么 就最好何必 把 arm64-v8a编译进去,有如果在64位机器会出先 什么都间题,比如:

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/xxx.so" is 32-bit instead of 64-bit 3、64位和32位运行环境的差异:

参考文章:

https://coolpers.github.io/android/64bit/32bit/2015/10/14/android-64bit-32bit-compatibility.htmlhttp://androidxref.com/ 查看系统源码

这有有一好几个 守护程序运行运行在系统中有 如果我传说中的zygote守护程序运行运行,所有守护程序运行运行的孵化器,zygote对应app_proccess32,zygote64对应app_proccess64

顾名思义,android所有的应用守护程序运行运行也有fork zygote而来的

Android L从前android现在结速了了了支持64bit的系统,现在64位的手机过多,基本上现在出的新机也有64位的了,什么都64位肯能是有有一好几个 趋势,有如果对于对于开发者来说,64位android你真的了解么?64位系统是怎么无缝兼容32位app的?

首先在init.zygote32_64.rc顶端有这两条开机启动的服务