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

Colab中用Buildozer打包含Arial字体的Android APK遇显示异常及崩溃问题

解决Buildozer打包Android APK时阿拉伯语显示方块/崩溃问题

1. 字体文件配置与打包校验

  • 先确认你的arial.ttf是完整版本,部分精简版Arial不包含阿拉伯语字形,建议替换为Arial Unicode MS字体(带完整中东语言字符集)
  • 在buildozer.spec中明确声明要打包的字体文件,确保配置正确:
    # 允许打包的文件扩展名
    source.include_exts = py,png,jpg,kv,atlas,ttf
    # 直接指定要打包的字体文件
    source.include_files = arial.ttf
    
  • 在Colab中执行ls命令,确认arial.ttf确实在项目根目录下,避免路径错误导致Buildozer无法扫描到文件

2. 代码中正确加载与引用字体

不要直接使用font_name="arial",需先注册字体再引用:

from kivy.core.text import LabelBase

# 注册字体(name为自定义标识,fn_regular对应字体文件名)
try:
    LabelBase.register(name='Arial', fn_regular='arial.ttf')
except Exception as e:
    print(f"字体加载失败: {e}")
    #  fallback到系统自带阿拉伯语字体
    LabelBase.register(name='Arial', fn_regular='DroidSansArabic.ttf')

# 控件中使用注册好的字体名
Label(text="مرحبا بالعالم", font_name='Arial')

3. 崩溃问题排查

指定字体后崩溃,90%是字体未被正确打包到APK中:

  • 打包前在Colab中确认arial.ttf的权限为可读(执行ls -l查看)
  • 避免在App初始化阶段过早加载字体,确保Kivy核心初始化完成后再注册字体

4. 阿拉伯语排版优化

Kivy对RTL(从右到左)语言的原生支持有限,需额外处理:

  • 开启UTF-8编码支持:
    from kivy.config import Config
    Config.set('kivy', 'text_encoding', 'utf-8')
    
  • 复杂连写文本需用第三方库处理,先在buildozer.spec添加依赖:
    requirements = python3,kivy,arabic-reshaper,python-bidi
    
  • 代码中处理阿拉伯语文本:
    import arabic_reshaper
    from bidi.algorithm import get_display
    
    raw_arabic = "مرحبا بالعالم"
    # 处理连写
    reshaped_text = arabic_reshaper.reshape(raw_arabic)
    # 调整RTL排版
    display_text = get_display(reshaped_text)
    
    Label(text=display_text, font_name='Arial')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:20:47