Nokia N1 添加v2兼容库支持,以及移植arm64兼容库
首先,这个arm64的兼容性很拉跨,来源于电脑端remix os 2.0,以及米板2的MIUI,所以用过这俩系统的人应该清楚是怎么个回事。就个人体验而言64位的哔哩哔哩HD版是兼容最好的app,64位Acfun在看视频过程会重启应用,64位8.8.50版本QQ在登录完就会闪退,此外呢还有64位阿尔托冒险直接闪退(我一般用这个测试兼容库正不正常),b站64位闪退……
所以其实这篇移植教程作用不大
但是呢,对于32位app的兼容性你就可以多一个选择了,诺基亚n1的houdini版本是5.1.0,而添加v2兼容库支持就可以试试5.2.2或5.2.3版本houdini的兼容性了,应该会好一点。
废话少说,首先说要求:
电脑一台,
必须为B19版本的系统(台版、国版都行),
需要看过这板子的刷机教程(需要刷boot),
需要root,
添加替换文件推荐用mt管理器。
如果不清楚文件作用,请按教程来,不然,开不了机的话自己重刷系统,楼主的文件仅供学习不承担责任。
步骤:
1. 改selinux为宽容模式(selinux开启时,替换bin目录文件将导致进不了系统):
提取你ROM压缩包的boot.img到平板,
下载Image Studio for Android
点加号,选“Unpack/Mount”,然后选取刚刚复制来的boot.img
加载完,点进split_img,选cmdline结尾的,用这个软件的编辑器编辑
在文本的末尾加一个空格(不用换行),添加以下内容
androidboot.selinux=permissive
右上角,点save保存
加号→Repack,打包镜像
然后再Export Img,导出镜像
导出镜像后可以Cleanup清理产生的文件
接下来把打包好的镜像复制到电脑,平板重启到fastboot模式,电脑用fastboot刷到boot分区,可以百度fastboot怎么刷boot
用twrp刷boot也可以。
2. 添加v2兼容支持:
将压缩包的文件替换到system目录对应文件。
额外注意:如果是惜旧ROM或者自己用supersu进行了root,那么bin目录下的会有app_process_init和app_process64_original这两个文件,而app_process64只是一个链接文件。不要直接替换app_process64,先把准备要复制的app_process64改名成app_process_init或app_process64_original其中一个替换掉,再改名成剩下那个替换掉。
包含以下文件内容:
/system/bin/:app_process32,app_process64,dalvikvm32,dalvikvm64,
dex2oat,oatdump,patchoat,surfaceflinger
/system/lib/:libart.so,libsigchain.so,libnativebridge.so
/system/lib64/:libart.so,libsigchain.so,libnativebridge.so
权限的设置均为rw-r--r--(0644)
3. 添加arm64的binfmt支持,如果不要arm64兼容,这一步可省略:
复制arm64_exe,arm64_dyn到/system/etc/binfmt_misc/,复制的文件设置权限0644
4. 复制兼容库,分32位和64位,还有备份的32位houdini_5.1.0(如果想恢复):
32位(houdini尾缀为y):
/system/bin/:houdini
/system/lib/:libhoudini.so文件,arm整个目录复制过去
64位(houdini尾缀为z):
/system/bin/:houdini64
/system/lib/:libhoudini.so文件,arm64整个目录复制过去
权限设置:/system/bin/下的文件权限为rwxr-xr-x(0755)
剩余的文件均为0644,文件夹为0755
5. 修改build.prop,仅针对添加arm64支持:
①红色为加的内容:
ro.product.cpu.abilist=x86_64,x86,armeabi-v7a,armeabi,arm64-v8a
ro.product.cpu.abilist64=x86_64,arm64-v8a
(一定要在末尾添加,要把arm64-v8a的优先级设成最低)
②找到这两行,在下面加两行(不是改):
ro.dalvik.vm.isa.arm=x86
ro.enable.native.bridge.exec=1
ro.dalvik.vm.isa.arm64=x86_64
ro.enable.native.bridge.exec64=1
改完保存。
额外说明:如果是惜旧官改包,除非你不使用他的“1.导航栏开关(重启生效)”功能,否则你应该对 /system/xijiu/ 目录下的两个文件同步修改。



教程完毕,附上蓝奏云相关文件:
https://wwze.lanzoub.com/b0ai6evej
密码:1234
有兴趣改官方包的也可以参照以上内容。有兴趣的话可以看看简单的原理讲解?(学了很多东西捏)
最先我是只从libart和libnativebridge的源码发现了一点点源码区别,后来从这里https://github.com/iConsole/Console-OS_art/commits/consoleos-lollipop
发现了一些v2版本兼容库支持的源码改动,于是总结了需要以下改动:
libnativebridge.so需要添加两个函数,libart.so需要修复一个函数,libsigchain.so需要添加一个函数(但这个函数的真正实现却在bin目录下一些文件,这个库只是会在找不到里边包含的函数时生成报错日志)。
然后我花了很长时间看怎么修改libart和bin文件,用过LIEF,patchelf,还有用ida分析,但是后来才意识到,其实只要找到相似的文件替换就好了,因为此前我一直没懂得,应该去看elf的导入导出符号。
于是我从Tesco Hudl2的刷机包里找到了高度相似的bin文件(导入符号除了新函数实现要导入的sigemptyset外,其余全一样)。在米板2的MIUI7里找到了最相似的libart.so(几千个导出符号只有8个区别,并且这几个区别在lib和bin目录没有依赖,导入函数就只有新函数所需的区别),至于libnativebridge.so和libsigchain.so,其源码的体量很小,只有几十个符号所以基本其他机型的对应文件都可以直接替换。