Android 天气APP(三十七)新版AS编译、更新镜像源、仓库源、修复部分BUG

上一篇:Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife

新版AS编译、更新镜像源、仓库源、修复部分BUG

前言

没想到我还会更新这个天气App的文章,起因是因为有读者运行源码后报错,然后上网找不到解决的办法,于是找到我,鉴于此,我写下原因和解决方法。

正文

先说一下过程,这个项目我从2020年开始陆陆续续更新,最开始我使用的是Android Studio 3.5.2版本,随后有更新到Android Studio 4.0.1和4.2.1,随着AS的改动,对于项目本身来说一些依赖库就无法使用了,但是在之前的AS版本中是可以的。

举个例子,就拿jcenter()来说,最开始这个仓库是AS中默认就有了,随着AS版本更新先是不推荐你使用这个仓库,改用mavenCentral(),但此时这个仓库里面的依赖库还能用,去年的时候,我的项目还是可以正常跑起来的,但今时不同往日,现在不行了,因为AS又更新了好多版本,现在这个仓库用不了了。

一、更新镜像源

首先我们更新一下项目的镜像源,默认是使用Google的源,但是由于国内访问不太稳定,会造成你下载很慢、异常、超时等等问题,烦不胜烦,因此我们可以改成国内的镜像源,常用的就是阿里、腾讯的源。

这里我们打开项目的gradle-wrapper.properties看看。

① 腾讯源

下面我们来更换腾讯源,代码如下:

groovy 复制代码
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5-all.zip

实际上我们就是从

java 复制代码
services.gradle.org/distributions

改成了

java 复制代码
mirrors.cloud.tencent.com/gradle

③ 阿里源

java 复制代码
distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.5-all.zip

实际上我们就是从

java 复制代码
services.gradle.org/distributions

改成了

java 复制代码
mirrors.aliyun.com/macports/distfiles/gradle

改完之后Sync Now即可,两者选一个就好了。

二、更新仓库源

下面我们运行一下看看,报什么错,根据具体的错误去解决问题。

从上诉错误来看有四个库的依赖出了问题,这几个库的作用分别是权限、刷新、数据库,实际上是3个,因为这个下拉刷新实际上是可以一起改的。本身的原因就是jcenter()仓库下的依赖库访问不了了,那么最简单的办法就是将jcenter()替换为国内的仓库源。

打开项目的build.gradle,找到jcenter(),修改为如下代码:

groovy 复制代码
	maven { url 'https://maven.aliyun.com/repository/public' }

修改后如下图所示:

这里我将google()mavenCentral()也注释掉了,对应的我添加了

groovy 复制代码
	maven { url 'https://maven.aliyun.com/repository/google' }

这个就看你自己要不要替换了,需要注意的是,国内的库并不是实时同步国外的库的,所以,你可以不注释google()mavenCentral(),同时更新一些库的版本,改动后记得Sync Now同步一下即可。

三、修复城市重名BUG

由于部分城市存在同名的情况,所以我们最好在请求城市搜索API的时候,最好带上城市,举一个例子,如果你当前定位在深圳南山,按照我们之前逻辑直接搜索南山的话,你会发现第一个出现的值不是深圳市南山区,而是黑龙江鹤岗南山,如下图所示:

然后就有读者问我,不对啊,我定位在南山,为什么温度这么低啊,我当时就解释了,但是他有没有理解我不清楚,所以借着这个更新的机会,就顺便解决了,这里我们就该这个定位返回的地方,如果还有别的地方出现这样的情况,你可以再去更改,在MainActivity中改动如下图所示:

MapWeatherActivity中改动如下所示:

运行一下看看

非常好,我的代码还是照样运行,只不过我不会再把Key放在项目里面了,因为读者都用我的Key访问,导致和风认为我账号恶意访问,就封了我的和风账号,现在都没有解封。所以我又注册了一个账号,申请了新的Key才能够访问API,说多了都是泪。

四、地图加载问题

地图加载问题,这个问题是什么意思呢?就是读者在运行项目的时候,天气API配置好了,于是进入地图页面,发现页面一直在加载中,然后就问我为什么?这个问题我之前就说过了原因,这是因为百度地图的SDK在创建应用的时候需要配置三个信息:发布版SHA1调试版SHA1包名。那么如果我们在当前本地运行的时候用的就是调试版SHA1,而我的调试版SHA1毫无疑问在我的百度地图开放平台上配置了,你又没配置,所以你访问不了,所以你看看控制台是不是会有这种类似的错误,如下图所示:

不出意外是有的,那么解决方式我之前也说过,有两种方式,第一种就是从新在你的SDK平台上配置一下,第二种方式就是我们通过创建一个jks,然后将调试和发布都改成使用这个jks即可,在app模块下的build.gradle中添加如下代码:

groovy 复制代码
    signingConfigs {
        release {
            storeFile file('../weather.jks')
            storePassword '123456'
            keyAlias 'weather'
            keyPassword '123456'
        }
        debug {
            storeFile file('../weather.jks')
            storePassword '123456'
            keyAlias 'weather'
            keyPassword '123456'
        }
    }
groovy 复制代码
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
    }

添加位置如下图所示:

改完记得Sync Now,通过jks去获取发布版SHA1值,然后通过上面的配置让我们debug的时候也是用发布版的jks,再回到百度开放平台,将开发版SHA1改成和发布版SHA1一样即可,如下图所示:

下面在运行,进入地图页面就会一直加载了,控制台也不会出现那个错误信息,我上面说的你最好自己在自己的平台上能配置一下,而不是拿着我的代码就跑,跑不起来就来问,先想想自己的原因。

五、源码

源码地址:GoodWeather

最新APK下载:GoodWeather3.0.apk

欢迎 Star 和 Fork

相关推荐
编程洪同学41 分钟前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
氤氲息3 小时前
Android 底部tab,使用recycleview实现
android
Clockwiseee3 小时前
PHP之伪协议
android·开发语言·php
小林爱3 小时前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
小何开发5 小时前
Android Studio 安装教程
android·ide·android studio
开发者阿伟5 小时前
Android Jetpack LiveData源码解析
android·android jetpack
weixin_438150995 小时前
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
android·单片机
CheungChunChiu6 小时前
Android10 rk3399 以太网接入流程分析
android·framework·以太网·eth·net·netd
木头没有瓜6 小时前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
键盘侠0076 小时前
springboot 上传图片 转存成webp
android·spring boot·okhttp