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)访问,模拟器属于外部设备,自然会被拒绝。
解决步骤:
- 打开MySQL配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 找到
bind-address这一行,把它改成0.0.0.0(允许所有IP访问),或者直接注释掉(前面加#)。 - 重启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不在允许列表里。
解决步骤:
- 用HeidiSQL或者Ubuntu终端登录MySQL:
mysql -u 你的用户名 -p - 执行授权命令,比如允许用户
db_user从任何IP访问目标数据库login_db:
(如果只想限制局域网访问,把GRANT ALL PRIVILEGES ON login_db.* TO 'db_user'@'%' IDENTIFIED BY '你的密码';%改成192.168.1.%) - 刷新权限让配置生效:
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
相关产品推荐
相关产品推荐

