如何在Python中调用Android平台的JNI .so库?
解决Windows下Python加载Android .so库的WinError193问题
错误原因
你遇到的OSError: [WinError 193] %1 is not an application Win32,本质是Android的.so库是给ARM架构设备编译的ELF格式文件,而Windows系统用的是x86/x64架构的PE格式库,两者架构和文件格式完全不兼容,Windows的Python根本没法直接加载这种库。
解决方案
方案1:在Android环境中调用(最靠谱)
既然这个.so是给Android做的,直接在Android设备/模拟器里运行Python调用是最直接的:
- 给Android装Python环境:用Termux(Android终端工具),执行
pkg install python完成安装。
- 给Android装Python环境:用Termux(Android终端工具),执行
- 把
adlemx.so放到Termux能访问的路径,比如~/libs/(如果要放系统库目录需要root权限)。
- 把
- 推荐用
pyjnius库直接调用Java类,比ctypes适配JNI更简单:
如果非要用ctypes,得注意JNI的函数名是经过修饰的,真实函数名是from jnius import autoclass # 加载Android端的x2.X类 X = autoclass('x2.X') # 调用m0do方法 result = X.m0do("测试字符串") print(result)Java_x2_X_x01,还要手动处理JNI字符串的转换(需要调用JNIEnv的API,步骤繁琐,不推荐)。- 推荐用
方案2:把库交叉编译成Windows的.dll文件
如果你有这个.so的源码,可以把它编译成Windows能识别的.dll:
- 用Android NDK或者MinGW这类交叉编译工具,针对x86/x64 Windows架构重新编译源码,生成.dll文件。
- 编译完成后,直接用你原来的Python代码加载.dll就行(把
adlemx.so换成adlemx.dll)。
方案3:用WSL + QEMU模拟ARM环境
在Windows的WSL(Linux子系统)里,通过QEMU模拟ARM架构来运行库:
- 在WSL里安装依赖:
sudo apt install qemu-user-static sudo apt install python3:armhf- 把
adlemx.so放到WSL的路径里,用ARM版本的Python加载库,同样要注意JNI的函数名修饰问题。
- 把
内容的提问来源于stack exchange,提问作者Master
相关产品推荐
相关产品推荐

