Kivy/Buildozer导入错误 - pymssql.so是64位而不是32位

dar*_*aul 11 python python-2.7 kivy buildozer

我正在使用64位Kivy/Buildozer VM来构建和部署Kivy应用程序到Android Lollipop(armeabi-v7a 32位arch).

Buildozer构建是成功的但是在执行应用程序和导入pymssql包(用于连接到远程MS SQL服务器)时,我收到以下错误:

I/python  ( 5335):    File "/build/phytogp/android/app/main.py", line 4, in <module>
I/python  ( 5335):    File "/build/phytogp/android/app/views/apps/phyto_app.py", line 45, in <module>
I/python  ( 5335):    File "/build/phytogp/android/app/services/twilio_service.py", line 2, in <module>
I/python  ( 5335):  ImportError: dlopen failed: "/data/data/com.phyto.phytogp/files/app/lib/python2.7/site-packages/pymssql.so" is 64-bit instead of 32-bit
Run Code Online (Sandbox Code Playgroud)

据我了解,预制pymssql-2.1.3-cp27-cp27mu-manylinux1_x86_64.whl车轮pymssql应支持64和32位拱.

如何获得pymssql.so支持32位的?

tit*_*ito 1

有两件事需要检查:

  1. 确保您打包了 32 位版本。您说轮子应该支持 64 和 32 位,但您引用了x86_64轮子版本。在他们的 pypi 页面上,他们有一个i686版本,那就是您想要的 32 位版本。

  2. 即使是 32 或 64,也必须是 ARM >= v7a 编译的。除非你的轮子是专门为 Android 编译的,否则它很可能无法工作,因为 Linux 和 Android 上的 libc 不一样。所以你会遇到二进制不兼容的问题。

这就是为什么对于此类库,您需要在 python-for-android 中编写一个配方来编译适用于 Android 的库。