You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python+Kivy+Buildozer的App启动崩溃(gRPC架构不兼容)

解决gRPC架构不兼容问题:自定义Python-for-Android Recipe指南

一、创建自定义Recipe目录结构

在项目根目录下建立如下目录结构:

your-project/
├── recipes/
│   └── grpc/
│       ├── __init__.py
│       └── recipe.sh
└── buildozer.spec

二、编写__init__.py定义Recipe元信息

这个文件用于告知Python-for-Android(P4A)Recipe的核心配置:

from pythonforandroid.recipe import CythonRecipe


class GrpcRecipe(CythonRecipe):
    version = '1.59.0'  # 替换为与Firebase Admin依赖匹配的gRPC版本
    url = 'https://pypi.org/packages/source/g/grpcio/grpcio-{version}.tar.gz'
    depends = ['python3', 'cython', 'openssl', 'six', 'protobuf']  # gRPC编译必需依赖
    site_packages_name = 'grpcio'

    def get_recipe_env(self, arch):
        env = super().get_recipe_env(arch)
        # 配置NDK编译参数,适配ARM64架构
        env['GRPC_PYTHON_BUILD_SYSTEM_OPENSSL'] = '1'
        env['GRPC_PYTHON_BUILD_SYSTEM_ZLIB'] = '1'
        env['GRPC_PYTHON_DISABLE_LIBCXX'] = '1'
        env['CC'] = f"{self.ctx.ndk_dir}/toolchains/llvm/prebuilt/linux-x86_64/bin/{arch.toolchain_prefix}clang"
        env['CXX'] = f"{self.ctx.ndk_dir}/toolchains/llvm/prebuilt/linux-x86_64/bin/{arch.toolchain_prefix}clang++"
        return env


recipe = GrpcRecipe()

三、编写recipe.sh编译脚本

该脚本负责执行针对Android架构的gRPC编译流程:

#!/bin/bash
set -e

cd $RECIPE_DIR/../grpcio-$VERSION

# 配置编译参数,适配Android环境
python setup.py build_ext \
    --include-dirs=$SITEPACKAGES/protobuf/include \
    --library-dirs=$LIB_DIR \
    --rpath=$LIB_DIR \
    -DANDROID \
    --verbose

# 将编译结果安装到指定目录
python setup.py install --root=$INSTALL_DIR --prefix=

四、修改Buildozer配置文件(buildozer.spec)

在配置中指定使用自定义Recipe并调整依赖:

# 自定义Recipe路径
p4a.local_recipes = recipes

# 禁用默认预编译gRPC包,改用自定义Recipe
p4a.exclude_modules = grpcio

# 依赖列表,确保gRPC版本与Recipe一致
requirements = python3,kivy,firebase-admin,grpcio==1.59.0

# 指定目标设备架构(如arm64-v8a)
android.archs = arm64-v8a

五、清理缓存并重新构建

先清除旧构建缓存避免残留错误文件:

buildozer android clean

再执行构建部署:

buildozer android debug deploy run

额外注意事项

  • 确保WSL环境中Android NDK版本在r25c及以上(Buildozer通常会自动适配,若异常可手动指定NDK路径)
  • 若Firebase Admin依赖的其他Google库(如google-api-core、google-auth)也出现架构问题,需按相同逻辑创建对应自定义Recipe
  • 严格保持gRPC版本与Firebase Admin的依赖版本一致,避免出现依赖冲突

内容的提问来源于stack exchange,提问作者ASD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:12:26