美文网首页Android葵花宝典demo程序员之家
Android Studio3.0更新之路(遇坑必入)

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

作者: 24K纯帅豆 | 来源:发表于2017-10-28 19:53 被阅读19611次

序言:作为这个世界上走在最前沿的生物“猿”,怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3.0正式版也发布了,作为Android开发的猿们我们应该早就知道谷歌在今年5月的开发者大会上就说了要支持Kotlin语言,所以这次更新一个比较大的点就在于支持Kotlin语言了,下面就跟着LZ的脚步来探索一下AS3.0吧

相信很多人很早就体验过谷歌爸爸放出来的体验版本了,虽然说正式版已经出了,但是很多人也不敢轻易贸然的更新,因为怕会掉进坑里出不来(真是一只胆小的猿,鉴定完毕)

安装

如果你从Android Studio内部点击更新的话,会跳转到Android的官网,没有梯子的同学可以去这个网站下载更新:

Android Studio3.0正式版

安装过程中遇到的问题

1、Gradle Sync failed:
Gradle sync failed: Cause: com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;
Consult IDE log for more details (Help | Show Log) (8s 123ms)

其实一开始不是这个错,最开始是一个redownload的一个错,后来LZ把2.3版本的给删了,缓存给清除了,然后就变成这个错了。既然有错,那就解决呗,顺手百度了一个,下面看看stackoverflow的解决方案


这个方法确实也适用于我,把ButterKnife降级之后就OK了。如果有其他更好的解决方法,欢迎私信我,有偿给发红包。“一个问题的解决是为了更好的迎接下一个问题的出现”——鲁迅

解决方案1:把项目中依赖的ButterKnife降级到8.4.0

解决方案2:把gradle plugin版本降低至2.3.3 重新编译下就可以了(这里感谢吊儿郎当小黑青年

解决方案3:将app.gradle中的apply plugin: 'com.jakewharton.butterknife'删掉即可。

解决方案3的详解请看

解决方案4:在defaultConfig里加下面这个也是可以解决的,这里感谢名字真难取1 :

javaCompileOptions { 
    annotationProcessorOptions { 
        includeCompileClasspath = true 
    } 
}
2、Unable to resolve dependency for:

第一眼看这个错的时候我以为我setting.gradle中没有依赖appCommon,看完之后明明确实依赖了,而且这是一个老项目,在AS2.3版本的时候很正常,然后我就知道这又是一个坑,无奈的又去上了一把Internet,然后试过网上说的在buildTypes中加入preview节点,然而并没有什么卵用,查了半天还是没有找到解决的方法,后来看着这段报错信息的时候,我看到了signingConfigs,我想到gradle中好像有这么个节点,抱着试一试的态度我删了那个节点,然后,卧槽卧槽卧槽,可以成功编译了,这是不是有一种躺着过坑的赶脚。如果有其他更好的解决方法,欢迎私信我,有偿给发红包

解决方案:把项目中的signingConfigs节点删除掉就好了,如果你担心多渠道打包的事情,那么就用打包工具吧。

以下是群里的朋友遇到的一些问题:

3、app:transformDexArchiveWithExterLibsDexMergeForDebug

解决方案:将电脑中的.gradle/cache目录删除掉(清除掉gradle缓存)重新build。

参考stackoverflow

解决方案详解在这里

4、gradle打包,自定义apk名称代码报错(Cannot set the value of read-only property 'outputFile' )
Error:(56, 0) Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.
<a href="openFile:D:\eclipseCode\ipay-android\xinlebao\build.gradle">Open File</a>

解决方案:修改文件名代码请这样写

android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "xinlebao_${defaultConfig.versionName}_${releaseTime()}.apk"
                }
            }
5、AAPT2 编译报错 AAPT2 error
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

解决方案:在gradle.properties中关闭APPT2 编译

android.enableAapt2=false
注:如果是eclipse转到as上的项目,可能没有gradle.properties文件,请在项目根目录中手动创建
6、apt插件问题(Error:Cannot choose between the following configurations of project :mylibrary:)
Error:Cannot choose between the following configurations of project :mylibrary:

