Phonegap打包APK后SimpleWeather.js本地加载无法显示温度求助
我之前也踩过类似的坑,PhoneGap Developer App和打包后的APK在网络权限、安全策略上有明显差异,给你几个亲测可行的替代方案:
改用HTTPS的天气API端点
Android 9及以上版本默认禁止明文HTTP请求(Cleartext Traffic),而SimpleWeather默认调用的部分天气API可能还是HTTP协议。你可以把API请求地址换成HTTPS版本(比如OpenWeatherMap这类主流服务商都已支持HTTPS),这样就能绕过明文限制,打包后也能正常请求数据。配置Android网络安全策略(针对必须用HTTP的场景)
如果你的天气API只能用HTTP,那可以通过自定义网络安全配置来允许指定域名的明文请求:- 在项目根目录创建
res/xml/network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <!-- 替换成你的天气API实际域名 --> <domain includeSubdomains="true">api.your-weather-service.com</domain> </domain-config> </network-security-config>- 在
config.xml里添加配置,让PhoneGap打包时把这个文件整合到APK中:
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application"> <application android:networkSecurityConfig="@xml/network_security_config" /> </edit-config> <resource-file src="res/xml/network_security_config.xml" target="res/xml/network_security_config.xml" />- 在项目根目录创建
正确配置Whitelist插件
确保你已经安装了cordova-plugin-whitelist插件(PhoneGap通常默认包含,但最好手动确认:phonegap plugin add cordova-plugin-whitelist),然后在config.xml里添加允许访问天气API的规则:<!-- 允许导航到API域名 --> <allow-navigation href="https://api.your-weather-service.com/*" /> <!-- 允许发起API请求 --> <access origin="https://api.your-weather-service.com/*" />这个插件会帮你处理跨域和访问权限的问题,避免打包后出现请求被拦截的情况。
排查API的CORS限制
有些天气API会限制请求的Origin,而PhoneGap打包后的应用Origin是file://,部分API可能不允许这个Origin。你可以检查API的文档,看是否支持添加file://到允许的Origin列表,或者是否有针对移动应用的特殊调用方式(比如仅用API Key参数校验身份,不依赖Origin)。
为什么PhoneGap Developer App正常?
因为PhoneGap Developer App本身是一个预先配置好的容器,它已经放宽了网络安全限制,允许明文请求和file:// Origin的跨域请求,所以调试时没问题,但自己打包的APK会严格遵循Android的默认安全策略,才会出现差异。
内容的提问来源于stack exchange,提问作者sininen

