这是一个很长的故事,我将尽可能提供详细信息。
几个月以来,我一直在使用 Android Studio 3.x.x 构建我的应用,直到最近它开始为我提供更新到最新稳定版4.0.1。
我更新了,一切都像应该的那样顺利进行,所有插件都没有错误地更新,代码在新的Android Studio中首次编译,测试中项目运行良好,然后我上传到Play商店的内部测试轨道(问题就从这里开始了)。
在某些设备上,这个应用程序开始显示某种锁定或无限循环错误......这很奇怪,因为同样的设备在运行调试版本时没问题,此时我认为是一些proguard规则的问题。所以,我调整了build.grade文件,以使debug构建具有与发布构建相同的设置(shrink和minify为TRUE)。
编译后,在模拟器和有问题的设备上,应用程序都能正常运行......再次上传到Google Play之后,从那里下载的应用程序却不能工作......
我进行了非常详尽和繁琐的代码调试,以找出哪个方法被某种方式锁定了,我发现了这个可疑点:
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.readTimeout(15000, TimeUnit.MILLISECONDS);
httpClientBuilder.writeTimeout(15000, TimeUnit.MILLISECONDS);
httpClientBuilder.connectTimeout(15000, TimeUnit.MILLISECONDS);
httpClientBuilder.retryOnConnectionFailure(true);
httpClientBuilder.followRedirects(true);
httpClientBuilder.followSslRedirects(true);
httpClientBuilder.connectionPool(DEFAULT_CONNECTION_POOL);
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequests(10);
dispatcher.setMaxRequestsPerHost(10);
httpClientBuilder.dispatcher(dispatcher);
okHttpClient = httpClientBuilder.build();
private boolean isInternetOK(){
boolean ret = false;
try {
okHttpClient.newCall(new Request.Builder().get().url("https://www.google.com").build()).execute();
ret true;
} catch (Exception e) {
}
return ret;
}
在我的启动器活动中,在开始登录之前,我验证用户的网络连接是否正常,这是一个简单的代码,并且httpclient
具有15秒的超时时间,因此会快速连接或失败。对我来说,这个特定的方法为什么在开发环境中工作而在从Play商店提供服务时不起作用(在完全相同的设备和完全相同的构建配置中)没有任何意义。 我花了几个小时来解决这个问题......直到我决定将Android Studio降级到我之前使用的版本。问题自己解决了!所以我100%确定问题与Android Studio 4.0.1及其Gradle插件以及它们如何与"com.squareup.okhttp3:okhttp:3.12.12"
交互有关。以下是我做出的观察:1-由Android Studio 4.0.1生成的APK文件的大小为4.18MB,而3.6.3生成的APK文件的大小为4.33MB(相同的build.config
和相同的proguard.rules
);2-升级到Android Studio 4.0.1后,proguard.rules开始显示很多错误,就像我在Unresolved class name proguard-rules Android Studio 4.0中所说的那样,但仍然可以编译(并且在缩小和混淆开启的情况下在调试中正常工作);3-项目中唯一的区别是Android Studio版本和com.android.tools.build:gradle
依赖关系,因为它必须遵循Android Studio版本。这就是我做到的,如果有人能帮助我,我可以提供任何更多的信息,甚至是从不同版本编译的APK文件......现在我需要睡觉,因为今天是星期六,我失去了我的生活中的7个小时在这个垃圾更新中。
com.android.tools.build:gradle
中具体做了哪些更改?能否请您发布一下? - Reaz Murshed