首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在api级别小于API 21的情况下使用OkHttp

在api级别小于API 21的情况下使用OkHttp
EN

Stack Overflow用户
提问于 2020-06-14 18:10:23
回答 2查看 767关注 0票数 1

我在为我的应用程序寻找最好的网络客户端,然后我登陆OkHttp或进行改造,但它们都需要API级别的21+,而我的应用程序的当前minSdkVersion是17,所以我应该将21+提高到API 21,还是应该使用OkHttp 3.12.x分支,如果您有其他解决方案,我想听听您的想法。

请注意,在OkHttp网站上,他们说:

“OkHttp 3.12.x分支支持Android 2.3+ (API级9+)和Java 7+。这些平台缺乏对TLS 1.2的支持,不应该使用。但是由于升级很困难,我们将支持3.12.x分支到2021年12月31日的关键修复。”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-15 06:56:56

如果你决定支持超过21岁的客户,你应该做几件事

  1. 回到OkHttp 3.12.12,它将继续获得安全修复。
  2. 帮助尽可能多地保护这些老客户端,因为它们本身都不安全,并且由于保留对旧密码等的支持,使得服务器不太安全。

在构建文件中

代码语言:javascript
复制
  implementation 'org.conscrypt:conscrypt-android:2.4.0'

在你的请求之前激活氪星

代码语言:javascript
复制
import org.conscrypt.Conscrypt


Security.insertProviderAt(Conscrypt.newProvider(), 1)
val client = OkHttpClient.Builder().build()

val request = Request.Builder().url("https://status.datadoghq.com/").build()
client.newCall(request).execute().use { response ->
  println(response.code())
}

这将允许您的老客户端支持TLSv1.2。

您可能也需要降低Retrofit的级别,但我不确定正确的建议是什么。也许是2.6.4?

https://github.com/square/retrofit/blob/master/CHANGELOG.md

票数 2
EN

Stack Overflow用户

发布于 2020-06-14 18:46:19

我建议增加minSdkVersion,因为改进依赖于特殊的库。

虽然如果不想增加api,可以使用异步任务调用服务。

示例

代码语言:javascript
复制
package principal.example;

import android.os.AsyncTask;
import android.util.Log;

import java.io.IOException;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Post extends AsyncTask<String, Void, String> {

    private InputStreamReader inputStreamReader;
    private BufferedReader bufferedReader;

    @Override
    protected String doInBackground(String... params){

        try {
            URL obj = new URL(params[0]);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("GET");
            con.setRequestProperty("User-Agent", " ");
            con.connect();
            inputStreamReader=new InputStreamReader(con.getInputStream());
            bufferedReader = new BufferedReader(inputStreamReader);
            return bufferedReader.readLine();
        }catch(Exception e){
            Log.d("Url  doInBackground", e.toString());
            return null;
        } finally {
            try {
                closeConnection();
            } catch(Exception e){

            }
        }

    }

    private void closeConnection() {
        try {
            if(bufferedReader!=null){
                bufferedReader.close();
            }

            if(inputStreamReader!=null){
                inputStreamReader.close();
            }
        }catch(IOException ex){
            Log.d("Url disconnect", ex.toString());
        }
    }

    @Override
    protected void onPostExecute(String result){

        super.onPostExecute(result);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62376404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档