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

在Android Makefile中调用Python解释器报错,求正确实现方式

在Android Makefile中调用Python脚本的解决方案

问题描述

在Android.mk中尝试通过$(shell)调用Python解释器,代码如下:

$(shell python -c "import sys;print('hello')")

执行ndk-build时触发错误:

Android.mk:150: *** missing separator.  Stop.

问题源于Makefile对嵌套引号的解析冲突,需要找到同时兼容Makefile语法和Python脚本要求的写法。

解决方案

方法1:调整引号嵌套规则

Makefile中可以用单引号包裹整个Python命令内容,内部使用双引号,避免嵌套冲突:

$(shell python -c 'import sys;print("hello")')

如果Python代码需要使用单引号,可通过'\''的组合在Makefile中转义单引号:

$(shell python -c 'import sys;print('\''hello from makefile'\'')')

方法2:使用独立Python脚本文件

若Python逻辑复杂,建议将代码写入单独的.py文件(比如build_script.py):

import sys
print('hello')
# 可添加更多复杂逻辑

然后在Android.mk中直接调用该文件:

$(shell python $(LOCAL_PATH)/build_script.py)

这种方式彻底规避引号冲突,也更便于维护复杂脚本。

方法3:通过Makefile变量中转代码

先将Python代码赋值给Makefile变量,再传入$(shell)执行,同时处理引号转义:

define PYTHON_SCRIPT
import sys
print('hello from variable')
endef

# 转义代码中的单引号后传入Python
$(shell python -c '$(subst ','\'',$(PYTHON_SCRIPT))')

额外提示

  • 确保编译环境中Python解释器路径正确,必要时使用绝对路径(如/usr/bin/python3)
  • NDK环境下需确认Python能访问到所需依赖库
  • $(shell)会在Makefile解析阶段执行,若需在编译阶段触发,应结合自定义目标或依赖规则实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:05:18