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

总结

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

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

时间: 2024-10-26 06:09:14

浅谈Android Studio 3.0 的一些小变化的相关文章

浅谈Android Studio 3.0 工具新特性的使用 Android Profiler 、Device File Explorer

前言: 其实 studio3.0的工具大家也已经使用过一段时间了,自己呢,就是从bate版开始使用的,我觉得比较好用的几个地方.就几个,可能还没用到其他的精髓. 但我觉的这个两个功能对我是比较实用的.好那么下面就给大家介绍一下吧. 正文: 话不多说咱们直接上图吧.(个人比较喜欢看图说话) 第一个(Android Profiler)我要介绍的就是这个了.(先看一下效果"震撼一下") (图-1) (图-2) (图-3) (厉害不厉害,牛逼不牛逼)那么我们怎么来操作这个工具呢,来咱们接着看图

浅谈Android Studio JNI生成so库

1.新建Android studio工程 2.新建class:AppKey.java.主要为了保存密钥 代码块 package com...adminapp.lib.utils.jni; /** * Created by seven on 16/9/8. */ public class AppKey { static { System.loadLibrary("AppKey"); } public static native String WechatId(); public stat

浅谈android中数据库的拷贝

SQLiteDatabase不支持直接从assets读取文件,所以要提前拷贝数据库.在读取数据库时,先在项目中建立assets文件夹用于存放外部文件,将数据库文件拷到该目录下. 代码方法: /** * 拷贝数据库至file文件夹下 * @param dbName 数据库名称 */ private void initAddressDB(String dbName) { //1,在files文件夹下创建同名dbName数据库文件过程 File files=getFilesDir();//获取/dat

浅谈Android Studio3.0更新之路(遇坑必入)

序言:作为这个世界上走在最前沿的生物"猿",怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3.0正式版也发布了,作为Android开发的猿们我们应该早就知道谷歌在今年5月的开发者大会上就说了要支持Kotlin语言,所以这次更新一个比较大的点就在于支持Kotlin语言了,下面就跟着LZ的脚步来探索一下AS3.0吧 相信很多人很早就体验过谷歌爸爸放出来的体验版本了,虽然说正式版已经出了,但是很多人也不敢轻易贸然的更新,

浅谈Android开发中项目的文件结构及规范化部署建议_java

一.几句话 使用Gradle及其推荐的项目框架 把密码等敏感数据放入gradle.properties 不要自己写Http客户端,使用Volley或OkHttp库 使用Jackson库来解析JSON数据 避免Guava并出于Dalvik 65K methods limit不要使用过多的库 使用Fragment来绘制UI界面 Activity主要用来管理Fragment 布局文件XML也是代码,好好组织它们 在布局文件里,使用styles以避免重复的属性 使用多个style文件而不是一个巨大的st

浅谈android性能优化之启动过程(冷启动和热启动)

本文介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,分享给大家,具体如下: 一.应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动. 2.热启动:当启动应用时,后台已有该应用的进程(例:按back键.home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热

浅谈Android Activity与Service的交互方式_Android

实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上. 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用.但缺点也十分明显,发送广播受到系统制约.系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟.同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

Android Studio 1.0.2项目实战——从一个APP的开发过程认识Android Studio

Android Studio 1.0.1刚刚发布不久,谷歌紧接着发布了Android Studio 1.0.2版本,和1.0.0一样,是一个Bug修复版本.在上一篇Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境,我们介绍了Android开发环境的搭建,今天先来说一下上一篇中大家问道比较多的问题,然后说一些Android Studio的使用技巧.    一.搭建开发环境中遇到的问题及解决办法  1.Genymotion模拟器网络错误 我们顺利的安装

浅谈Android View绘制三大流程探索及常见问题

View绘制的三大流程,指的是measure(测量).layout(布局).draw(绘制) measure负责确定View的测量宽/高,也就是该View需要占用屏幕的大小,确定完View需要占用的屏幕大小后,就会通过layout确定View的最终宽/高和四个顶点在手机界面上的位置,等通过measure和layout过程确定了View的宽高和要显示的位置后,就会执行draw绘制View的内容到手机屏幕上. 在详细介绍这三大流程之前,需要简单了解一下ViewRootImpl,View绘制的三大步骤