- debugApiElements
- debugRuntimeElements
- releaseApiElements
- releaseRuntimeElements
  All of them match the consumer attributes:

解决方案:如下

//1.在project的build.gradle中删除
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
//2.在module的build.gradle中删除
apply plugin: 'android-apt'
//3.将module的build.gradle文件中的dependency
apt  'com.jakewharton:butterknife-compiler:8.1.0'
//改为
annotationProcessor  'com.jakewharton:butterknife-compiler:8.1.0'
7、All flavors must now belong to a named flavor dimension. Learn more at :

解决方案:在你的app.gradle中的defaultConfig节点下加入flavorDimensions "versionCode"这句就好了。

8、Error:Could not resolve all dependencies for configuration

':app:prodDebugCompileClasspath'.

自AS3.0开始,就提供了自动匹配variant的机制,所以在依赖的时候不需要指定variant配置,比如:

dependencies {
  debugCompile project(path: ':Module1', configuration: 'debug')
  releaseCompile project(path: ':Module1', configuration: 'release')
}

这样设置就会报如下的错:

解决方案:直接依赖就好了:

api project(': Module1')
9、Error:(130, 0) Gradle DSL method not found: 'apt()'

解决方法:如果你的项目中使用了apt,那么请换成annotationPorcessor,在AS3.0中,apt被替换成了annotationPorcessor。在这里给大家一个小建议,无论gradle是什么版本,请大家都要把apt换成annotationPorcessor,因为官方现在不维护apt了。

好了,以上就是最近更新3.0所遇到的一些问题,如果你还遇到其他的问题,欢迎私信我。

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最喜欢的一个功能)。当你项目中的compileSdkVersion版本是26以下时,你需要手动开启,如果compileSdkVersion版本大于26的请自动忽略这里,开启的方式是进入Run——>Edit Configurations,然后把下面这个钩上就好了:

需要注意的是,你的手机版本得是Android5.0以上才能使用抓包功能。开启之后,我们来抓个包试试吧:

在手机上发起一次网络请求,NETWORK那一栏会发生明显的变化,我们选择那个区域进行抓包,可以看到请求了一个接口MainServlet(如果该区域下会请求多个接口,则会一一列出来),然后我们点击MainServlet,就会出现后台传过来的Json,Header之类的信息,怎么样,是不是很屌,以后再也不用再麻烦测试帮你抓包了,也不用再装什么其他软件了。CPUMEMORY也一样,都具有记录当前页面的数据,你也可以根据它所记录的数据进行相应的分析。这两个就不展示了,有兴趣的同学可以更新之后自己玩玩。最后需要注意的是开启这个之后会降低应用程序的构建速度,因此只有在你要开始对应用程序进行概要分析时,再启用它。

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://blog.csdn.net/soslinken/article/details/73114637

http://blog.csdn.net/niubitianping/article/details/72600923

http://www.jianshu.com/p/9af06314e036

公众号:Android技术经验分享,期待你的加入......

公众号:Android技术经验分享

相关文章

