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'
}
}
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.
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.
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.
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.
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_
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With