Android Gradle无法建立且无法解析R

时间:2019-03-20 03:19:21

标签: android android-gradle build.gradle

问题1:。在MainActivity.java中,出现语法错误“无法解析符号R”。

问题2:当我尝试清理或重建项目时,出现了很长的错误链接here

还值得注意的是,我仍然可以运行该应用程序并将其部署到手机中。只是构建应用程序的选项失败。

我尝试了一些事情,包括

  1. 删除.gradle和.idea / libraries。

  2. 添加以下行

    implementation 'com.android.support:support-annotations:26.1.0'
    
  3. 创建一个项目并制作一个应用


这是我的应用程序和MyApp Gradle文件。

应用级别:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "engineer.myname.myapp.myapp"
        minSdkVersion 22
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-annotations:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

项目级别:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'


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

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

task clean(type: Delete) {
    delete rootProject.buildDir
}

4 个答案:

答案 0 :(得分:2)

您必须在存储库部分添加maven { url 'https://maven.google.com' }

项目级别:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'


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

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://maven.google.com' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

OR

如果使用版本26,则内部依赖项版本应为1.0.13.0.1,即,如下所示

androidTestImplementation 'com.android.support.test:runner:1.0.1'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

如果使用版本27,则内部依赖项版本应为1.0.23.0.2,即,如下所示

androidTestImplementation 'com.android.support.test:runner:1.0.2'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

答案 1 :(得分:1)

该错误与所使用的支持注释的版本有关。它在您的错误日志中,最后一个由行引起-

  

原因:org.gradle.api.GradleException:找不到以下版本   满足版本要求的“ com.android.support:support-annotations”   约束:

由于-

  

实现'com.android.support:support-annotations:26.1.0'

升级到该库的最新稳定版本将解决此问题。

最新版本为:

implementation 'com.android.support:support-annotations:28.0.0'

由于许多原因,需要升级到最新的库版本。较新的Android工具或Android Studio将需要最新的库,或者您的库中的一个需要另一个库才能运行,等等。

最好在可能的情况下使用最新的稳定版本库。另外,请考虑使用AndroidX库,因为Google以后将不再使用较旧的编号版本。阅读Google Android文档中的herehere

答案 2 :(得分:0)

每个版本的Android Gradle插件现在都具有默认版本的构建工具。 Android Gradle插件3.3.2的最低支持版本为28.0.3。还有可能的依赖版本,例如com.android.support:support-annotations:28.0.0,应与此版本匹配,以消除以下错误:

>Caused by: org.gradle.api.GradleException: Cannot find a version of 'com.android.support:support-annotations' that satisfies the version constraints:
   Dependency path 'MyApp:app:unspecified' --> 'com.android.support:support-annotations:'
   Constraint path 'MyApp' --> 'com.android.support:support-annotations' strictly '26.1.0' because of the following reason: debugRuntimeClasspath uses version 26.1.0

以下是可能与您的问题相关的链接:

答案 3 :(得分:0)

这是因为,如果您未将buildToolsVersion明确添加到应用程序版本中,则Android Studio工具假定您使用的是最新的28.0.3,即buildToolsVersion。这个:

android {
    compileSdkVersion 26
    // you didn't add any buildToolsVersion
    defaultConfig {
        applicationId "engineer.myname.myapp.myapp"
        minSdkVersion 22
        targetSdkVersion 26

        ...
    }

    ...
}

因此,Android Studio会隐式添加buildToolsVersion "28.0.3"

android {
    compileSdkVersion 26
    buildToolsVersion "28.0.3" // added implicitly by Android Studio.
    defaultConfig {
        applicationId "engineer.myname.myapp.myapp"
        minSdkVersion 22
        targetSdkVersion 26

        ...
    }

    ...
}

在构建应用程序时,它会给您错误'cannot resolve symbol R',因为buildToolsVersion 28.0.3无法正确使用compileSdkVersion 26和支持库26。

因此,您需要为buildToolsVersioncompileSdkVersion使用相同的版本,并需要支持库来避免此问题。