网友评论

  • Todo2:我加了flutter后.as就各位问题,有人碰到不?
    不过写的非常不错,赞

    组件化和插件化的开发里程总结
    https://www.jianshu.com/p/df2a6717009d
  • 还没爬出坑的程序猿:去掉buildToolsVersion版本后,应用宝安装的时候就提示安装失败,apk损坏
    但adb和手机里安装都没问题,
    加上buildToolsVersion就没问题了,不知道应用宝为啥要检测这个
    24K纯帅豆:@还没爬出坑的程序猿 现在新建的项目都没有了buildToolsVersion啊,直接AS安装到手机上啊
    还没爬出坑的程序猿:@24K纯帅豆 是从电脑上通过应用宝安装器安装吗?我直接新建的默认项目都是这样,加上就没问题,不加就提示损坏
    24K纯帅豆:@还没爬出坑的程序猿 我觉得应该不是buildToolsVersion的原因,因为我一直没有遇到过你说的这个问题,我也是去掉了的
  • ce4c10d6271a:楼主有空吗?
    Error:Could not get unknown property 'apkVariantData' for object of type com.android.build.gradle.internal.api.ApplicationVariantImpl.
    这个问题,我用网上的修改gradle:3.0.1-》gradle:2.3.3没用,
    我是刚接手项目的小白,能不能帮忙看看怎么解决
  • 1ac9a4722ba7:更新3.0之后 Choose library dependency 搜索不了第三方的包 怎么解决?
    24K纯帅豆:@流星丨驱动 好像不止3.0的搜不到,其他版本的好像也搜不到,建议去github上搜索
    1ac9a4722ba7:@24K纯帅豆 gson 这个
    24K纯帅豆:@流星丨驱动 比如哪个三方包呢
  • 下雨天的小白鞋:为什么一直在更新gradle???不动
  • 156ef605f972:为什么我改成新的打包方式,为什么还报错
    24K纯帅豆:怎么说?新的打包方式?
  • 0599beed3c0c:升级3.x之后,dependencies不能搜索到三方库了,lz有遇到过吗?
    24K纯帅豆:@itzhy 看了一下,这个配置是没有问题的,你要不试试重新装一下看看
    0599beed3c0c:@24K纯帅豆 能麻烦看一下配置有什么问题吗?升级上来我只是根据提示改了google()库,但是现在搜索dependencies,都是nothing了,新建的项目也一样,下面是新项目的gradle
    buildscript {
    repositories {
    jcenter()
    google()
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'

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

    allprojects {
    repositories {
    jcenter()
    google()
    }
    }

    task clean(type: Delete) {
    delete rootProject.buildDir
    }
    24K纯帅豆:@itzhy 这个没有遇到,基本都是可以的
  • 请叫我章鱼哥:Android Profiler监控network的时候只能看到name,无法看到type和size,这么回事,请指教
    :smile:
    请叫我章鱼哥:就是监控的方法name旁边有个type和size和其他项的:sweat:
    24K纯帅豆:type和size是什么鬼
  • 丨灬柳夢Oo:android.enableAapt2=false 加了也没解决 主要是 v7包里面的.9图片 报错
    丨灬柳夢Oo:@24K纯帅豆 AAPT err(Facade for 1948427294): \\?\C:\Users\XXX\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\120bd5fb36bdca4cbfe4c203502a2ee1\res\drawable-xxhdpi-v4\abc_textfield_search_default_mtrl_alpha.9.png ERROR: Unable to open PNG file 主要是报这个错 不知道啥子原因 实在解决不到了 gradle 版本换回 2.14.1 插件版本换回2.2.2 就没问题
    24K纯帅豆:是的,和.9图也有关系,你可以看一下上面的评论
  • 一二三的壹:android profiler 提示需要API 21 以上的才可以 ,可是我司用的设备都是19的 怎么改? 求指教
    24K纯帅豆:不过你可以用自带的模拟器,去创建一个21以上的设备
    24K纯帅豆:暂时还没有发现解决办法,看看后续官方会怎么样
  • 4fc0238b5269:
    ButterKnife的问题修改版本号并不能解决, 除非gradle降级, 不过我发现
    在defaultConfig 里加一句 : javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } 是可以解决
    24K纯帅豆:不过也谢谢你提供新的解决办法
    24K纯帅豆:降级是可以解决的哦,这个很多人都尝试过,还有就是按照文中说的那样删除apply plugin: 'com.jakewharton.butterknife'
  • dongjunkun:楼主总结的非常好,抓包的功能很喜欢,有一点需要纠正的api大于等于26的可以直接使用抓包,不需要开启那个选项,并非小26才能使用抓包功能
    thsai:请问 我的api是26的 手机是6.0系统的 但是怎么也抓不了包 这是为啥呢
    24K纯帅豆:好的,谢谢指正
  • honglei92:比较全面
  • 秦军锐士:Error:Unable to load class 'org.gradle.api.internal.component.Usage'.
    Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
    <a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
    <a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
    AS3.0升级后,gradle也升级为3.0.0,结果旧项目出现上面的错误,纠结好久不知如何解决?还望指点一二。
    24K纯帅豆:@qquser_c771 可以啊,最好微信吧,lovecyg123
    qquser_c771:@24K纯帅豆 我可以加一下你吗……
    24K纯帅豆:加我qq:247026797,把具体的错误发我看一下哈
  • null_js:更新后app-debug.apk不能直接安装到手机,怎么回事?
    24K纯帅豆:你是说把apk包放到手机上安装吗
  • c9a85ec5c007:5、AAPT2 编译报错 AAPT2 error
    问下这个我自己用AS这条没问题,可是我这边使用jenkins打包就会报这个错误,加上android.enableAapt2=false也没用。。。知道怎么回事嘛
    c9a85ec5c007:@24K纯帅豆
    :global:transformClassesAndResourcesWithPrepareIntermediateJarsForRelease
    :gps:javaPreCompileRelease
    :global:compileReleaseNdk NO-SOURCE
    :global:mergeReleaseJniLibFolders
    :global:transformNativeLibsWithMergeJniLibsForRelease
    :global:transformNativeLibsWithIntermediateJniLibsForRelease
    :gps:compileReleaseJavaWithJavac注: Version 4.1.1 of Realm is now available: http://static.realm.io/downloads/java/latest
    注: Processing class UserLocation
    注: Processing module GPSdbModule
    注: 某些输入文件使用或覆盖了已过时的 API。
    注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。

    :gps:transformClassesWithRealmTransformerForRelease
    Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
    :app:mergeRReleaseResources FAILED

    FAILURE: Build failed with an exception.

    * What went wrong:
    Execution failed for task ':app:mergeRReleaseResources'.
    > Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
    前面都是error: file not found. 后面就是这些然后结束了。提示打包失败!
    c9a85ec5c007:@24K纯帅豆
    `C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\ae0b57691ee79d8f902297771e954e32\res\layout\tooltip.xml: error: file not found.

    C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\ae0b57691ee79d8f902297771e954e32\res\drawable-hdpi-v4\abc_ic_menu_share_mtrl_alpha.png: error: file not found.

    C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\design-26.1.0.aar\7f2bee1c5a0de4332323637de6d771d0\res\layout\design_navigation_item.xml: error: file not found.

    C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\ae0b57691ee79d8f902297771e954e32\res\layout\abc_action_bar_up_container.xml: error: file not found.

    C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\ae0b57691ee79d8f902297771e954e32\res\drawable-xhdpi-v4\abc_text_select_handle_middle_mtrl_light.png: error: file not found.

    C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\ae0b57691ee79d8f902297771e954e32\res\drawable-xhdpi-v4\abc_list_selector_disabled_holo_dark.9.png: error: file not found.`
    都是这一类的
    24K纯帅豆:log中还有其他信息吗
  • 依风听雨锋:我的ButterKnife没遇到问题,话说,你的google库添加了吗
    allprojects {
    repositories {
    google()
    jcenter()
    }
    }
    4fc0238b5269:在defaultConfig 里加一句 : javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } 是可以解决
    24K纯帅豆:嗯嗯,都加了的,好像有些人跟你一样没有问题
  • Kcwind:楼主你是更新了gradle的版本才会遇到这些问题吧,我更新完之后没有选择更新gradle,没有遇到任何报错
    24K纯帅豆:@Kcwind 我这也是公司的项目,以为这两天比较闲,所以就研究了一下
    Kcwind:@24K纯帅豆 我这倒是没遇到,不过一更新gradle直接给我更新到3.0,下载半天不说还报一堆错,公司的项目没敢折腾,还原回去了没遇到问题
    24K纯帅豆:是的,更新了gradle,但是有些不更新gradle的好像也会报错

本文标题:Android Studio3.0更新之路(遇坑必入)

本文链接:https://www.haomeiwen.com/subject/lpqdpxtx.html