Android Studio 3.0
1、.gradle文件
哇塞,问题解决之后就想着赶紧创建一个新的项目来看看有啥变化,首先一个变化比较大的是.gradle文件:
我们可以看到,谷歌爸爸把buildToolsVersion构建工具的版本给“干掉了”,在以前的版本中,buildToolsVersion也会给项目的构建带来很多错,现在谷歌爸爸把它给“干掉了”;还有就是下面的依赖换成了implementation,那么它和compile有什么区别呢?别着急,喝杯茶听我细细道来:
compile和api
api完全等同于compile,二者没有区别。我们大家都知道,随着Android版本的更新,有很多过时的类和方法,compile亦是如此,我们可以把compile理解成api的过去式。
api和implementation
这两个是AS3.0版本中新增的指令,下面用一张图来说明一啊两者的区别:
图片参考
有想详细了解的同学,请参考官方的
2、支持Kotlin
还在初学Kotlin语言的同学有福了,AS3.0支持将Java代码直接转成Kotlin代码,下面我们通过一段VCR来认识一下这个功能:
在java文件中,选中你要转换的代码,然后在顶部选择Code——>Convert Java File to Kotlin File进行转换就好了,转换之后,这就是一个Kotlin文件了。
3、logcat栏
在AS上几个版本中,在Logcat还是Android Monitor的时候,里面有很多东西,网络啊,内存啊,CPU啊什么的,AS3.0中,谷歌将其分开了,Logcat就单独放出来了,之前那个看网络,内存,CPU的单独拎出来了,一个叫Android Profiler的东西:
是不是很帅,据说这玩意儿还自带抓包功能哦(这是LZ最喜欢的一个功能)。只不过默认是关闭的,我们要手动把它开起来。进入Run——>Edit Configurations,然后把下面这个钩上就好了:
需要注意的是,你项目中的API版本得是API26以下,而且你的手机版本得是Android5.0以上才能使用抓包功能。开启之后,我们来抓个包试试吧:
在手机上发起一次网络请求,NETWORK那一栏会发生明显的变化,我们选择那个区域进行抓包,可以看到请求了一个接口MainServlet(如果该区域下会请求多个接口,则会一一列出来),然后我们点击MainServlet,就会出现后台传过来的Json,Header之类的信息,怎么样,是不是很屌,以后再也不用再麻烦测试帮你抓包了,也不用再装什么其他软件了。CPU和MEMORY也一样,都具有记录当前页面的数据,你也可以根据它所记录的数据进行相应的分析。这两个就不展示了,有兴趣的同学可以更新之后自己玩玩。最后需要注意的是开启这个之后会降低应用程序的构建速度,因此只有在你要开始对应用程序进行概要分析时,再启用它。
4、文件管理器
AS3.0中,文件管理器工具允许和你的AS连接的手机无缝交互,你可以在AS3.0上查看,复制并删除设备上的文件。当检查由应用程序创建的文件或是要讲文件传输到设备时,非常有用:
data/data/app_name/
包含存储在内部存储上的应用程序的数据文件
sdcard/
包含存储在外部用户存储上的用户文件 (图片等)
5、支持Java8
同样,喜欢写lambda的同学也有福利了,这次AS的改版支持了Java8,可以直接将Java代码格式成lambda格式的,但是你得给你的项目设置成支持Java8,右键你的module,选择open Module Settings,进去之后按照如下设置就可以了:
这样你就能使用lambda表达式了,系统会自动提醒你哪里可以转换成lambda表达式,是不是好智能:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
原文链接:
http://www.jianshu.com/p/15afb8234d19?utm_source=tuicool&utm_medium=referral
问题总结:
Android Studio的自带Gradle版本是4.1,插件版本是3.0.0,所以如果你使用的是老版本,就会出现一些小的兼容问题,我们看看报了哪些错误呢:
问题1
Error:(72, 0) Cannot set the value of read-only property ‘outputFile’ for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=appDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
outputFile是只读属性,不可以对他进行修改
看一下我的gradle里面的代码:
// 定义生成的apk的名称
def apkName;
buildTypes {
release {
...
// 定义release版本生成的apk的名字
apkName = "xxx" + VERSION_NAME + "_release.apk";
}
debug {
...
// 定义debug版本生成的apk的名字
apkName = "ugirls_" + VERSION_NAME + "_debug.apk";
}
}
// 修改apk build的名字
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//这里使用之前定义apk文件名称
output.outputFile = new File(outputFile.parent, apkName)
}
}
}
这段代码的功能是修改Build命令生成的apk的名称,因为outputFile变成只读属性,所以报错。
修改后:
// 之前代码保持不变
// 修改apk build的名字
android.applicationVariants.all { variant ->
variant.outputs.all {
if (outputFileName.endsWith('.apk')) {
//这里使用之前定义apk文件名称
outputFileName = apkName
}
}
}
把each修改为all,然后通过outputFileName修改生成的apk的名称。
如果你提示没有找到all方法或者是未找到outputFileName,你可以先把这个功能注释掉,等其他问题都解决了,再打开就可以解决这个问题了。
问题2
Error:All flavors must now belong to a named flavor dimension. Learn more at
https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
所有的flavor属性应当属于同一个命名空间
看着问题似乎有点深奥,其实就是需要我们为flavors设置一个版本,统一使用相同版本的flavors。
defaultConfig {
targetSdkVersion:***
minSdkVersion :***
versionCode:***
versionName :***
//为flavor设置一个版本,命名是随意的
flavorDimensions "versionCode"
}
问题3
有些库不能被正常引用,例如我使用的multidex,在上面的截图中已经提示我们如何解决这个问题
buildscript {
repositories {
...
// 添加google库的依赖
google()
}
dependencies {
...
}
}
问题4
Error:(2638) error: style attribute ‘@android:attr/windowEnterAnimation’ not found.
提示我们找不到@android:attr/windowEnterAnimation,因为已经不支持@开头使用android自带的属性,我们只要把@符号删掉就可以了。
修改前:
<style name="ToastStyle" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/push_fade_in</item>
<item name="@android:windowExitAnimation">@anim/push_fade_out</item>
</style>
修改后:
<style name="ToastStyle" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/push_fade_in</item>
<item name="android:windowExitAnimation">@anim/push_fade_out</item>
</style>
问题5
Error:Execution failed for task ':app:javaPreCompileAppDebug'.
Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.
- butterknife-6.1.0.jar (com.jakewharton:butterknife:6.1.0)
Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior. Note that this option is deprecated and will be removed in the future.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.
好多的错误日志啊,其实最关键的只有前两行:
使用注解编译库,需要显示的声明,而我正在使用的butterknife是含有注解编译功能的,但是并没有声明。
解决办法:
android {
defaultConfig {
// 声明需要使用注解功能
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
...
}
}
其他的变化
通过刚才的修改,我的工程已经运行起来了,但是发现了Android Studio 3.0 的几个小变化。
变化1
Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle:
apply plugin: 'me.tatarka.retrolambda'
从警告上看,希望我移除这个插件,于是我到官网上查看了一下信息:
If Android Studio detects that your project is using Jack, Retrolambda, or DexGuard, the IDE uses Java 8 support provided by those tools instead.
如果Android Studio发现你的工程中使用Jack ,Retrolambda 或DexGuard,编辑器会使用Java8支持,替换这个工具。
因为我使用me.tatarka.retrolambda第三方框架,所以就出现了这个,我们只要删除相关的配置就可以了。
变化2
提示有更高版本你的第三方框架:
上面的截图显示,gson有更高的版本2.8.3,提示我升级gson。这就省去了我们去github上查看是否版本更新的时间,非常的方便。