Buildozer构建的APK崩溃:psutil架构不兼容问题排查
解决APK因psutil架构不匹配导致的崩溃问题
问题根源
日志明确显示导入错误:
ImportError: dlopen failed: "/data/data/org.test.mykivymdapp/files/app/_python_bundle/site-packages/psutil/_psutil_linux.so" is for EM_X86_64 (62) instead of EM_AARCH64 (183)
psutil的底层编译文件_psutil_linux.so是X86_64架构,而运行设备是AARCH64(ARM64)架构,架构不兼容导致应用启动时崩溃。
解决方案
清理构建缓存
执行命令清除Buildozer之前生成的缓存文件,避免残留不兼容的编译产物:buildozer android clean指定目标架构
在项目的buildozer.spec配置文件中,修改android.arch项,明确指定适配ARM设备的架构:android.arch = arm64-v8a, armeabi-v7a该配置会让Buildozer只编译对应ARM架构的依赖库,避免混入X86_64版本。
重新构建APK
执行完整的构建命令,让Buildozer重新从源码编译所有依赖(包括psutil),生成适配目标架构的APK:buildozer android debug deploy run确保依赖适配Android
若本地虚拟环境中安装了桌面版psutil,先卸载:pip uninstall psutil让Buildozer在构建过程中自动下载并编译适配Android平台的psutil版本,而非使用本地桌面版的wheel包。
用户原始信息
依赖配置
requirements = python3,kivy,kivymd,psutil,speedtest,pillow
导入代码
import datetime import threading import random from time import sleep import psutil import speedtest from kivymd.app import MDApp from kivy.lang import Builder from kivy.core.window import Window from kivy.uix.screenmanager import ScreenManager, Screen from get_size import get_size from get_size_bits import get_size_bits # from matplotlib import pyplot as plt from kivymd.uix.list import OneLineListItem,ThreeLineListItem,MDList
ADB日志
08-11 18:28:41.021 25786 25832 I python : Initializing Python for Android 08-11 18:28:41.021 25786 25832 I python : Setting additional env vars from p4a_env_vars.txt 08-11 18:28:41.022 25786 25832 I python : Changing directory to the one provided by ANDROID_ARGUMENT 08-11 18:28:41.022 25786 25832 I python : /data/user/0/org.test.mykivymdapp/files/app 08-11 18:28:41.022 25786 25832 I python : Preparing to initialize python 08-11 18:28:41.022 25786 25832 I python : _python_bundle dir exists 08-11 18:28:41.022 25786 25832 I python : calculated paths to be... 08-11 18:28:41.022 25786 25832 I python : /data/user/0/org.test.mykivymdapp/files/app/_python_bundle/stdlib.zip:/data/user/0/org.test.mykivymdapp/files/app/_python_bundle/modules 08-11 18:28:41.025 25786 25832 I python : set wchar paths... 08-11 18:28:41.122 25786 25832 I python : Initialized python 08-11 18:28:41.123 25786 25832 I python : AND: Init threads 08-11 18:28:41.124 25786 25832 I python : testing python print redirection 08-11 18:28:41.127 25786 25832 I python : Android path ['.', '/data/user/0/org.test.mykivymdapp/files/app/_python_bundle/stdlib.zip', '/data/user/0/org.test.mykivymdapp/files/app/_python_bundle/modules', '/data/user/0/org.test.mykivymdapp/files/app/_python_bundle/site-packages'] 08-11 18:28:41.130 25786 25832 I python : os.environ is environ({'PATH':'/sbin:/system/sbin:/product/bin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/odm/bin:/ vendor/bin:/vendor/xbin', 'MOUNT_SYSTEM_OK': 'true', 'ANDROID_BOOTLOGO': '1', 'ANDROID_ROOT': '/system', 'ANDROID_ASSETS': '/system/app', 'ANDROID_DATA': '/data', 'ANDROID_STORAGE': '/storage', 'ANDROID_RUNTIME_ROOT': '/apex/com.android.runtime', 'ANDROID_TZDATA_ROOT': '/apex/com.android.tzdata', 'EXTERNAL_STORAGE': '/sdcard', 'ASEC_MOUNTPOINT': '/mnt/asec', 'BOOTCLASSPATH': '/apex/com.android.runtime/javalib/core- oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/knoxsdk.jar:/system/framework/knoxanalyticssdk.jar:/system/framework/smartbondingservice.jar:/system/framework/securetimersdk.jar:/system/framework/fipstimakeystore.jar:/system/framework/timakeystore.jar:/system/framework/sec_sdp_sdk.jar:/system/framework/sec_sdp_hidden_sdk.jar:/system/framework/drutils.jar:/system/framework/android.test.base.jar:/system/framework/ucmopensslenginehelper.jar:/system/framework/esecomm.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar', 'DEX2OATBOOTCLASSPATH': '/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/knoxsdk.jar:/system/framework/knoxanalyticssdk.jar:/system/framework/smartbondingservice.jar:/system/framework/securetimersdk.jar:/system/framework/fipstimakeystore.jar:/system/framework/timakeystore.jar:/system/framework/sec_sdp_sdk.jar:/system/framework/sec_sdp_hidden_sdk.jar:/system/framework/drutils.jar:/system/framework/android.test.base.jar:/system/framework/ucmopensslenginehelper.jar:/system/framework/esecomm.jar', 'SYSTEMSERVERCLASSPATH': '/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/com.android.location.provider.jar:/system/framework/uibc_java.jar:/system/framework/ssrm.jar', 'DOWNLOAD_CACHE': '/data/cache', 'SECONDARY_STORAGE': '/storage/sdcard:/storage/usb1:/storage/usb2', 'MC_AUTH_TOKEN_PATH': '/efs', 'KNOX_STORAGE': '/data/knox/ext_sdcard', 'ENC_EMULATED_STORAGE_TARGET': '/storage/enc_emulated', 'ANDROID_SOCKET_zygote': '15', 'ANDROID_SOCKET_usap_pool_primary': '16', 'ANDROID_ENTRYPOINT': 'main.pyc', 'ANDROID_ARGUMENT': '/data/user/0/org.test.mykivymdapp/files/app', 'ANDROID_APP_PATH': '/data/user/0/org.test.mykivymdapp/files/app', 'ANDROID_PRIVATE': '/data/user/0/org.test.mykivymdapp/files', 'ANDROID_UNPACK': '/data/user/0/org.test.mykivymdapp/files/app', 'PYTHONHOME': '/data/user/0/org.test.mykivymdapp/files/app', 'PYTHONPATH': '/data/user/0/org.test.mykivymdapp/files/app:/data/user/0/org.test.mykivymdapp/files/app/lib', 'PYTHONOPTIMIZE': '2', 'P4A_BOOTSTRAP': 'SDL2', 'PYTHON_NAME': 'python', 'P4A_IS_WINDOWED': 'True', 'P4A_ORIENTATION': 'portrait', 'P4A_NUMERIC_VERSION': 'None', 'P4A_MINSDK': '21', 'LC_CTYPE': 'C.UTF-8'}) 08-11 18:28:41.130 25786 25832 I python : Android kivy bootstrap done. __name__ is __main__ 08-11 18:28:41.130 25786 25832 I python : AND: Ran string 08-11 18:28:41.130 25786 25832 I python : Run user program, change dir and execute entrypoint 08-11 18:28:41.376 25786 25832 I python : Traceback (most recent call last): 08-11 18:28:41.377 25786 25832 I python : File "/content/.buildozer/android/app/main.py", line 5, in <module> 08-11 18:28:41.377 25786 25832 I python : File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/mykivymdapp/arm64-v8a/psutil/__init__.py", line 102, in <module> 08-11 18:28:41.377 25786 25832 I python : File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/mykivymdapp/arm64-v8a/psutil/_pslinux.py", line 26, in <module> 08-11 18:28:41.377 25786 25832 I python : ImportError: dlopen failed: "/data/data/org.test.mykivymdapp/files/app/_python_bundle/site-packages/psutil/_psutil_linux.so" is for EM_X86_64 (62) instead of EM_AARCH64 (183) 08-11 18:28:41.377 25786 25832 I python : Python for android ended.
内容的提问来源于stack exchange,提问作者Esra Issam
相关产品推荐
相关产品推荐

