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

Buildozer打包Python APK安卓模拟器远程MySQL访问权限拒绝问题排查咨询

嘿,这个问题我之前碰到过类似的场景,咱们一步步拆解根因和解决办法,应该能搞定:

可能的根因及对应解决方案

1. 模拟器的数据库IP地址用错了

如果你的APK里写的数据库地址是127.0.0.1或者localhost,那模拟器会把这个地址解析成它自己的虚拟机,根本连不上你的Ubuntu Chromebook主机。

解决办法:

  • 先在Ubuntu终端里执行ip addr show,找到局域网IP(格式类似inet 192.168.x.x/24的那一行)。
  • 把APK里的数据库连接IP替换成这个局域网IP,比如192.168.1.100。

2. MySQL绑定了本地回环地址,拒绝外部连接

Ubuntu默认的MySQL配置通常只允许本地(127.0.0.1)访问,模拟器属于外部设备,自然会被拒绝。

解决步骤:

  1. 打开MySQL配置文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 找到bind-address这一行,把它改成0.0.0.0(允许所有IP访问),或者直接注释掉(前面加#)。
  3. 重启MySQL服务生效:sudo systemctl restart mysql

3. Ubuntu防火墙挡住了3306端口

Ubuntu的ufw防火墙默认可能没开放3306端口,导致模拟器的连接请求被拦截。

解决办法:

  • 临时开放3306端口:sudo ufw allow 3306
  • 要是想更安全,只允许模拟器所在的局域网段访问(比如192.168.1.0/24),可以执行:sudo ufw allow from 192.168.1.0/24 to any port 3306
  • 执行sudo ufw status验证,能看到3306端口的允许规则就没问题。

4. MySQL用户没有远程访问权限

你用来连接的MySQL用户可能只有localhost的访问权限,模拟器的IP不在允许列表里。

解决步骤:

  1. 用HeidiSQL或者Ubuntu终端登录MySQL:mysql -u 你的用户名 -p
  2. 执行授权命令,比如允许用户db_user从任何IP访问目标数据库login_db:
    GRANT ALL PRIVILEGES ON login_db.* TO 'db_user'@'%' IDENTIFIED BY '你的密码';
    
    (如果只想限制局域网访问,把%改成192.168.1.%)
  3. 刷新权限让配置生效:FLUSH PRIVILEGES;

5. Android APK没申请网络权限

Buildozer打包的APK默认可能没开启INTERNET权限,导致应用连不上网络,触发权限拒绝错误。

解决办法:

  • 打开你的buildozer.spec配置文件,找到android.permissions这一行,确保包含INTERNET:
    android.permissions = INTERNET
    
  • 重新打包APK:buildozer android debug deploy run,替换模拟器里的旧APK。
快速验证技巧

可以先在模拟器里打开浏览器,访问http://你的Ubuntu局域网IP:3306——虽然MySQL不会返回网页,但如果能看到“Bad handshake”之类的提示,说明端口是通的;如果显示无法访问,那还是网络/防火墙的问题,优先排查前面的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:42:54