Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Annotations and new Android Databinding

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

}
like image 696
Thomas Letsch Avatar asked Sep 28 '15 09:09

Thomas Letsch


People also ask

Is Android DataBinding deprecated?

Recently Android has announced that with Kotlin 1.4. 20, their Android Kotlin Extensions Gradle plugin will be deprecated and will no longer be shipped in the future Kotlin releases. Android Kotlin Extensions plugin brought with it two very cool features : Synthetics let you replace calls to findViewById with kotlinx.

Is DataBinding good Android?

Using data binding can lead to faster development times, faster execution times and more readable and maintained code. Android data binding generates binding classes at compile time for layouts.

What is difference between ViewBinding and DataBinding in Android?

View binding and data binding both generate binding classes that you can use to reference views directly. However, view binding is intended to handle simpler use cases and provides the following benefits over data binding: Faster compilation: View binding requires no annotation processing, so compile times are faster.

Should I use DataBinding or ViewBinding?

In short you can use ViewBinding to replace findviewbyid() effectively. If your project is however more complex and you need to add features like binding data to views, binding adapters e.t.c, use DataBinding.


1 Answers

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_.

like image 85
WonderCsabo Avatar answered Oct 16 '22 21:10

WonderCsabo