Android Annotations and new Android Databinding
Asked Answered
J

1

6

When I activate the androidannotations apt line in my gradle build file, the data binding classes are no longer recognized. When I just comment out the "apt .." line then everything compiles again.

Could it be that somehow the android-annotions prevents the databinding apt from being executed? Or is there a wrong execution order?

Regards, Thomas

Error from gradle build: $ gradle clean build

:app:clean
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidDatabindingLibrary10Rc1Library
:app:prepareComAndroidSupportAppcompatV72300Library
:app:prepareComAndroidSupportCardviewV72300Library
:app:prepareComAndroidSupportDesign2300Library
:app:prepareComAndroidSupportMultidex101Library
:app:prepareComAndroidSupportRecyclerviewV72300Library
:app:prepareComAndroidSupportSupportV42300Library
:app:prepareComJourneyappsZxingAndroidEmbedded302Library
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources
:app:mergeDebugResources
AAPT: /opt/projects/erp/android/inventory-app/app/src/main/res/drawable-mdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /opt/projects/erp/android/inventory-app/app/src/main/res/drawable-xhdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT: /opt/projects/erp/android/inventory-app/app/src/main/res/drawable-hdpi/ic_drawer.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
:app:processDebugManifest
:app:dataBindingLayoutsProcessDebugResources
:app:processDebugResources
:app:dataBindingInfoClassProcessDebugResources
:app:generateDebugBuildConfig
:app:generateDebugSources
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJavaWithJavac
/opt/projects/erp/android/inventory-app/app/src/main/java/org/moserp/MainActivity.java:37: error: package org.moserp.inventory.databinding does not exist
import org.moserp.inventory.databinding.IncludeFacilityViewBinding;
                                    ^
/opt/projects/erp/android/inventory-app/app/src/main/java/org/moserp/MainActivity.java:48: error: cannot find symbol
    private IncludeFacilityViewBinding includeFacilityViewBinding;

...

Note: Resolve log file to /opt/projects/erp/android/inventory-app/app/build/generated/source/apt/androidannotations.log
Note: Initialize AndroidAnnotations 3.3.2 with options {androidManifestFile=/opt/projects/erp/android/inventory-app/app/build/intermediates/manifests/full/debug/AndroidManifest.xml, logLevel=TRACE}
Note: Start processing for 1 annotations [org.androidannotations.annotations.EActivity] on 64 elements ...
Note: AndroidManifest.xml file found with specified path: /opt/projects/erp/android/inventory-app/app/build/intermediates/manifests/full/debug/AndroidManifest.xml
Note: AndroidManifest.xml found: AndroidManifest [applicationPackage=de.moserp.inventory, componentQualifiedNames=[org.moserp.MainActivity_, ...], applicationClassName=android.support.multidex.MultiDexApplication, libraryProject=false, debugabble=false, minSdkVersion=17, maxSdkVersion=-1, targetSdkVersion=23]
error: The generated de.moserp.inventory.R class cannot be found
Note: Found Android class: android.R

build.gradle

import com.android.build.gradle.tasks.Dex

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'com.neenbedankt.android-apt'

def AAVersion = '3.3.2'

android {
    compileSdkVersion 23
    buildToolsVersion "23"

    defaultConfig {
        applicationId "de.moserp.inventory"
        minSdkVersion 17
        targetSdkVersion 23
        versionName "1.0"
        versionCode 1
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        preDexLibraries = false
    }
    project.tasks.withType(Dex) {
        additionalParameters=['--core-library']
    }
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/notice.txt'
    }
    lintOptions {
        abortOnError false
    }
}

apt {
    arguments {
        androidManifestFile variant.outputs[0]?.processResources?.manifestFile
    }
}

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:23.0.0'
    // UI libraries
    compile 'com.android.support:recyclerview-v7:23.0.0'
    compile 'com.android.support:cardview-v7:23.0.0'
    compile 'com.android.support:design:23.0.0'
    //compile 'com.android.support:palette-v7:23.0.0'
    //compile 'com.android.support:gridlayout-v7:23.0.0'

    // Spring and Rest
    compile('org.springframework.hateoas:spring-hateoas:0.17.0.RELEASE') {
        exclude group: '*'
    }
    compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2'

    // ZXing Scanner Lib
    compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
    compile 'com.google.zxing:core:3.2.0'

    // Frameworks - general
    apt 'com.android.databinding:compiler:1.0-rc1'
    apt "org.androidannotations:androidannotations:$AAVersion"
    compile "org.androidannotations:androidannotations-api:$AAVersion"
}

repositories {
    maven {
        url 'http://repo.spring.io/milestone'
    }

}
Joni answered 28/9, 2015 at 9:12 Comment(2)
Can you share the (reduced) project, so we can take a look?Commonwealth
Yes, here it is: github.com/thomasletsch/sample-appJoni
C
3

There are two problems with the project:

First: The applicationId is de.moserp.inventory, but the manifest package name is org.moserp.inventory. You should change it to the same, or if it is intentional, you have to directly tell AA the manifest package name:

apt {
    arguments {
        androidManifestFile variant.outputs[0]?.processResources?.manifestFile
        logLevel 'TRACE'
        resourcePackageName 'org.moserp.inventory'
    }
}

Second: You declare the original activity in the manifest, instead of the generated one. Change it to MainActivity_.

Commonwealth answered 29/9, 2015 at 19:22 Comment(1)
You are absolutely right, the changing of the applicationId to the package name fixed the problems! Very much appreciated!Joni

© 2022 - 2024 — McMap. All rights reserved.