AndroidAnnotations + Android Studio - 无法找到生成的null.R类

时间:2014-03-28 15:24:31

标签: android-studio android-annotations

我根据使用最新版AndroidStudio的维基说明设置了ActiveAndroid。我正在使用产品Flavors。这是我的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时:

机器人:名称=" com.a.a.MainActivity"

机器人:名称=" com.a.a.MainActivity _"

它声明无法找到课程。

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

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:5)

我知道它很晚,但它可能对某人有帮助。

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

defaultConfig {

    // Rest of Config

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

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

希望它有所帮助!

答案 1 :(得分:4)

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

样品:

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

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

希望这有帮助。

答案 2 :(得分:4)

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
    }
}

它对我有用。

答案 3 :(得分:3)

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

resourcePackageName android.defaultConfig.packageName

并且有效。

答案 4 :(得分:2)

apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
        resourcePackageName android.defaultConfig.applicationId
    }

就我而言,它工作了。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我有同样的问题。我已经按照以下说明更新了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
}