Android Studio 3.1.3 升级踩坑记录以及记录几个好用的插件

溢出季风
• 阅读 4395
看到AS每天提醒更新,所以没忍住还是从3.0更新到了3.1.3,于是乎项目就跑不起来了。另外由于之前把android studio 的配置文件改了,更新完又变成了默认的配置路径,所以还要把配置文件改一下。以下是踩坑记录

1、Gradle 编译问题的修改

(1)gradle 编译版本对应的build gradle插件版本详情 官网
https://developer.android.google.cn/studio/releases/gradle-plugin#updating-plugin

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}
buildscript定义了全局的相关属性
repositories定义仓库:一个仓库代表着依赖包的来源,例如jcenter仓库dependencies用来定义构建过程:仅仅需要定义默认的Android插件,该插件可以让你执行相关Android的tasks,注意:不应该在该方法体内定义子模块的依赖包。
allprojects用来定义各个模块的默认属性:不仅仅局限于默认的配置,也可以自己创造tasks在allprojects方法体内,这些tasks将会在所有模块中可见。
我升级完android studio 使用的是 Gradle 4.4 以及插件 classpath 'com.android.tools.build:gradle:3.1.3'

(2) compile 2018年底要废弃,使用implementtabion 和api 替换
官网
http://d.android.com/r/tools/update-dependency-configurations.html
https://developer.android.com/studio/build/dependencies

依赖库中所有的compile全部替换为 api,主程序的compile 替换为implementation

2、 compile和 implementation 和api 有什么区别

(1)implementation:
Gradle将依赖项添加到编译类路径,并将依赖项打包到构建输出。但是,当您的模块配置implementation依赖项时,它让Gradle知道您不希望模块在编译时将依赖项泄漏给其他模块。也就是说,依赖性仅在运行时可用于其他模块。
使用这种依赖性配置,而不是 api或compile(不建议使用)可导致 显著编译时间的改进,因为它减少了构建系统需要重新编译的模块的数量。例如,如果implementation依赖项更改其API,则Gradle仅重新编译该依赖项以及直接依赖于它的模块。大多数应用和测试模块都应使用此配置。
(2)api
Gradle将依赖项添加到编译类路径并构建输出。当一个模块包含一个api依赖项时,它让Gradle知道该模块想要将该依赖项传递给其他模块,以便它们在运行时和编译时都可用。
此配置的行为就像compile (现在已弃用),但您应谨慎使用它,并且只能将您需要的依赖项可传递地导出到其他上游使用者。这是因为,如果api依赖项更改其外部API,Gradle将重新编译在编译时有权访问该依赖项的所有模块。因此,拥有大量api依赖项可以显着增加构建时间。除非您希望将依赖项的API公开给单独的模块,否则库模块应该使用implementation 依赖项。
小结:
api 等同于 compile ,并且是可以引用传递,比如A Library 依赖了B Library,而B Library 依赖了 C Library,使用 api或compile(已废弃)的话,A Library 就可以调用 C Library 的代码。实现了一层层的依赖,这种方式耦合度高一点,并且编译的话都需要编译一遍。

implementation 就是只管当前 moudle, 比如A Library 依赖了B Library,而B Library 依赖了 C Library,使用implementation的话,A Library 就不可以调用 C Library 的代码。implementation 依赖的库,其他moudle是访问不到的。
建议:在Google IO 中提到了一个建议,依赖首先应该设置为implementation的,如果没有错,那就用implementation,如果有错,那么使用api指令。使用implementation会使编译速度有所增快。

3、解决 升级完 使用java 8 LifecycleObserver 时出现错误,
依赖 implementation "android.arch.lifecycle:common-java8:$lifecycle_version" 时的错误

Default interface methods are only supported starting with Android N (--min-api 24):
 void ndroid.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N 
