返回列表 发新帖

Scene不支持32位?自己编译一个补上就行了!

[复制链接]

89

主题

1373

回帖

4771

积分

大学生

Rank: 5Rank: 5

金币
3178
好评
10
信誉
103

MT论坛最佳新人MT论坛帅哥MT论坛新人考神

发表于 2026-6-17 04:02:29 来自手机  | 显示全部楼层 | 阅读模式  来自 安徽
本帖最后由 HaiMing 于 2026-6-18 00:43 编辑

Scene 不支持32位?自己编译一个补上就行了





前言

买了台电视盒子,芯片是64位的,系统却是32位。其实很多电视盒子和应用对32位兼容性更好,原厂这么配也能理解。本来想装个Scene看看硬件参数,结果安装的时候直接提示应用不兼容。拿MT管理器打开安装包一看,lib目录里就一个 arm64-v8a 的文件夹,armeabi-v7a 根本没有。也就是说这个应用只带64位库,32位系统装了就找不到so文件

本来想找个旧版本凑合用,后来琢磨了一下,不如先看看这个库到底干了什么。把那个 libnative-lib.so 拿出来翻了下符号表,才 5KB,就一个导出函数:Java_com_omarea_vtools_SceneJNI_getKernelPropLong。顺着符号往下看,逻辑很简单:收一个文件路径,用GB2312编码转成C字符串,fopen打开,fscanf读一个long整数,返回。就这点事。Scene 也就这一个 so,没有其他原生库了

这个逻辑太直了,自己照着写一个完全一样的,编译成32位塞回去就行。下面把步骤记一下




准备工作

需要三样东西:NDK编译环境、apktool拆包打包、一个签名用的keystore

NDK有点大,文件1/2GB是正常的

NDK推荐 r21e。Windows 64位 下载 android-ndk-r21e-windows-x86_64.zip,解压到 C:\ndk,里面有 ndk-build.cmd 就对了。Linux x86_64 同理下对应的 android-ndk-r21e-linux-x86_64.zip。如果 Linux 是 ARM64 架构的(比如树莓派、M1 虚拟机),r21 没有对应的包,用 r23c 的 android-ndk-r23c-linux.zip,解压到 ~/ndk 就行。apktool 官网可以下:https://ibotpeaches.github.io/Apktool/,keystore 没有的话后面会用命令生成




代码部分

新建一个 mylib 文件夹,里面再建 jni 文件夹,结构:

  1. mylib/
  2. └── jni/
  3. ├── Android.mk
  4. └── native-lib.cpp
复制代码


代码无法直接放在这里,否则代码会混入不间断空格(NBSP  U+00A0)所以使用base64加密

Android.mk 内容:

  1. TE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQppbmNsdWRlICQoQ0xFQVJfVkFSUykKTE9DQUxfTU9EVUxFICAgIDo9IG5hdGl2ZS1saWIKTE9DQUxfU1JDX0ZJTEVTIDo9IG5hdGl2ZS1saWIuY3BwCkxPQ0FMX0xETElCUyAgICA6PSAtbGxvZwppbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkp
复制代码


