由Android Studio 4.0.1编译时,Android项目将无法正常工作

时间:2020-08-16 02:11:07

标签: android android-studio android-gradle-plugin okhttp

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

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

我进行了更新,并且按预期的方式进行了无忧无虑,所有插件均无错误更新,并且代码首先在新的android studio中编译,项目在测试中运行良好,然后我将其上传到Play商店的内部测试轨道(问题从这里开始)。

该应用程序开始在某些设备中显示某种锁定或无限循环错误...这很奇怪,因为运行调试版本时使用的设备完全相同,这时我认为有些proguard rules是问题。因此,我调整了build.grade文件,以使debug构建与release构建具有相同的设置(缩小并缩小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生成的4.33MB apk(相同的build.config和相同的proguard.rules

2-将and​​roid 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 ...现在我需要睡觉了,因为今天是23:30,今天是星期六,在这次垃圾邮件更新中,我失去了7个小时的生命

2 个答案:

答案 0 :(得分:4)

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

您还可以获得有关错误的确认,这是由于检查互联网或其他任何原因造成的

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

答案 1 :(得分:0)

将此行添加到您的AndroidManifest.xml文件中,

<application
    android:usesCleartextTraffic="true"

即使您面临同样的问题,

尝试此配置,更新项目级别build.gradle文件,

    classpath 'com.android.tools.build:gradle:3.6.4'

gradle/wrapper/gradle-wrapper.properties文件中更新

distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-all.zip

然后clean project

尝试File-> Invalid Cache / Restarts...

相关问题