(--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate
(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}

如果依赖这个库,那么只能使用最小24 版本,这就太坑了。解决办法如下
在 build.gradle 的 android{} 闭包下 添加如下代码,重新编译就好了

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

3、顺便更新几个好用的插件

(1)Android Parcelable code generator

     JavaBean序列化,快速实现Parcelable接口。

(2)CodeGlance
在右边快速浏览代码缩略,快速定位代码,特别好用
(3)findBugs-IDEA
一款查找bug的插件
(4)JsonOnlineViewer
在android studio 内部打开api接口测试的窗口,进行接口调试
(5)ECTranslation
一款翻译插件
(6)AndroidWiFiADB
通过WiFi 无线调试手机的 插件
(7)Alibaba Java Coding Guidelines
阿里巴巴的 java开发约束扫描插件

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
toLua踩坑
新博客:https://yinl.fun(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fyinl.fun)欢迎关注,同步更新toLua踩坑篇最近工作得用Lua实现逻辑,桥梁用的toLua,踩了很多坑,在这里记录一下。坑~toLua解析Lua属性
展菲 展菲
4年前
iOS 微信支付开发(最新版)
1.介绍本文为以前做的项目总结,由于相关支付SDK迭代,原文已经不满足需求,故作如下更新,供大家参考,另外增加常见问题总结。项目中要用到支付功能,需要支付宝支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家,用到的地方避免再次被坑。今天我们就主要介绍一下微信支付,其他支付介绍后面会尽快更新出来。
Easter79 Easter79
3年前
springCloud Finchley升级记录
最近开发新项目顺便升级SpringcloudDalston.SR5到当前最新版Finchley.SR1由于springboot1.5.10到当前最新版spring2.0.1版本升级修改比较大,记录一下首先修改一下springbootcloud版本号其他不用变部分配置文件名称修改了添加一下以下依赖会提示如何迁移<
Stella981 Stella981
3年前
Android 踩坑记录
一、java.lang.IllegalStateException:YouneedtouseaTheme.AppCompattheme(ordescendant)withthisactivity.Activity继承了兼容包中的类,查看主题是否来自 Theme.AppCompat<stylename
Stella981 Stella981
3年前
Inno Setup 自定义界面心得
因为项目需要,需要打windows安装包,要求安装界面完全按照需求来。作为没接触过这块儿的服务端宝宝,在此期间踩了很多坑。坑不提也罢,最终结果圆满,记录下与大部分网上PO出来的做法不太一样的小心得,备忘。网上搜到的自定义界面,都用的botva2.dll,我没用。应该说,用过,但遇到了图片变形的问题,短时间内没解决,所以最后全都用的 Inno
Stella981 Stella981
3年前
Groovy防PermOOM与OldOOM心得
作为Groovy重度用户,踩了新版本因为无法unloadclass导致permoom的坑,踩了classLoader.parallelLockMap不断添加新锁导致oldoom的坑。本文的意图就是记录一点埋坑心得。踩坑详情可见:https://my.oschina.net/chenxiaojie/blog/835934(https://my.o
Stella981 Stella981
3年前
Electron踩坑记录
心血来潮想做一个PC端应用,就来学学Electron,以下为学习Electron时的踩坑记录。心血来潮想做一个PC端应用,就来学学Electron,以下为学习Electron时的踩坑记录。安装在国内安装electron的时候,可能会因为网络原因遇到卡在Buildingfreshpackages...(yarn)或者是卡在nod
Stella981 Stella981
3年前
SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】
前言最近LZ给项目框架升级,从Spring1.x升级到Spring2.x,在这里就不多赘述两个版本之间的区别以及升级的原因。关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里。这里我们讨论一个关于URL中包含双斜杠被拦截的问题。发现问题升级框架之后,测试一个功能时,发现报错Htt
Easter79 Easter79
3年前
SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】
前言最近LZ给项目框架升级,从Spring1.x升级到Spring2.x,在这里就不多赘述两个版本之间的区别以及升级的原因。关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里。这里我们讨论一个关于URL中包含双斜杠被拦截的问题。发现问题升级框架之后,测试一个功能时,发现报错Htt
Stella981 Stella981
3年前
Redis中的Scan命令踩坑记
1原本以为自己对redis命令还蛮熟悉的,各种数据模型各种基于redis的骚操作。但是最近在使用redis的scan的命令式却踩了一个坑,顿时发觉自己原来对redis的游标理解的很有限。所以记录下这个踩坑的过程,背景如下:公司因为redis服务器内存吃紧,需要删除一些无用的没有设置过期时间的key。大概有500多w的key。虽然key的数目听起来
linbojue linbojue
1年前
超完整的Electron打包签名更新指南,这真是太酷啦!
大家好,我是多喝热水。在踩了数不清的坑之后,终于从0到1完成了一个桌面端应用,但万万没想到,最最痛苦的还不是开发过程,而是开发完成后的打包签名阶段,这真是踩坑踩麻了!!!超完整的Electron打包签名更新指南,这真是太酷啦!ok,踩坑归踩坑,收获也是不小
溢出季风
溢出季风
Lv1
远上寒山石径斜,白云深处有人家。
文章
3
粉丝
0
获赞
0