native-lib.cpp(完全还原了原库的GB2312转码和文件读取逻辑):

  1. I2luY2x1ZGUgPGpuaS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKc3RhdGljIGNoYXIqIGpzdHJpbmdUb0NoYXIoSk5JRW52KiBlbnYsIGpzdHJpbmcganN0cikgewogICAgaWYgKGpzdHIgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CgogICAgamNsYXNzIHN0cmluZ0NsYXNzID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9TdHJpbmciKTsKICAgIGlmIChzdHJpbmdDbGFzcyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKCiAgICBqbWV0aG9kSUQgZ2V0Qnl0ZXNNZXRob2QgPSBlbnYtPkdldE1ldGhvZElEKHN0cmluZ0NsYXNzLCAiZ2V0Qnl0ZXMiLCAiKExqYXZhL2xhbmcvU3RyaW5nOylbQiIpOwogICAgaWYgKGdldEJ5dGVzTWV0aG9kID09IE5VTEwpIHJldHVybiBOVUxMOwoKICAgIGpzdHJpbmcgY2hhcnNldE5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiR0IyMzEyIik7CiAgICBpZiAoY2hhcnNldE5hbWUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CgogICAgamJ5dGVBcnJheSBieXRlQXJyYXkgPSAoamJ5dGVBcnJheSllbnYtPkNhbGxPYmplY3RNZXRob2QoanN0ciwgZ2V0Qnl0ZXNNZXRob2QsIGNoYXJzZXROYW1lKTsKICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoY2hhcnNldE5hbWUpOwogICAgaWYgKGJ5dGVBcnJheSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKCiAgICBqc2l6ZSBsZW4gPSBlbnYtPkdldEFycmF5TGVuZ3RoKGJ5dGVBcnJheSk7CiAgICBpZiAobGVuIDw9IDApIHsKICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGJ5dGVBcnJheSk7CiAgICAgICAgcmV0dXJuIE5VTEw7CiAgICB9CgogICAgY2hhciogY3N0ciA9IChjaGFyKiltYWxsb2MobGVuICsgMSk7CiAgICBpZiAoY3N0ciA9PSBOVUxMKSB7CiAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihieXRlQXJyYXkpOwogICAgICAgIHJldHVybiBOVUxMOwogICAgfQoKICAgIGVudi0+R2V0Qnl0ZUFycmF5UmVnaW9uKGJ5dGVBcnJheSwgMCwgbGVuLCAoamJ5dGUqKWNzdHIpOwogICAgY3N0cltsZW5dID0gJ1wwJzsKCiAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGJ5dGVBcnJheSk7CiAgICByZXR1cm4gY3N0cjsKfQoKZXh0ZXJuICJDIiBKTklFWFBPUlQgamxvbmcgSk5JQ0FMTApKYXZhX2NvbV9vbWFyZWFfdnRvb2xzX1NjZW5lSk5JX2dldEtlcm5lbFByb3BMb25nKEpOSUVudiogZW52LCBqY2xhc3MgLyogY2xhenogKi8sIGpzdHJpbmcgcGF0aCkgewogICAgY2hhciogcGF0aFN0ciA9IGpzdHJpbmdUb0NoYXIoZW52LCBwYXRoKTsKICAgIGlmIChwYXRoU3RyID09IE5VTEwpIHJldHVybiAwOwoKICAgIGxvbmcgdmFsdWUgPSAwOwogICAgRklMRSogZnAgPSBmb3BlbihwYXRoU3RyLCAiciIpOwogICAgaWYgKGZwKSB7CiAgICAgICAgZnNjYW5mKGZwLCAiJWxkIiwgJnZhbHVlKTsKICAgICAgICBmY2xvc2UoZnApOwogICAgfQoKICAgIGZyZWUocGF0aFN0cik7CiAgICByZXR1cm4gdmFsdWU7Cn0=
复制代码





编译(注意上一步的两个文件放在 jni 文件夹里才对!)

Windows 打开 cmd:

  1. cd /d C:\Users\你的用户名\Desktop\mylib
  2. C:\ndk\ndk-build.cmd APP_ABI=armeabi-v7a
复制代码


Linux:

  1. cd ~/mylib
  2. ~/ndk/ndk-build APP_ABI=armeabi-v7a
复制代码


最后看到 [armeabi-v7a] Install : libnative-lib.so => lib/armeabi-v7a/libnative-lib.so 就是成功了,库就在 当前目录




塞回 APK

先用 apktool 解包:

  1. apktool d scene.apk -o scene_debug
复制代码


在 scene_debug/lib 里新建 armeabi-v7a 文件夹,把编译好的 libnative-lib.so 放进去。然后 务必删掉原来的 arm64-v8a 整个文件夹,不然系统可能会优先加载64位。重新打包:

  1. apktool b scene_debug -o scene_fixed.apk
复制代码





签名

没有 keystore 的话先生成一个,别名和密码都设成 debug 好记:

  1. keytool -genkey -v -keystore debug.keystore -alias debug -keyalg RSA -keysize 2048 -validity 10000 -storepass debug123 -keypass debug123
复制代码


然后签:

  1. jarsigner -verbose -keystore debug.keystore -storepass debug123 scene_fixed.apk debug
复制代码


