Android Studio 3.1.3 升级踩坑记录以及记录几个好用的插件
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开发约束扫描插件