浅谈Android Studio 3.0 的一些小变化

 更新时间:2017年10月30日 14:30:31   作者:珠穆朗玛小王子  
本篇文章主要介绍了浅谈Android Studio 3.0 的一些小变化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

一大早还在北京拥挤的地铁里,我的CTO闫哥在微信里给我发了一条信息:Android Studio 3.0发布了。

为什么会这么关注Android Studio 3.0 的版本发布呢?主要是因为公司即将开发的新app准备使用Kotlin语言,而Android Studio 3.0 已经把Kotlin的语言支持内置进去了,这样就省去了很多的麻烦,如果你还没接触过Kotlin语言,可以去百度一下 他们的官网,如果你现在使用的Java语言,那么你真是太幸运了,因为Kotlin对于你来说,将会非常简单,例如像我这样的,两三天就可以几乎应付大部分的开发了。

这里就不对Kotlin语言做过多的描述了,今天的重点,是我升级到Android Studio 3.0 以后的故事。

正文

来到公司打开电脑,升级Android Studio到3.0版本,编译目前的工程。哎呀呀我擦擦,为什么报了好多的错?别着急,我们慢慢解决这些问题。


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上查看是否版本更新的时间,非常的方便。

总结

这就是我今天遇到的问题及解决方案,如果之前有更多问题再补充。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放

    Android 使用Vitamio打造自己的万能播放器(2)—— 手势控制亮度、音量、缩放

    本文主要介绍Android Vitamio插件的一些功能,这里主要介绍 Android Vitamio插件的手势控制亮度,音量,缩放的功能,并提供代码实例,有需要的小伙伴可以参考下
    2016-07-07
  • Android 判断所有字段是否已经输入的实例

    Android 判断所有字段是否已经输入的实例

    今天小编就为大家分享一篇Android 判断所有字段是否已经输入的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android 按后退键退出Android程序的实现方法

    Android 按后退键退出Android程序的实现方法

    本篇文章介绍了,在Android中按后退键退出Android程序的实现方法。需要的朋友参考下
    2013-04-04
  • 一篇文章弄懂kotlin的扩展方法

    一篇文章弄懂kotlin的扩展方法

    这篇文章主要给大家介绍了如何通过一篇文章弄懂kotlin的扩展方法,文中通过示例代码介绍的非常详细,对大家学习或者使用kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Android ScrollView实现下拉弹回动画效果

    Android ScrollView实现下拉弹回动画效果

    这篇文章主要为大家详细介绍了Android ScrollView实现下拉弹回动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android带圆形数字进度的自定义进度条示例

    Android带圆形数字进度的自定义进度条示例

    本篇文章主要介绍了Android带圆形数字进度的自定义进度条示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 浅谈Flutter解析JSON三种方式

    浅谈Flutter解析JSON三种方式

    这篇文章主要介绍了浅谈Flutter解析JSON三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Android实现图片裁剪处理的操作步骤

    Android实现图片裁剪处理的操作步骤

    这篇文章介绍了构建具有图片选择、裁剪(含手动缩放和旋转)及保存到自定义路径功能的 Android 应用 demo 的步骤,包括设置权限、创建布局文件、实现自定义视图CustomCropImageView、更新Activity逻辑等,最终完成了具有完整裁剪功能的应用,需要的朋友可以参考下
    2025-01-01
  • Android实现3D云标签效果

    Android实现3D云标签效果

    这篇文章主要为大家详细介绍了Android实现3D云标签效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android 线程优化知识点学习

    Android 线程优化知识点学习

    这篇文章主要为大家介绍了Android线程优化知识点学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论