输完密码完事。scene_fixed.apk 传到盒子上安装就能用了




整个过程能走通,主要还是因为 libnative-lib.so 本身 太简单 了,没有复杂逻辑,也没有其他依赖。作者估计觉得现在没几个32位设备了,编译的时候就懒得勾那个架构。自己补一个不费什么劲,也不用等更新。遇到类似情况的,只要原生库结构不复杂,都可以按这个思路试试
已有1人评分金币 理由
青春向上 + 1 大佬厉害。

查看全部评分 总评分:金币 +1 

回复

使用道具 举报

89

主题

1373

回帖

4771

积分

大学生

Rank: 5Rank: 5

金币
3178
好评
10
信誉
103

MT论坛最佳新人MT论坛帅哥MT论坛新人考神

发表于 2026-6-17 04:04:07 来自手机  | 显示全部楼层  来自 安徽
本帖最后由 HaiMing 于 2026-6-17 07:22 编辑

沙发
回复

使用道具 举报

0

主题

2976

回帖

6918

积分

硕士生

Rank: 6Rank: 6

金币
3334
好评
0
信誉
100

MT论坛新人考神MT论坛帅哥

发表于 2026-6-17 06:25:42 来自手机  | 显示全部楼层  来自 浙江
感谢分享
回复

使用道具 举报

96

主题

1176

回帖

4294

积分

大学生

哈哈

Rank: 5Rank: 5

金币
1456
好评
6
信誉
100

MT论坛最佳新人考神MT论坛新人MT论坛帅哥

发表于 2026-6-17 07:31:51 来自手机  | 显示全部楼层  来自 广西
感谢分享
回复

使用道具 举报

54

主题

4527

回帖

1万

积分

博士生

辰夕Mod

Rank: 7Rank: 7Rank: 7

金币
7121
好评
35
信誉
169

MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2026-6-17 07:44:10 来自手机  | 显示全部楼层  来自 辽宁
竟然还有不支持64位的手机
回复

使用道具 举报

35

主题

1124

回帖

3531

积分

大学生

Rank: 5Rank: 5

金币
2868
好评
2
信誉
98
发表于 2026-6-17 08:17:54 来自手机  | 显示全部楼层  来自 四川
scene的很多可执行文件不是在assets文件夹下面吗
回复

使用道具 举报

35

主题

1124

回帖

3531

积分

大学生

Rank: 5Rank: 5

金币
2868
好评
2
信誉
98
发表于 2026-6-17 08:19:59 来自手机  | 显示全部楼层  来自 四川
礼貌的LMY 发表于 2026-6-17 08:17
scene的很多可执行文件不是在assets文件夹下面吗

deamon在res/raw下面
回复

使用道具 举报

14

主题

753

回帖

2238

积分

大学生

咕咕咕

Rank: 5Rank: 5

金币
1621
好评
0
信誉
101

MT论坛新人

发表于 2026-6-17 08:51:08 来自手机  | 显示全部楼层  来自 河北
感谢分享教程
回复

使用道具 举报

6

主题

829

回帖

1812

积分

高中生

Rank: 4

金币
869
好评
0
信誉
100
发表于 2026-6-17 09:08:23 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

41

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6148
好评
3
信誉
98
发表于 2026-6-17 09:17:11 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

89

主题

1373

回帖

4771

积分

大学生

Rank: 5Rank: 5

金币
3178
好评
10
信誉
103

MT论坛最佳新人MT论坛帅哥MT论坛新人考神

发表于 2026-6-17 11:03:16 来自手机  | 显示全部楼层  来自 安徽
礼貌的LMY 发表于 2026-6-17 08:17
scene的很多可执行文件不是在assets文件夹下面吗
很多可执行文件,但是逻辑很简单啊,大部分又不是so,而且我只是列举其中一个。像/assets/toolkit/busybox,这个在github仓库,同样可以下载到32位的so
主要还得看看需要的人多不多
回复

使用道具 举报

1

主题

210

回帖

1519

积分

高中生

Rank: 4

金币
527
好评
1
信誉
100
发表于 2026-6-17 23:17:35 来自手机  | 显示全部楼层  来自 上海
nb干货
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表