Kivy安卓应用启动崩溃(关联jnius.so):兼容问题修复求助
解决Kivy应用安卓启动崩溃(JNI ArrayStoreException关联jnius.so)
1. 清理python-for-android缓存并重建依赖
- 进入虚拟环境,执行
p4a config确认ndk_version=25b、android_api=33配置正确 - 删除p4a缓存目录,避免旧编译残留:
rm -rf ~/.local/share/python-for-android/ - 重新执行
buildozer android clean后再构建部署
2. 调整Buildozer配置文件(buildozer.spec)
- 强制锁定NDK/API版本,添加jnius兼容配置:
android.api = 33 android.ndk = 25b android.ndk_api = 21 # jnius对NDK API21兼容性更稳定 android.add_libs = libc++_shared.so - 禁用预编译jnius,强制本地编译:
项目根目录创建android.p4a_local_recipes = ./recipesrecipes/jnius文件夹,复制python-for-android官方jnius recipe到该目录
3. 修复MacOS下的库权限问题
- 构建完成后,检查
bin/[应用名]/libs/[架构]/jnius.so权限,确保为rwxr-xr-x - 权限异常的话,在buildozer.spec添加编译后修复命令:
android.add_postbuild_cmd = chmod 755 libs/**/*.so
4. 验证Python版本兼容性
- Python 3.11与当前工具链组合可能存在适配问题,尝试降级到Python 3.10.x:
- 新建虚拟环境:
python3.10 -m venv kivy-venv - 重装依赖:
pip install kivy==2.3.1 buildozer==1.5.0 python-for-android==2024.01.21
- 新建虚拟环境:
5. 匹配模拟器架构
- 确认模拟器架构(x86_64/arm64-v8a)与Buildozer配置一致:
android.arch = arm64-v8a # 或x86_64,根据模拟器架构选择 - 重启模拟器后重新部署
6. 定位详细崩溃原因
- 用adb获取完整错误日志:
adb logcat *:E,过滤JNI相关报错 - 若日志显示
__cxa_throw_bad_array_new_length找不到,确认已添加android.add_libs = libc++_shared.so配置
内容的提问来源于stack exchange,提问作者user938363
相关产品推荐
相关产品推荐

