赞
踩
上篇讲了: 全面总结Android Studio2.X的填坑指南
这篇讲一下AS3.X的坑。。
作为这个世界上走在最前沿的生物“猿”,怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3.0正式版也发布了,作为Android开发的猿们我们应该早就知道谷歌在今年5月的开发者大会上就说了要支持Kotlin语言,所以这次更新一个比较大的点就在于支持Kotlin语言了,下面就跟着LZ的脚步来探索一下AS3.0吧
相信很多人很早就体验过谷歌爸爸放出来的体验版本了,虽然说正式版已经出了,但是很多人也不敢轻易贸然的更新,因为怕会掉进坑里出不来(真是一只胆小的猿,鉴定完毕)。
如果你从Android Studio内部点击更新的话,会跳转到Android的官网,没有梯子的同学可以点击 谷歌官方Android 开发中文网 下载更新:
网址: https://developer.android.google.cn/studio/index.html
貌似从2017年的中旬开始,AS就不能搜索依赖库了,后来gradle插件也不能搜索了,只有通过设置代理,或者翻墙(这个有风险,不推荐,怕查水表)的方式去解决问题。这里讲一下代理如何操作:
代理地址:mirrors.neusoft.edu.cn
端口号:80
打开设置页面 --> Appearance & Behavior --> System Settings --> HTTP Proxy,找到Manual proxy configuration,选择HTTP
,填入代理地址和端口号,点击ok
如图所示:
操作方式2:
在搜索插件页面,同样可以设置代理:
解决: 在gradle.properties
文件里面末尾以下配置,然后重新build一下:
- android.useAndroidX=true
- android.enableJetifier=true
- 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
重新编译下就可以了
第一眼看这个错的时候我以为我setting.gradle中没有依赖appCommon,看完之后明明确实依赖了,而且这是一个老项目,在AS2.3版本的时候很正常,然后我就知道这又是一个坑,无奈的又去上了一把Internet,然后试过网上说的在buildTypes中加入preview节点,然而并没有什么卵用,查了半天还是没有找到解决的方法,后来看着这段报错信息的时候,我看到了signingConfigs
,我想到gradle中好像有这么个节点,抱着试一试的态度我删了那个节点,然后,卧槽卧槽卧槽,可以成功编译了,这是不是有一种躺着过坑的赶脚。如果有其他更好的解决方法,欢迎私信我,有偿给发红包
解决方案: 把项目中的signingConfigs节点
删除掉就好了,如果你担心多渠道打包的事情,那么就用打包工具吧。
解决方案:将电脑中的.gradle
目录删除掉(清除掉gradle缓存)重新build
- 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.
解决方案: 修改文件名代码请这样写:(必须配置了productFlavors节点才可以这样写)
- android.applicationVariants.all { variant ->
- variant.outputs.all {
- outputFileName = "driver_${variant.productFlavors[0].name}_v${variant.versionName}.apk"
- }
- }
如果这样不行的话,请按下面这个写,这个是通用的:
- android.applicationVariants.all { variant ->
- variant.outputs.all {
- outputFileName = rootProject.getName()
- + "-" + buildType.name
- + "-" + releaseTime()
- + "-v" + defaultConfig.versionName
- + "-" + defaultConfig.versionCode
- + ".apk";
- }
- }
=================================================
- android {
- android.applicationVariants.all { variant ->
- variant.outputs.each { output ->
- output.outputFile = new File(output.outputFile.parent, rootProject.getName()
- + "-" + buildType.name
- + "-" + releaseTime()
- + "-v" + defaultConfig.versionName
- + "-" + defaultConfig.versionCode
- + ".apk");
- }
- }
- }
- 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文件,请在项目根目录中手动创建。
- 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'
- Error:Execution failed for task ':app:preDebugAndroidTestBuild'.
- Conflict with dependency 'com.android.support:support-annotations' in project ':app'.
- Resolved versions for app (26.1.0) and test app (27.1.1) differ. See
- https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.
原因:
发生这种类型的错误,原因是当我们修改了.build中的compileSdkVersion,产生所依赖的dependency与当前版本不一致导致的。
解决方案:点击 Build->Rebuid Project 菜单,重新编译一下项目,就OK了,如果还不行,先点击 Build->Clean Project 菜单,然后再点击 Build->Rebuid Project 菜单。
- Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of
- Android Studio. Please switch to a supported build system.
- Consider using CMake or ndk-build integration. For more information, go to:
- [https://d.android.com/r/studio-ui/add-native-code.html#ndkCompile](https://link.jianshu.com?
- t=https%3A%2F%2Fd.android.com%2Fr%2Fstudio-ui%2Fadd-native-code.html%23ndkCompile)
- To get started, you can use the sample ndk-build script the Android
- plugin generated for you at:
- D:\react-native\yiguan_rn_demo\node_modules\react-native-update\android\build\intermediates\ndk\debug\Android.mk
- Alternatively, you can use the experimental plugin:
- [https://developer.android.com/r/tools/experimental-plugin.html](https://link.jianshu.com?
- t=https%3A%2F%2Fdeveloper.android.com%2Fr%2Ftools%2Fexperimental-plugin.html)
- To continue using the deprecated NDK compile for another 60 days, set
- android.deprecatedNdkCompileLease=1521518279826 in gradle.properties
解决方案:在gradle.properties文件,把android.useDeprecatedNdk去掉,换成android.deprecatedNdkCompileLease=1521518279826 (后面这个数字按错误日志里的填)
错误提示如下图所示:
其实这个两个问题:
Error:Resource shrinker cannot be used for libraries.
原因是library中使用了混淆,并移除了无用的资源文件,解决办法:把该library中的shrinkResources字段移除就可以了,如下图所示:
Error:All flavors must now belong to a named flavor dimension.
原因是使用了productFlavors分包,解决方法:在build.gradle中的defaultConfig中添加一个flavorDimensions "XXX"就可以了,后面的XXX一般是跟你的versionCode相同,入下图所示:
错误的原因是在你的module的build.gradle
的 buildToolsVersion
和 targetSdkVersion
这几个的sdk版本设置太低了。
【解决】将sdk版本改为android 6.0后,下载和使用高版本的sdk。
本文转自 [Android Studio3.0更新之路(遇坑必入)],另外也加入了一些自己遇到的坑写在了里面。(https://mp.weixin.qq.com/s/VzMHjmKcI0hOHYrWK3Eqrw)
参考文章:https://www.jianshu.com/p/15afb8234d19
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。