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

Android L 的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位的。

根据这些因素就可以决定这个apk是应该是32位的还是64位的。

以上就是Android L 64位系统兼容32位应用的基本实现过程。

另外记录一点,在源码环境下如果要PREBUILT第三方的so,如果是32位的需要专门标注

LOCAL_MULTILIB := 32

以此告诉编译系统so位32位,防止编译到64位下去。

来源 http://stackoverflow.com/questions/27712921/how-to-use-32bit-native-libraries-on-64-bit-android-l-platform

Android L 64位兼容32 应用程序的认识相关推荐

  1. linux 64位兼容32位,linux的64位操作系统对32位程序的兼容-全面分析

    1.结构体ioctl_trans: struct ioctl_trans { unsigned long cmd; ioctl_trans_handler_t handler; struct ioct ...

  2. android 64位兼容32位

    猴子在调用高德地图的时候,遇到一个操作系统兼容问题,异常堆栈说是找不到so库文件,猴子就不懂了,明明有他说的那个文件. 后来和同行交流,他们的jniLibs中有一个arm64-v8a的文件夹用来存放6 ...

  3. Android之64位和32位区分

    image.png .. ABI 是什么 在Android编码时候 ,我们经常会看到ABI .ABI的意思是 Application Binary Interface 的缩写. 不同 Android ...

  4. Android手机64位APP兼容

    为什么 2022 armv9芯片新机出货,不兼容32位,出现卡顿闪退等问题 64位性能更好 手机硬件升级,存储更大,应用包体积不敏感 应用市场的政策 Google Play声明 自 2019 年 8 ...

  5. Android 适配 64 位架构

    Android 适配 64 位架构 原文地址 https://juejin.cn/post/6964737926617890853 背景 64位的应用性能更好,也能运行在未来仅支持 64 位架构的设备 ...

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

    目录 1.apk为何要分包(32位安装包.32位64位兼容包和64位安装包)? 2.影响apk适配的cpu架构的因素-原生代码(C/C++代码) 3.如何判断apk支持的cpu架构? 3.1 查看ap ...

  7. INF文件详解(32位64位兼容INF)

    INF文件格式要求 一个INF文件是以段组织的简单的文本文件.一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名.每个段包含特定的条目和命名,这些命名用于引用I ...

  8. c语言程序判断32位还是64位,c++ 判断是64位还是32位系统的实例

    1.IsWow64Process 确定指定进程是否运行在64位操作系统的32环境(Wow64)下. 语法 BOOL WINAPI IsWow64Process( __in HANDLE hProces ...

  9. php 不是有效的win32,%1不是有效的 win32应用程序(64位转换32位)

    在windows 2003 64位系统上安装完iis后,运行php文件提示%1不是有效的 win32应用程序,百度一下,终于找出问题,原来是windows2003 64位的操作系统和32位IIS的问题 ...

最新文章

  1. iOS友盟推送发送失败
  2. Xml,XPath,XSLTxue 学习方法
  3. angular模态框位置_宽带双波束双模态OAM反射阵天线
  4. 【规范】前端编码规范——css 规范
  5. t-sne 流形_流形学习[t-SNE,LLE,Isomap等]变得轻松
  6. react(93)--成功置空
  7. 【算法分析与设计】汉诺塔问题
  8. java resultset查询_java – 什么是“查询返回多个ResultSet”的解决方案
  9. python源码剖析 豆瓣_在数据分析师的分析中豆瓣的书那些值得读
  10. mamp安装php扩展,向MAMP添加GMP PHP扩展
  11. paip.java c++得到当前类,方法名称以及行号
  12. html返回顶部动画,基于JavaScript实现回到页面顶部动画代码
  13. Matlab添加VS2013编译器
  14. 【C语言】大小写转换
  15. 对应的服务器证书无效。控制台输入 showRequestInfo() 可以获取更详细信息
  16. 排序算法--鸽巢排序(PigeonholeSort)的原理、排序思路、适用场景及代码示例
  17. 学了python能找人吗_只学python能找工作吗
  18. Nuxt.js 中定制 error.vue 错误缺省页
  19. macd 公式 java_EMA指标和MACD指标的JAVA语言实现 | 学步园
  20. Android nfc模块读写MifareClassic卡50

热门文章

  1. recylerview嵌套scrollview卡顿
  2. (转)The C10K problem翻译
  3. 中文字体下载大全+传世书法墨迹珍藏..等20款[序
  4. nyquist matlab 稳定性,基于MATLAB控制系统的Nyquist图及其稳定性分析 基于MATLAB控制系统的伯德图及其频域分析...
  5. webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩
  6. 自定义Banner轮播图片
  7. 落户申请 有计算机证书,考信息系统项目管理师证书是不是可以申请入户
  8. 【Elasticsearch】相关性,近义词匹配,纠错匹配
  9. 连麦互动直播中混屏技术设计
  10. c语言混合编程 pdf,C语言与汇编语言混合编程的方法.pdf