Android 64 bit的一些兼容性分析
阅读原文
摘要: Android 64 bit系统的一些兼容性分析 0x0:前言 Android L之后android开始了支持64bit的系统,现在64位的手机越来越多,基本上现在出的新机都是64位的了,所以64位将会是一个趋势,但是对于对于开发者来说,64位android你真的了解么?64位系统是如何无缝兼容32位app的? 0x1:32位兼容分析 *首先在init.
Android 64 bit系统的一些兼容性分析
0x0:前言
Android L之后android开始了支持64bit的系统,现在64位的手机越来越多,基本上现在出的新机都是64位的了,所以64位将会是一个趋势,但是对于对于开发者来说,64位android你真的了解么?64位系统是如何无缝兼容32位app的?
0x1:32位兼容分析
首先在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
这两个进程在系统中就是传说中的zygote进程,所有进程的孵化器,zygote对应app_proccess32,zygote64对应app_proccess64
顾名思义,android所有的应用进程都是fork zygote而来的
- 那么,当我们启动一个app时,系统是如何选择运行32位模式还是64位模式的,为什么有些app的父进程是zygote,有些是zygote64呢?*
通过看系统源码,从系统启动一个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位模式执行。
0x2:结论:
**对于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位运行环境的差异:
动态链接库查找路径:
32位的环境是LD_LIBRARY_PATH=/vendor/lib:/system/lib;
64位的环境是LD_LIBRARY_PATH=/vendor/lib64:/system/lib64;
因此,在编写native层代码的时候,如果有一些代码硬编码了lib里面的so路径的时候,比如硬编码了/system/lib/libc.so 这个路径,在64位运行环境执行就会出错
参考文章:
https://coolpers.github.io/android/64bit/32bit/2015/10/14/android-64bit-32bit-compatibility.html
http://androidxref.com/ 查看系统源码
Android 64 bit的一些兼容性分析相关推荐
- Android 系统(78)---《android framework常用api源码分析》之 app应用安装流程
<android framework常用api源码分析>之 app应用安装流程 <android framework常用api源码分析>android生态在中国已经发展非常庞大 ...
- Android+上百实例源码分析以及开源分析+集合打包
1.360新版特性界面源代码 实现了360新版特性界面的效果,主要涉及到Qt的一些事件处理与自定义控件.但源码好像是c++. 2.aidl跨进程调用 服务端onBind暴露,然后客户端bindServ ...
- Android 短信数据库详细总结分析
Android 短信数据库详细总结分析 短信 sms 文件 /data/data/com.android.providers.telephony/databases/mmssms.db 这个数据库 ...
- Android上百实例源码分析以及开源分析集合打包
感谢网友banketree的收集,压缩包的内容如下: 1.360新版特性界面源代码 实现了360新版特性界面的效果,主要涉及到Qt的一些事件处理与自定义控件.但源码好像是c++. 2.aidl跨进程调 ...
- [免费专栏] Android安全之APK应用程序分析「附带Smali基础语法解析」
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- android8.1上musicfx,Android自带音频均衡器MusicFx分析
Android自带音频均衡器MusicFx分析 种种原因,我要简单分析一个Android中built-in的音频均衡器MusicFx.重点是它的默认值的来历.网上很少有文章讲了这个的除了这篇<c ...
- Android Studio - HPROF文件查看和分析工具
Android Studio - HPROF文件查看和分析工具 Android Studio 翻译的官方文章 原文链接 当你在Android Studio中使用Android Monitor里的Mem ...
- Android中启动Activity(startActivity)流程图分析
在上篇博文< Android中ActivityManagerService与应用程序(客户端)通信模型分析>中,我们从宏观架构上掌握 ActivityManagerService与应用程序 ...
- Android Camera 系统架构源码分析
Android Camera 系统架构源码分析(1)---->Camera的初始化 Android Camera 系统架构源码分析(2)---->Camera的startPreview和s ...
最新文章
- Python中的defaultdict函数
- 规模化敏捷框架(SAFe)的原则
- 【计算机组成原理】多功能算数逻辑运算单元
- 【黑客免杀攻防】读书笔记14 - 面向对象逆向-虚函数、MFC逆向
- 如何让HTML在手机上实现直接拨打电话以及发送短信?
- python 并行_python并行处理任务时 该用多进程?还是该用多线程?
- 对象序列化时候无法创建类似如此(king:astar)的元素名
- VBA处理文件框架代码 【第七部分:程序页面布局】
- Android 得到函数耗时多少的方法
- 电影院售票系统PHP项目,电影院售票系统设计(代码+完整报告)
- JVM内存管理--GC算法精解(五分钟教你终极算法---分代搜集算法)
- oppo升级android,OPPO Real R807升级Android4.0教程
- 太极图正确画法_太极图唯一正确的画法
- 人工智能被批不环保,训练一个神经网络的排炭量竟然比5辆车还多?
- 关于论文组会的一些思考(其一)
- 金融科技之交易:动量效应选股策略
- [ExtJS] 颜色选择器2.0
- 实现一个简洁朴素的左侧贴边导航栏html+CSS+javaScript
- 英语语法---表语详解
- 随机过程与排队论(一)