Apache Commons FTP在安卓release版APK中无法使用问题求助
解决方案
1. 补充明文网络流量许可
安卓9(API 28)及以上系统默认禁止release版应用使用明文FTP/HTTP流量,debug构建默认临时放开该限制,这是该问题的最高概率诱因。
解决方法:在AndroidManifest.xml的<application>标签中添加属性:
android:usesCleartextTraffic="true"
如果项目单独配置了network_security_config.xml,需要额外在配置文件中添加FTP服务器的IP/域名明文访问规则。
2. 添加commons-net库的混淆保留规则
即使关闭了minify功能,部分gradle构建插件在release打包阶段仍会裁剪未被显式引用的第三方库类,当前的混淆规则未覆盖commons-net库,需要在proguard-rules.pro中添加:
-keep class org.apache.commons.net.** { *; } -dontwarn org.apache.commons.net.**
3. 显式开启FTP被动模式
debug和release构建的默认网络超时、连接策略存在差异,FTP上传逻辑未显式开启被动模式时,release构建的连接请求大概率会被服务器防火墙拦截,需要在FTP连接逻辑中补充配置:
// 完成FTP服务器登录后、执行文件上传前调用 ftpClient.enterLocalPassiveMode();
4. 检查存储权限适配
如果应用targetSdkVersion >= 33,release版首次安装时默认没有本地文件读取权限,需要确认已经动态申请了对应文件的读取权限(READ_MEDIA_* 或 MANAGE_EXTERNAL_STORAGE),避免因读取不到本地文件导致上传失败。
内容的提问来源于stack exchange,提问作者buzzcarla
相关产品推荐
相关产品推荐

