上一篇:Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife
新版AS编译、更新镜像源、仓库源、修复部分BUG
- 前言
- 正文
- 一、更新镜像源
- ① 腾讯源
- ③ 阿里源
- 二、更新仓库源
- 三、修复城市重名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
看看。
① 腾讯源
下面我们来更换腾讯源,代码如下:
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5-all.zip
实际上我们就是从
services.gradle.org/distributions
改成了
mirrors.cloud.tencent.com/gradle
③ 阿里源
distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.5-all.zip
实际上我们就是从
services.gradle.org/distributions
改成了
mirrors.aliyun.com/macports/distfiles/gradle
改完之后Sync Now
即可,两者选一个就好了。
二、更新仓库源
下面我们运行一下看看,报什么错,根据具体的错误去解决问题。
从上诉错误来看有四个库的依赖出了问题,这几个库的作用分别是权限、刷新、数据库,实际上是3个,因为这个下拉刷新实际上是可以一起改的。本身的原因就是jcenter()
仓库下的依赖库访问不了了,那么最简单的办法就是将jcenter()替换为国内的仓库源。
打开项目的build.gradle,找到jcenter()
,修改为如下代码:
maven { url 'https://maven.aliyun.com/repository/public' }
修改后如下图所示:
这里我将google()
和mavenCentral()
也注释掉了,对应的我添加了
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中添加如下代码:
signingConfigs {
release {
storeFile file('../weather.jks')
storePassword '123456'
keyAlias 'weather'
keyPassword '123456'
}
debug {
storeFile file('../weather.jks')
storePassword '123456'
keyAlias 'weather'
keyPassword '123456'
}
}
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