关于AndroidStudio3.0 升级你可能遇到的事

升级 3.0 之后打开项目报错,这里记录一下解决的过程

首先升级 Gradle 版本,运行我们公司的标案项目,之前的 Gradle 版本是 2.1.2

进入正题:

运行Gradle报错

Gradle sync failed: Cannot choose between the following configurations of project :BaseCloudMusicResource:
            - debugApiElements
            - debugRuntimeElements
            - releaseApiElements
            - releaseRuntimeElements
            All of them match the consumer attributes:
            - Configuration 'debugApiElements':
            - Found com.android.build.api.attributes.BuildTypeAttr 'debug' but wasn't required.
            - Found com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
            - Found com.android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
            - Found org.gradle.api.attributes.Usage 'java-api' but wasn't required.
            - Configuration 'debugRuntimeElements':
            - Found com.android.build.api.attributes.BuildTypeAttr 'debug' but wasn't required.
            - Found com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
            - Found com.android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
            - Found org.gradle... (show balloon)

看报错说明是因为依赖的一个 BaseCloudMusicResource , Google 说明新版中依赖项目的语法改变了,依赖包使用旧的语法没有报错,
旧版 compile project(‘:BaseCloudMusicResource’)
新版implementation project(‘:BaseCloudMusicResource’)
貌似现在依赖包也可以使用implementation

这里还提示一点, Gradle 文件中:

compile 替换为 implementation
apt 替换为 annotationProcessor
testCompile 替换为 androidTestImplementation
releaseCompile 替换为 releaseImplementation

这里注意一点 :compile fileTree(dir: ‘libs’, include: [‘*.jar’])
不需要替换 compile , 看样子只有依赖包的时候才需要替换
还有一点 , 有的依赖包替换成 implementation 提示找不到,换回 compile 又可以了

继续 Build gradle 提示需要更新 Android SDK Build Tools version 至 26.0.2

OK ,你说了算,更新。(PS:这里是强制必须更新,否则无法编译

所有的 Modul 都升级后继续 Build,继续报错

Error:android-apt plugin is incompatible with the Android Gradle plugin.  Please use 'annotationProcessor' configuration instead.

从错误日志和官方信息分析:大概的意思是从 Gradle4.1 后不再允许加载除 ‘com.android.application’ 外的 plugin ,行,你厉害。

继续 Google , 新版去掉了 android-apt ,所有项目删除 Gradle 中 apply plugin: ‘android-apt’, 只保留apply plugin: ‘com.android.application’
把 apt 替换为 annotationProcessor
这里我的项目加载的 Realm 原来的版本是 1.2.0,由于原来的版本是通过apt加载的,我只能更新最新的版本 4.2.0,结果发现他的API又改了,瞬间泪奔,行,我改。

改好之后继续Build,继续报错,此时心态有些蹦了。OK,来看错误日志

Information:Gradle tasks [:pickerview:generateDebugSources, :pickerview:generateDebugAndroidTestSources, :pickerview:mockableAndroidJar, :zhxflib:generateDebugSources, :zhxflib:generateDebugAndroidTestSources, :zhxflib:mockableAndroidJar, :wigetlib:generateDebugSources, :wigetlib:generateDebugAndroidTestSources, :wigetlib:mockableAndroidJar, :app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:mockableAndroidJar]  
D:\zhihuixinfanWorkerSpace\ZhiHuiXinFan\app\build\intermediates\manifests\full\debug\AndroidManifest.xml  
Error:(12) error: unknown element <uses-library> found.  
Error:(12) unknown element <uses-library> found.  
Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details  
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details  
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details  
Error:Execution failed for task ':app:processDebugResources'.  
> Failed to execute aapt  
Information:BUILD FAILED in 8s  
Information:6 errors  
Information:0 warnings  
Information:See complete output in console

大概的意思是找不到指定的标签,what ?,只能 Google 了,找到的解决办法如下:

在项目的gradle.properties中添加如下代码:

android.enableAapt2=false

OK,暂时还不明白这个配置的含义,后面再深究。

来,接着Build。Boom!!!!还是报错了。

Error:Unable to resolve dependency Could not resolve com.android.support:recyclerview-v7:26.2.1.
<a href="openFile:/Users/zhanggang/Documents/gitlab/android-sports-bnsports/Relax/build.gradle">Open File</a><br><a href="Unable to resolve dependency for &#39;:Relax@debug/compileClasspath&#39;: Could not resolve com.android.support:recyclerview-v7:26.2.1.">Show Details</a>

几个意思,你让我升级到 26.0.2 又无法给我解析这个依赖项?

算你狠,解决方法如下:

appcompat-v7:26.1.0 
修改
implementation 'com.android.support:appcompat-v7:26.2.1'
改为
implementation 'com.android.support:appcompat-v7:26.+' 

同理对应的 design、recycleyView等都是这种改法。

继续Build,习惯了,还是报错

Android dependency 'com.android.support:appcompat-v7' has different version for the compile (23.4.0) and runtime (26.1.0) classpath. You should manually set the same version via DependencyResolution

此错误的意思是说项目中依赖了2个不同的版本,好吧,估计是不同的第三方库再升级后冲突了,如果你能很果断的分析除是哪个库,可以果断的把他 用 exclude过滤掉,然而我的这个项目第三方库比较多,用这个方法及其耗时,而且效果欠缺,这个发现一个干货的方法,可以统一所有的版本。

手机在root gradle 添加如下代码;

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "$supportlib_version"
            }
        }
    }
}


ext {
    supportlib_version = '26.+'

}

然后在 module gradle中添加如下代码即可控制版本号

dependencies {
    compile "com.android.support:appcompat-v7:$supportlib_version"
    compile "com.android.support:recyclerview-v7:$supportlib_version"
    ...
}

编译过后还是会报一些与应用相关的兼容问题,这里与大家项目不一致,在这里不做阐述了,今天就到这了。

阅读更多

扫码向博主提问

JackWaiting

博客专家

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Android
  • Kotlin
  • iOS
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanggang740/article/details/78658160
文章标签: gradle3-0 版本兼容
个人分类: android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