如何在安卓端运行Django应用?可使用或不使用Chaquopy打包为APK
方案1:使用Chaquopy部署Django应用
此前出现的运行时异常多为配置遗漏导致,按以下步骤操作即可解决
- 第一步:创建基础安卓项目,在项目级
build.gradle中添加Chaquopy依赖:
plugins { id 'com.android.application' version '7.4.2' apply false id 'com.chaquo.python' version '14.0.2' apply false }
- 第二步:在模块级
build.gradle中启用Chaquopy,配置Python环境,添加Django依赖:
plugins { id 'com.android.application' id 'com.chaquo.python' } android { namespace "com.example.djangoapp" compileSdk 33 defaultConfig { applicationId "com.example.djangoapp" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } python { pip { install "django==4.2" } } } }
- 第三步:把完整Django项目复制到模块下的
src/main/python目录中 - 第四步:编写安卓启动逻辑,在MainActivity中初始化Python,启动Django服务:
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.chaquo.python.Python; import com.chaquo.python.android.AndroidPlatform; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (!Python.isStarted()) { AndroidPlatform.initialize(this); } Python py = Python.getInstance(); // 启动Django服务,监听本地8000端口,必须加--noreload避免重载异常 py.getModule("manage").callAttr("execute_from_command_line", new String[]{"manage.py", "runserver", "127.0.0.1:8000", "--noreload"}); // 后续可直接通过WebView加载本地地址展示应用页面 } }
- 第五步:在
AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
方案2:不使用Chaquopy的Termux打包方案
该方案不需要编写安卓原生代码,适配成本更低
- 第一步:先在Termux环境中完成依赖安装和Django应用测试,执行命令:
pkg update && pkg upgrade pkg install python python-dev django # 复制Django项目到Termux目录后测试运行正常 python manage.py runserver 127.0.0.1:8000
- 第二步:使用
termux-create-package工具将整个环境和启动脚本打包为APK:
pkg install termux-create-package # 编写manifest.json配置文件,指定启动命令为Django服务启动指令 termux-create-package manifest.json
- 第三步:如果需要实现打开APK直接展示应用页面,可搭配WebView封装工具,将本地服务地址和WebView打包为一体,无需用户手动操作Termux。
该方案打包出的APK体积比Chaquopy方案大,但无需处理Gradle版本兼容性问题
通用异常排查
- 端口报错:优先使用1024以上的非特权端口,避开安卓系统权限限制
- 静态资源加载失败:部署前先执行
python manage.py collectstatic,统一打包静态资源到应用可访问目录 - 数据库报错:SQLite等文件存储路径设置为应用私有目录,不要使用系统公共路径
内容的提问来源于stack exchange,提问作者Ojas_Gupta
相关产品推荐
相关产品推荐

