由 Android Studio 4.0.1 编译时,Android 项目将无法运行

Raf*_*ima 10 android android-studio android-gradle-plugin okhttp

这是一个很长的故事,我会尽量提供尽可能多的细节。

几个月来,我一直在使用 android studio 3.xx 来构建我的应用程序,直到最近它开始为我提供最新的稳定版 4.0.1 的更新。

我更新了,它应该是无忧无虑的,所有插件都更新没有错误,代码首先在新的 android studio 中编译,该项目在测试中运行良好,然后我上传到 Play 商店的内部测试轨道(这里是问题开始)。

该应用程序开始在某些设备中显示某种锁定或无限循环错误......这很奇怪,因为运行调试版本时完全相同的设备很好,此时我认为有些proguard rules是问题所在。所以我调整了build.grade文件,以使debug构建具有与构建相同的设置release(缩小和缩小 TRUE)。

编译后,应用程序在模拟器和有问题的设备中顺利运行......
我再次将其上传到谷歌播放,并从那里下载该应用程序不起作用......

我做了一个非常详尽和烦人的代码调试,以获取以某种方式被锁定的方法,我发现了这个嫌疑人:

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;
}
Run Code Online (Sandbox Code Playgroud)

在我的启动器活动中,在开始登录之前,我验证用户的 Internet 连接是否正常,这是一个简单的代码,并且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 后,开始显示很多错误,就像这里所说的:未解析的类名 proguard-rules Android Studio 4.0但仍然可以正常编译(并且在调试时可以很好地缩小和缩小)

3-项目中唯一的区别是android studio版本和 com.android.tools.build:gradle依赖,因为它必须遵循android studio版本。

嗯,就我所知,我可以提供更多信息,甚至可以提供从不同版本编译的apk,如果有人可以帮助我...现在我需要睡觉,因为今天是周六 23 点 30 分,我输了 7在这个垃圾更新中我生命中的几个小时

小智 4

如果您的方法在某些设备上不起作用,检查互联网可能会对您有所帮助

您还可以通过检查互联网或任何其他方式来确认您的错误

boolean hasActiveInternetConnection() {
    try {
        InetAddress ipAddr = InetAddress.getByName("google.com");
        return !ipAddr.equals("");
    } catch (Exception e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

599 次

最近记录:

5 年,2 月 前