【问题标题】:AndroidAnnotations + Android Studio - The generated null.R class cannot be foundAndroidAnnotations + Android Studio - 找不到生成的 null.R 类
【发布时间】:2019-11-20 21:02:37
【问题描述】:

我已经按照 wiki 说明使用最新版本的 AndroidStudio 设置了 ActiveAndroid。我正在使用产品口味。这是我的 gradle 构建文件:

apply plugin: 'android'
apply plugin: 'android-apt'

apt {
    arguments {
        androidManifestFile variant.processResources.manifestFile
        resourcePackageName android.defaultConfig.packageName
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    productFlavors {
        a {
            packageName "com.a.a"
        }

        b {
            packageName "com.a.b"
        }

        c {
            packageName "com.a.c"
        }
    }
}

dependencies {
    apt "org.androidannotations:androidannotations:3.0+"
    compile "org.androidannotations:androidannotations-api:3.0+"
    compile 'com.android.support:support-v4:19.0.1'
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

Gradle 构建文件,但是当我在设备上编译/调试时收到两个错误:

错误:: 找不到生成的 null.R 类

错误:任务 ':ml:compileADebugJava' 执行失败。

编译失败;有关详细信息,请参阅编译器错误输出。

我已经为我的构建文件尝试了许多设置,但我一生都无法让它工作。此外,当我尝试从以下位置更改我的 AndroidManifest 时:

android:name="com.a.a.MainActivity"

android:name="com.a.a.MainActivity_"

它表示找不到类。

我正在使用最新版本的 Gradle 和最新版本的 ActiveAndroid。

任何帮助将不胜感激。

【问题讨论】:

  • 您应该在默认配置中定义 packageName。在其他口味中,您可以覆盖它。但必须设置默认值。

标签: android-studio android-annotations


【解决方案1】:

我知道已经晚了,但它可能会对某人有所帮助。

当您修改 applicationId 时会发生这种情况。示例中提供的脚本假定您已声明“android.defaultConfig.applicationId”。在大多数情况下它为空,因此它生成了 null.R。您可以定义变量或将代码更改为以下内容:

defaultConfig {

    // Rest of Config

    javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["resourcePackageName": "<Original Package Name>"]
            }
    }
}

请注意,原始包名称应与 R 在您的活动中的位置相同。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我刚刚遇到了同样的问题,通过将packageName 添加到defaultConfig 来解决:

    示例:

    defaultConfig {
        packageName "com.example.myapp"
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    

    根据您在AndroidManifest.xml中指定的名称更改com.example.myapp

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:
      android {
          compileSdkVersion 22
          buildToolsVersion "22.0.1"
      
          defaultConfig {
              applicationId "com.your.app"
              minSdkVersion 14
              targetSdkVersion 22
              versionCode 1
              versionName "1.0"
          }
      }
      
      buildTypes {
          release {
              minifyEnabled false
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          }
      }
      
      
      
      apt {
          arguments {
              androidManifestFile variant.outputs[0].processResources.manifestFile
              resourcePackageName android.defaultConfig.applicationId
          }
      }
      

      它对我有用。

      【讨论】:

        【解决方案4】:

        我遇到了这个问题,所以我只是删除了这一行:

        resourcePackageName android.defaultConfig.packageName
        

        它成功了。

        【讨论】:

        • 我没有删除它,而是添加了我的基本包的真实名称,例如resourcePackageName 'org.trandroid'(而不是resourcePackageName 'org.trandroid.full'
        【解决方案5】:
        apt {
            arguments {
                androidManifestFile variant.outputs[0].processResources.manifestFile
                resourcePackageName android.defaultConfig.applicationId
            }
        

        就我而言,它有效。

        【讨论】:

          【解决方案6】:

          更改清单中的 applicationId==package。 100% 成功。

          【讨论】:

            【解决方案7】:

            我遇到了同样的问题。我已将build.gralde 文件更新如下。

            对于 Java 我添加了:

            android {
                defaultConfig {
                    applicationId "<your.application.id>"
                    javaCompileOptions {
                        annotationProcessorOptions {
                            includeCompileClasspath true
                            arguments = ["resourcePackageName": android.defaultConfig.applicationId]
                            //arguments = ['androidManifestFile': variant.outputs[0].processResources.manifestFile]
                        }
                    }
                }
            }
            

            对于 Koltin 我添加了:

            kapt {
                arguments {
                    arg("resourcePackageName", android.defaultConfig.applicationId)
                    //arg("androidManifestFile", variant.outputs[0]?.processResources?.manifestFile)
                }
                correctErrorTypes = true // add this if you use data binding
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-10
              • 1970-01-01
              • 2019-05-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多