在Google Colab解决Kivy Android打包libffi configure.ac宏未定义错误
解决Google Colab中Buildozer打包Kivy应用时libffi编译错误的方案
1. 补全Colab环境编译依赖
libffi编译依赖libtool、automake等工具,先在Colab终端执行以下命令安装:
!apt-get update && apt-get install -y libtool automake autoconf
2. 修改libffi配方的编译逻辑
Buildozer默认的libffi配方未适配新的编译流程,需要修改.buildozer/android/platform/python-for-android/recipes/libffi/__init__.py:
- 找到
build_arch方法,替换为以下代码,确保先执行autogen.sh生成合法的configure文件:def build_arch(self, arch): env = self.get_env(arch) build_dir = self.get_build_dir(arch.arch) # 先运行autogen.sh生成最新配置文件 self.run_cmd(['./autogen.sh'], env=env, cwd=build_dir) # 执行configure并指定交叉编译参数 configure_args = [ './configure', '--host=' + arch.toolchain_prefix, '--prefix=' + build_dir, '--disable-static', '--enable-shared', ] self.run_cmd(configure_args, env=env, cwd=build_dir) # 编译并安装 self.run_cmd(['make', '-j' + str(multiprocessing.cpu_count())], env=env, cwd=build_dir) self.run_cmd(['make', 'install'], env=env, cwd=build_dir) - 若找不到该文件,先执行一次
buildozer -v android debug触发依赖下载,之后再修改。
3. 清理旧编译缓存
删除Buildozer的旧编译产物,避免缓存干扰:
!rm -rf .buildozer/android/platform/build !rm -rf .buildozer/android/platform/python-for-android/builds
4. 指定libffi新版本
在buildozer.spec中强制使用较新的libffi版本(如3.4.4),避免旧版本的配置问题:
[app] # 保留原有配置,添加以下内容 requirements = python3,kivy,sympy,libffi==3.4.4
5. 手动替换libffi源码包(可选)
若配方修改无效,手动替换源码包:
- 下载最新libffi源码:
!wget https://github.com/libffi/libffi/releases/download/v3.4.4/libffi-3.4.4.tar.gz
- 替换到Buildozer缓存目录:
!cp libffi-3.4.4.tar.gz .buildozer/android/platform/python-for-android/recipes/libffi/
- 同步修改配方文件中的版本号,将
version = '旧版本号'改为version = '3.4.4'。
6. 处理过时宏警告
若仍有过时宏警告,在configure.ac开头添加兼容声明:
AC_PREREQ([2.69]) AC_CONFIG_MACRO_DIR([m4])
同时确保autogen.sh包含以下内容,自动生成必要的宏文件:
#!/bin/sh aclocal autoconf automake --add-missing
完成以上步骤后,重新执行打包命令:
!buildozer -v android debug
内容的提问来源于stack exchange,提问作者Fluid Homer
相关产品推荐
相关产品推荐

