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

Android HttpUrlConnection在Release包中无法工作求助

问题描述

我通过Web API获取换行符分隔的文件名列表,将每行字符串存入List集合。该方法在模拟器调试、真机调试模式下均正常运行,但生成签名Release APK安装到手机后无法工作,触发catch代码块,异常消息为null、响应码0、响应消息为空,错误日志如下:

02-11-2023 10:55:38 CET
null 0  15000
_____________________________________________

相关代码如下:

public class MbtilesFileNamesFromServer  {

    private String url;

    public MbtilesFileNamesFromServer(String url) {
        this.url = url;
    }

    protected List<String> GetFileNames() {
        HttpURLConnection urlConnection = null;

        List<String> fileNamesArray = new ArrayList<>();
        int code = 0;
        String response="";
        try {
            URL url = new URL(this.url);

            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setConnectTimeout(15000);
            urlConnection.setReadTimeout(10000);
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoInput(true);
            urlConnection.connect();
            code = urlConnection.getResponseCode();
            response=urlConnection.getResponseMessage();

            if (code == 200) {
                InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                if (in != null) {
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                    String line = "";

                    while ((line = bufferedReader.readLine()) != null)
                        fileNamesArray.add(line);

                }
                in.close();
            }
            return fileNamesArray;

        } catch (Exception e) {
            AppendErrLog(e.getMessage() + " " + String.valueOf(code) +" "+response+" "+ String.valueOf(urlConnection.getConnectTimeout()));
            urlConnection.disconnect();
        } finally {
            urlConnection.disconnect();
        }
        return fileNamesArray;
    }
}
排查思路与解决建议
  • 检查网络权限:确认AndroidManifest.xml中是否声明了<uses-permission android:name="android.permission.INTERNET"/>,Release打包时权限可能被意外移除或未配置。
  • 配置混淆规则:ProGuard混淆可能破坏了HttpURLConnection、URL等相关类的逻辑,在proguard-rules.pro中添加以下规则:
    -keep class java.net.HttpURLConnection { *; }
    -keep class java.net.URL { *; }
    -keep class java.io.BufferedReader { *; }
    -keep class java.io.InputStreamReader { *; }
    
  • 排查HTTPS证书问题:若API使用HTTPS协议,Release环境可能未信任服务器证书。优先使用正规CA签发的证书,若需自定义信任,需在代码中添加证书校验逻辑(注意安全风险)。
  • 完善异常日志:当前仅打印e.getMessage(),建议在catch块中添加e.printStackTrace()或记录e.toString(),获取完整堆栈信息定位具体异常原因。
  • 验证URL有效性:检查传入的URL在Release环境中是否正确,是否存在未转义的特殊字符,导致连接失败。
  • 确认线程执行环境:Android禁止主线程执行网络请求,调试模式可能有宽松限制,但Release包会严格触发异常。若GetFileNames()在主线程调用,需移至子线程(如Coroutine、AsyncTask或普通Thread)执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:22:53