使用 Chaquopy 实现 Android 与 Python 的混合开发可以分为以下几个步骤:
一、环境准备
-
安装 Android Studio
-
确保使用最新版本(至少 Arctic Fox 以上版本)
-
配置 Java 开发环境(JDK 11+)
-
-
Python 环境
-
本地安装 Python 3.6+(建议使用 Python 3.8)
-
安装必要的 Python 包(如
numpy,pandas等)
-
二、创建 Android 项目
-
新建项目
-
选择 Empty Activity 模板
-
语言建议使用 Kotlin(Java 也支持)
-
-
配置 Gradle
-
在
build.gradle(Project)中添加仓库:gradle
复制
allprojects { repositories { google() mavenCentral() maven { url "https://chaquo.com/maven" } // 添加 Chaquopy 仓库 } } -
在
build.gradle(Module)中添加插件和配置:gradle
复制
plugins { id "com.chaquo.python" version "14.0.2" // 使用最新版本 } android { // ... 其他配置保持不变 namespace "com.example.myapp" compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } } chaquopy { version = "14.0.2" // 配置 Python 版本和依赖 python { version = "3.8" buildPython "C:/Python38/python.exe" // 指定本地 Python 路径(Windows 示例) // 添加 Python 依赖库 pip { install "numpy==1.24.3" install "requests" } } }
-
三、编写 Python 代码
-
在
src/main/python目录下创建 Python 文件-
示例
hello.py:python
复制
def greet(name): return f"Hello from Python, {name}!" def calculate(a: int, b: int) -> int: return a + b
-
四、在 Android 中调用 Python
-
初始化 Python 环境
-
在
MainActivity.kt中:kotlin
复制
import com.chaquo.python.Python import com.chaquo.python.android.AndroidPlatform class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if (!Python.isStarted()) { Python.start(AndroidPlatform(this)) } // 调用 Python 函数 val python = Python.getInstance() val module = python.getModule("hello") val result = module.callAttr("greet", "Android Developer") Log.d("PythonResult", result.toString()) // 调用带参数的函数 val sum = module.callAttr("calculate", 10, 20) Log.d("PythonSum", sum.toString()) } }
-
五、处理复杂场景
-
传递复杂数据类型
-
使用 JSON 传递字典/列表:
python
复制
# Python 端 import json def process_data(json_str): data = json.loads(json_str) return json.dumps({"result": data["value"] * 2})kotlin
复制
// Kotlin 端 val inputData = """{"value": 5}""" val output = module.callAttr("process_data", inputData) val result = JSONObject(output.toString())
-
-
异步调用
-
使用协程或
AsyncTask避免阻塞主线程:kotlin
复制
CoroutineScope(Dispatchers.IO).launch { val result = module.callAttr("long_running_task") withContext(Dispatchers.Main) { textView.text = result.toString() } }
-
六、构建与调试
-
常见问题解决
-
ABI 过滤:在
build.gradle中限制支持的 CPU 架构以减小 APK 体积:gradle
复制
android { defaultConfig { ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } } -
依赖冲突:若遇到
.so文件冲突,添加:gradle
复制
packagingOptions { exclude "lib/arm64-v8a/libopenblas.so" }
-
-
日志查看
-
使用
adb logcat查看 Python 输出的日志:bash
复制
adb logcat | grep 'python'
-
七、部署注意事项
-
减小 APK 体积
-
仅打包必要的 Python 依赖
-
启用 ProGuard 代码混淆
-
-
版本兼容性
-
Chaquopy 版本需与 Android Gradle 插件版本匹配
-
测试不同 Android API Level 的兼容性
-
八、官方资源
通过以上步骤,即可实现 Android 与 Python 的高效混合开发。建议从简单功能开始验证,逐步增加复杂度。

2万+

被折叠的 条评论
为什么被折叠?



