Giter Site home page Giter Site logo

archinamon / android-gradle-aspectj Goto Github PK

View Code? Open in Web Editor NEW
363.0 18.0 60.0 4.12 MB

gradle plug-in adding supports of AspectJ into Android project

License: Apache License 2.0

Kotlin 100.00%
gradle-plugin aspectj android java flavor jar kotlin write-aspects groovy

android-gradle-aspectj's Introduction

GradleAspectJ-Android

AspectJ Kotlin Download
Android Arsenal contributions welcome GitHub license

A Gradle plugin which enables AspectJ for Android builds. Supports writing code with AspectJ-lang in .aj files and in java-annotation style. Full support of Android product flavors and build types. Support Kotlin, Groovy, Scala and any other languages that compiles into java bytecode.

Actual version supporting of AGP 4.1.+: com.archinamon:android-gradle-aspectj:4.3.0.

Friendly with jRebel for Android!

This plugin is completely friendly with APT (Android Annotation Processing Tools) and Retrolambda project (but Java 8 not supported in .aj files). AndroidAnnotations, Dagger are also supported and works fine.

This plugin has many ideas from the others similar projects, but no one of them grants full pack of features like this one. Nowadays it has been completely re-written using Transform API.

Key features

Augments Java, Kotlin, Groovy bytecode simultaneously!
Works with background mechanics of jvm-based languages out-of-box!
How to teach Android Studio to understand the AspectJ!
May not work properly for AS 3.0 :(

It is easy to isolate your code with aspect classes, that will be simply injected via cross-point functions, named advices, into your core application. The main idea is — code less, do more!

AspectJ-Gradle plugin provides supply of all known JVM-based languages, such as Groovy, Kotlin, etc. That means you can easily write cool stuff which may be inject into any JVM language, not only Java itself! :)

To start from you may look at my example project. And also you may find useful to look at reference manual of AspectJ language and simple code snippets. In case aspectj-native not supported by Android Studio (even with IDE-plugin it's using is complicated), you may write a java-classes with aspectj annotations.

Two simple rules you may consider when writing aspect classes.

  • Do not write aspects outside the src/$flavor/aspectj source set! These aj-classes will be excluded from java compiler.
  • Do not try to access aspect classes from java/kotlin/etc. In case java compiler doesn't know anything about aspectj, it will lead to compile errors on javac step.

These rules affects only in case you're writing in native aj-syntax. You may write aspects in java-annotation style and being free from these limitations.

Usage

First add a maven repo link into your repositories block of module build file:

mavenCentral()

Don't forget to add mavenCentral() due to some dependencies inside AspectJ-gradle module.

Add the plugin to your buildscript's dependencies section:

Kotlin
classpath("com.archinamon:android-gradle-aspectj:4.3.0")
Groovy
classpath 'com.archinamon:android-gradle-aspectj:4.3.0'

Apply the `aspectj` plugin:
Kotlin
plugins {
    id("com.android.application")
    id("com.archinamon.aspectj")
}
Groovy
plugins {
    id 'com.android.application'
    id 'com.archinamon.aspectj'
}

Now you can write aspects using annotation style or native (even without IntelliJ IDEA Ultimate edition). Let's write simple Application advice:
import android.app.Application;
import android.app.NotificationManager;
import android.content.Context;
import android.support.v4.app.NotificationCompat;

aspect AppStartNotifier {

    pointcut postInit(): within(Application+) && execution(* Application+.onCreate());

    after() returning: postInit() {
        Application app = (Application) thisJoinPoint.getTarget();
        NotificationManager nmng = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
        nmng.notify(9999, new NotificationCompat.Builder(app)
            .setTicker("Hello AspectJ")
            .setContentTitle("Notification from aspectJ")
            .setContentText("privileged aspect AppAdvice")
            .setSmallIcon(R.drawable.ic_launcher)
            .build());
    }
}

Tune extension

Kotlin
aspectj {
    compileTests = true // default value

    ajc = "1.9.4" // default value
    java = JavaVersion.VERSION_1_7 // default value

    /* @see Ext plugin config **/
    includeAllJars = false // default value
    includeJar.addAll(arrayOf("design", "support-v4", "dagger")) // default is empty
    excludeJar.addAll(arrayOf("support-v7", "joda")) // default is empty
    extendClasspath = true // default value

    includeAspectsFromJar.addAll(arrayOf("my-aj-logger-lib", "any-other-libs-with-aspects")) // default is empty
    ajcArgs.apply {
        add("-warn:deprecation")
        add("-referenceInfo")
    }

    weaveInfo = true // default value
    debugInfo = false // default value
    addSerialVersionUID = false // default value
    noInlineAround = false // default value
    ignoreErrors = false // default value
    
    breakOnError = true // default value
    experimental = false // default value
    buildTimeLog = true // default value

    transformLogFile = "ajc-transform.log" // default value
    compilationLogFile = "ajc-compile.log" // default value
}
Groovy
aspectj {
    dryRun false // default value
    compileTests true // default value

    ajc '1.9.4' // default value
    java = JavaVersion.VERSION_1_7 // default value

    /* @see Ext plugin config **/
    includeAllJars false // default value
    includeJar 'design', 'support-v4', 'dagger' // default is empty
    excludeJar 'support-v7', 'joda' // default is empty
    extendClasspath true // default value

    includeAspectsFromJar 'my-aj-logger-lib', 'any-other-libs-with-aspects'  // default is empty
    ajcArgs << '-referenceInfo' << '-warn:deprecation'

    weaveInfo true // default value
    debugInfo false // default value
    addSerialVersionUID false // default value
    noInlineAround false // default value
    ignoreErrors false // default value
    
    breakOnError true // default value
    experimental false // default value
    buildTimeLog true // default value

    transformLogFile 'ajc-transform.log' // default value
    compilationLogFile 'ajc-compile.log' // default value
}

Note that you may not include all these options!

All the extension parameters are have default values (all of them are described above, except of includeJar/Aspects/ajcArgs options). So no need to define them manually.

  • compileTests Workaround to disable compileDebugUnitTestAspectJ for unitTest variant

  • ajc Allows to define the aspectj runtime jar version manually (1.8.12 current)

  • java What jvmTarget will ajc use to compile bytecode into

  • extendClasspath Explicitly controls whether plugin should mutate the classpath with aspectj-runtime itself

  • includeAllJars Explicitly include all available jar-files into -inpath to proceed by AJ-compiler

  • includeJar Name filter to include any jar/aar which name or path satisfies the filter

  • excludeJar Name filter to exclude any jar/aar which name or path satisfies the filter

  • includeAspectsFromJar Name filter to include any jar/aar with compiled binary aspects you wanna affect your project

  • ajcExtraArgs Additional parameters for aspectj compiler

  • weaveInfo Enables printing info messages from Aj compiler

  • debugInfo Adds special debug info in aspect's bytecode

  • addSerialVersionUID Adds serialVersionUID field for Serializable-implemented aspect classes

  • noInlineAround Strict ajc to inline around advice's body into the target methods

  • ignoreErrors Prevent compiler from aborting if errors occurs during processing the sources

  • breakOnError Allows to continue project building when ajc fails or throws any errors

  • experimental Enables experimental ajc options: -XhasMember and -Xjoinpoints:synchronization,arrayconstruction. More details in issue #18

  • buildTimeLog Appends a BuildTimeListener to current module that prints time spent for every task in build flow, granularity in millis

  • transformLogFile Defines name for the log file where all Aj compiler info writes to, new separated for Transformer

  • compilationLogFile Defines name for the log file where all Aj compiler info writes to, new separated for CompileTask

Extended plugin config

Kotlin
plugins {
    id("com.android.application")
    id("com.archinamon.aspectj-ext")
}
Groovy
plugins {
    id 'com.android.application'
    id 'com.archinamon.aspectj-ext'
}

Ext config: - allows usage of `includeJar` and `includeAllJars` parameters, with workaround to avoid `Multiple dex files exception` - supports `multiDex` - supports `Instrumented tests`

Currently it has some limitations:

  • InstantRun must be switched off (Plugin detects IR status and fails build if IR will be found).

Provider plugin config

Kotlin
plugins {
    id("com.android.application")
    id("com.archinamon.aspectj-provides")
}
Groovy
plugins {
    id 'com.android.application'
    id 'com.archinamon.aspectj-provides'
}

Plugin-provider may be useful for that cases when you need to extract aspect-sources into separate module and include it on demand to that modules where you only need it. Therefor this behavior will save you build-time due to bypassing aspectj-transformers in provide-only modules.

You ain't limited to describe as much provider-modules as you need and then include them using includeAspectsFromJar parameter in the module which code or dependencies you may want to augment.

With example project you could learn how to write such provider-module.

DryRun plugin config

Kotlin
plugins {
    id("com.android.application")
    id("com.archinamon.aspectj-dryRun")
}
Groovy
plugins {
    id 'com.android.application'
    id 'com.archinamon.aspectj-dryRun'
}

Disables aspectj-compiler and transformation task for the hole project.

Working tests

Kotlin
plugins {
    id("com.android.application")
    id("com.archinamon.aspectj-junit")
}
Groovy
plugins {
    id 'com.android.application'
    id 'com.archinamon.aspectj-junit'
}

Test scope overloads JUnit compilation flow with AJC instead of JavaC. So any aspects has been written within `test` directory will be compiled with all java sources and aspects will weave them if need.

ProGuard

Correct tuning will depends on your own usage of aspect classes. So if you declares inter-type injections you'll have to predict side-effects and define your annotations/interfaces which you inject into java classes/methods/etc. in proguard config.

Basic rules you'll need to declare for your project:

-adaptclassstrings
-keepattributes InnerClasses, EnclosingMethod, Signature, *Annotation*

-keepnames @org.aspectj.lang.annotation.Aspect class * {
    ajc* <methods>;
}

If you will face problems with lambda factories, you may need to explicitly suppress them. That could happen not in aspect classes but in any arbitrary java-class if you're using Retrolambda. So concrete rule is:

-keep class *$Lambda* { <methods>; }
-keepclassmembernames public class * {
    *** lambda*(...);
}

Changelog

4.2.1 -- Improve jar archives

  • better api for AGP 4.0.+;
  • fix java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/R$drawable;

4.2.0 -- Support AGP 4.0.+

  • this release supports agp 4.0.+ but earlier versions not;

4.1.0 -- Support AGP 3.6.+

  • this release supports agp 3.6.+ but earlier versions not;

4.0.1 -- Fix synchronous run

  • fixed async running of ajc (which is not supporting async compiling);

4.0.0 -- Support AGP 3.5.+

  • this release supports agp 3.5.+ but earlier versions not;

3.4.5 -- Fix for Gradle 6.0

  • create task explicitly instead of project.task();

3.4.3 -- Once more fix :(

  • hotfixed provides plugin mode — transformation should not starts;

3.4.2 -- Hotfix provides

  • hotfixed provides plugin mode — transformation should not starts;

3.4.1 -- Fix provides

  • fixed aspectj-provides plugin mode — do not cleanup destination dir;

3.4.0 -- Better DryRun mode

  • fixed support of 3.5.0 Android Gradle Plugin — thanks to @superafroman;
  • remove aj runtime check;
  • standalone DryRun plugin mode to avoid transformation and compilation steps;

3.3.12 -- Fix 'Dependencies resolution fail'

  • fixed rare bug — 'failed to attach configuration after dependencies has been resolved';
  • better properties extraction within kts script;

3.3.11 -- Fix legacy AGP support

  • better legacy support — fixed AGP 3.1.4 compatibility;

3.3.10 -- Update AJC

  • bump aspectj compiler version;

3.3.9 -- Small fix dryRun

  • to prevent aj transformation with empty outputs — use -PdryRunAjc=true;

3.3.8 -- Fix unitTest variant

  • added workaround to disable unitTest aj compile step if classpath is broken;

3.3.7 -- Fixes ext plugin

  • fixed aspectj-ext plugin to work properly with transform api;
  • added transform output dir to inPath;
  • fix ajc inPath for compilation step;

3.3.6 -- Fixes

  • fix dryRun option for transformer;
  • better readme;

3.3.5 -- Dry run

  • fix classpath resolving;
  • implement dry run to disable compiler/transformation in gradle;

3.3.3 -- Support AGP 3.3.+

  • fixed support AGP 3.3.+ api;
  • added legacy compatibility fallbacks;
  • added java bytecode target version for ajc;
  • upgrade bundled ajc runtime and tools jars to 1.9.2;
  • upgrade default aspectj runtime library to 1.9.2;

3.3.0 -- JUnit tests support

  • implementing com.archinamon.aspectj-junit plugin supporting weaving unit tests;
  • com.archinamon.aspectj-test has been removed as not working legacy sh$t;
  • updated android-gradle-plugin to 3.2.0 inside (might be a breaking change);
  • migration to Kotlin-DSL;
  • new plugin tests allows to check does it weaves android's junit source code;

3.2.0 -- Gradle 3.0.0 support

  • added support of stable gradle plugin 3.0.0;
  • updated internal ajc and provided aj runtime library versions to the latest 1.8.12;

3.1.1 -- Useful improvements

  • added an extension trigger to append BuildTime logger for current module;
  • back from grave — added exclude-filter for aspectj-ext plugin;

3.1.0 -- Provider

  • implemented provides plugin split to effectively extract aspects to external/sub modules;
  • small code improvements and cleanups;

3.0.3 -- Minor fixes

  • fixed aar detecting mechanism;
  • registered plugin in mavenCentral!

3.0.0 -- Grand refactoring in Kotlin

  • all groovy classes was obsolete;
  • new code-base in Kotlin 1.1.1 stable;

2.4.3 -- Hot-fixed two-step compilation

  • compiled in first step aspect classes have not been copied to final output;

2.4.2 -- Hot-fix

  • fixed missed variable;
  • fixed imports;

2.4.0 -- Added aspectj-ext plugin

  • includeJar parameter now able to read aar's manifest file to exactly detect required library;
  • com.archinamon.aspectj-ext plugin added to properly weave inpath jars, in this mode InstantRun doesn't allowed;
  • small fixes and package/name refactoring;

2.3.1 -- New two-step build mechanic

  • renamed extension parameter: ajcExtraArgs -> ajcArgs;
  • split parameter: logFileName -> [transformLogFile, compilationLogFile];
  • added separate compile task to build all sources under /aspectj folder;
  • aj-transformer now looks into /build/aspectj/$variantName folder for aspects class';
  • updated ajc-version to 1.8.10;
  • fixed issue with missing error printing to Messages when failing;
  • added inpath/aspectpath clearance before emitting transform inputs (by @philippkumar);

2.3.0 -- Major fixes

  • InstantRun support;
  • fails androidTest hot launch;
  • ZipException within augmenting third party libraries via AspectJ;
  • more clear logging and errors emitting;

2.2.2 -- Improvements

  • fixed build config namings;
  • re-designed work with log file and errors handling;
  • pretty formatting ajc arguments for build stdout;
  • implemented handling custom ajc arguments via build.gradle config;

2.2.1 -- Hot-fix

  • fixed illegal 'return' statement;
  • change included in updated 2.2.0 artifacts;

2.2.0 -- Ajc fixes and improvements

  • fixed problem with -aspectPath building project with multidex;
  • fixed scope problems with Transform API;
  • removed Java 8 support;
  • implemented clear and easy way to attach compiled aspects via jar/aar;
  • implemented more easy way to weave by aspects any library (jar/aar);
  • implemented breaking build on errors occurring to prevent runtime issues;
  • implemented ajc experimental features: -XhasMember and -Xjoinpoints:synchronization,arrayconstruction;
  • implemented more logic way to detect the plugin placement in build file to support retrolambda correctly;
  • code cleanups and improvements;

2.1.0 -- Transform api fix

  • finally fixed errors with multidex;
  • fixed jar merge errors;
  • fixed errors with new gradle plugin;
  • fixed Java 8 support;
  • fixed Retrolambda compatibility;

2.0.4 -- Small fix

  • fixed error with mandatory default aj-directory;

2.0.3 -- Gradle instant run

  • merged pull request with the latest gradle plugin update;
  • fixed errors after update;

2.0.2 -- Fixed filters

  • problem with empty filters now fixed;

2.0.1 -- Hotfix :)

  • proper scan of productFlavors and buildTypes folders for aj source sets;
  • more complex selecting aj sources to compile;
  • more precise work with jars;
  • changed jar filter policy;
  • optimized weave flags;

2.0.0 -- Brand new mechanics

  • full refactor on Transform API;
  • added new options to aspectj-extension;

1.3.3 -- Rt qualifier

  • added external runtime version qualifier;

1.3.2 -- One more fix

  • now correctly sets destinationDir;

1.3.1 -- Hot-fixes

  • changed module name from AspectJ-gradle to android-gradle-aspectj;
  • fixed couple of problems with test flavours processing;
  • added experimental option: weaveTests;
  • added finally post-compile processing for tests;

1.3.0 -- Merging binary processing and tests

  • enables binary processing for test flavours;
  • properly aspectpath and after-compile source processing for test flavours;
  • corresponding sources processing between application modules;

1.2.1 -- Hot-fix of Gradle DSL

  • removed unnecessary parameters from aspectj-extension class;
  • fixed gradle dsl-model;

1.2.0 -- Binary weaving

  • plugin now supports processing .class files;
  • supporting jvm languages — Kotlin, Groovy, Scala;
  • updated internal aj-tools and aj runtime to the newest 1.8.9;

1.1.4 -- Experimenting with binary weaving

  • implementing processing aars/jars;
  • added excluding of aj-source folders to avoid aspects re-compiling;

1.1.2 -- Gradle Instant-run

  • now supports gradle-2.0.0-beta plugin and friendly with slicer task;
  • fixed errors within collecting source folders;
  • fixed mixing buildTypes source sets;

1.1.1 -- Updating kernel

  • AspectJ-runtime module has been updated to the newest 1.8.8 version;
  • fixed plugin test;

1.1.0 -- Refactoring

  • includes all previous progress;
  • updated aspectjtools and aspectjrt to 1.8.7 version;
  • now has extension configuration;
  • all logging moved to the separate file in app/build/ajc_details.log;
  • logging, log file name, error ignoring now could be tuned within the extension;
  • more complex and correct way to detect and inject source sets for flavors, buildTypes, etc;

1.0.17 -- Cleanup

  • !!IMPORTANT!! now correctly supports automatically indexing and attaching aspectj sources within any buildTypes and flavors;
  • workspace code refactored;
  • removed unnecessary logging calls;
  • optimized ajc logging to provide more info about ongoing compilation;

1.0.16 -- New plugin routes

  • migrating from corp to personal routes within plugin name, classpath;

1.0.15 -- Full flavor support

  • added full support of build variants within flavors and dimensions;
  • added custom source root folder -- e.g. src/main/aspectj/path.to.package.Aspect.aj;

1.0.9 -- Basic flavors support

  • added basic support of additional build variants and flavors;
  • trying to add incremental build //was removed due to current implementation of ajc-task;

1.0 -- Initial release

  • configured properly compile-order for gradle-Retrolambda plugin;
  • added roots for preprocessing generated files (needed to support Dagger, etc.);
  • added MultiDex support;

Known limitations

  • You can't speak with sources in aspectj folder due to excluding it from java compiler;
  • Doesn't support gradle-experimental plugin;

All these limits are fighting on and I'll be glad to introduce new build as soon as I solve these problems.

License

Copyright 2015 Eduard "Archinamon" Matsukov.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

android-gradle-aspectj's People

Contributors

archinamon avatar ashaparekh avatar badya avatar divankov avatar eyedol avatar jdappel avatar superafroman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-gradle-aspectj's Issues

no more weaveTests

There is no weaveTests flag any more at the latest build. Is it possible to use AspectJ at unit tests ?

Android Gradle Plugin 3.0.0 and Gradle 4.1 JarMerger Class not Found

Hi,

Android Gradle Plugin: 3.0.0
Gradle Version: 4.1
GradleAspectJ-Android: 3.1.1

Task that is failing: transformClassesWithAspectjForDebug

Error:

Caused by: java.lang.ClassNotFoundException: com.android.build.gradle.internal.transforms.JarMerger

The android gradle plugin changed and introduced breaking changes, including a different dsl.

Is there a workaround for this issue? Is Android plugin 3.0.0 on the road map?

Thanks!

Support for Gradle plugin 2.0

Seems like aspectj plugin doesn't work with new gradle plugin. I'm using 2.0.0-beta2 with AS 2.0 preview9
I've got compile time error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithInstantRunSlicerForDebug'.
> java.lang.ArrayIndexOutOfBoundsException (no error message)

here is my simple aspect

  @DeclareMixin(value = "@ds.weavingtest.Dagger *")
    public AspectIntefrace declareStuff(final Object instance) {
        return new AspectIntefrace() {
            @Override
            public void showToast() {
                Toast.makeText(((Context) instance), "hello", Toast.LENGTH_SHORT).show();
            }
        };
    }

ps: i've disabled InstantRun and it compiles without errors now. But my mixin doesnt apply to the class so it is crashes on class casting stage:

((AspectIntefrace) this).showToast();

This code works ok on gradle plugin 1.5.0

Compile error with Gradle 4.0

While switching over to Android Studio 3.0, which uses Gradle 4.0 compiling fails with the following setup.

  • Android application depends on Java-library module
  • Android application has "apply plugin: 'com.archinamon.aspectj'"

As far as I understand Gradle 4.0 does not build .jar files anymore to speed up builds. Instead it works on .class files of dependencies directly.

The com.archinamon.aspectj plugin depends on the jar files, which makes the build (actually already the configuration phase) fail.

Example project: https://github.com/HaukeRa/Archinamon-GradleAspectJ-Android-FailureTestProject

com.archinamon.aspectj-ext and includeAllJars app crashing on startup

When running attached sample app with com.archinamon.aspectj-ext and includeAllJars = true the app is crashing on startup in simulator (Genymotion API 23) with the error below.

When running with com.archinamon.aspectj-ext plug-in disabled the app starts just fine.

Please note that application main activity is not implemented in main app modules, but in in the lib used by the library. Maybe it is related to multiDex treatment.

Please also find attached small Android Studio project with 2 modules app that simulates the issue.

test-project-for-archinamon.zip

--------- beginning of crash 05-20 04:20:54.191 23882-23882/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.mycompany.myapp.non.store.id, PID: 23882 java.lang.RuntimeException: Unable to instantiate application com.mycompany.myapp.MyAppMyCompanyApplication: java.lang.ClassNotFoundException: Didn't find class "com.mycompany.myapp.MyAppMyCompanyApplication" on path: DexPathList[[zip file "/data/app/com.mycompany.myapp.non.store.id-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mycompany.myapp.non.store.id-2/lib/x86, /vendor/lib, /system/lib]] at android.app.LoadedApk.makeApplication(LoadedApk.java:578) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mycompany.myapp.MyAppMyCompanyApplication" on path: DexPathList[[zip file "/data/app/com.mycompany.myapp.non.store.id-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mycompany.myapp.non.store.id-2/lib/x86, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at android.app.Instrumentation.newApplication(Instrumentation.java:981) at android.app.LoadedApk.makeApplication(LoadedApk.java:573) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680)  at android.app.ActivityThread.-wrap1(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.mycompany.myapp.non.store.id-2/base.apk at dalvik.system.DexFile.openDexFileNative(Native Method) at dalvik.system.DexFile.openDexFile(DexFile.java:295) at dalvik.system.DexFile.<init>(DexFile.java:80) at dalvik.system.DexFile.<init>(DexFile.java:59) at dalvik.system.DexPathList.loadDexFile(DexPathList.java:279) at dalvik.system.DexPathList.makePathElements(DexPathList.java:248) at dalvik.system.DexPathList.<init>(DexPathList.java:120) at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48) at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:65) at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:58) at android.app.LoadedApk.getClassLoader(LoadedApk.java:376) at android.app.LoadedApk.makeApplication(LoadedApk.java:568) ... 9 more Suppressed: java.lang.ClassNotFoundException: com.mycompany.myapp.MyAppMyCompanyApplication at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 12 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

Improvements to plugin lifecycle

Preconditions:
I have a project with AspectJ plugin applied in my app/build.gradle:

classpath "com.github.Archinamon:GradleAspectJ-Android:3.0.0"

I included this dependency right before #41 fix
It seems that my gradle caches haven't updated to new version after release, so there've been an NPE problem while gradle configured my project, and while using .jar build from sources everything was OK.

Problems:
Even @Archinamon added a check to com.archinamon.utils.AarExploringKt#findPackageNameIfAar:

if (!input.exists()) return "[empty]"

Using com.archinamon.api.AspectJCompileTask.Builder#findCompiledAspectsInClasspath before changing the classpath seems creepy %)

I also think that removing

project.dependencies.add("compile", "org.aspectj:aspectjrt:${settings.ajc}")

from com.archinamon.plugin.PluginSetupKt#configProject and including an update about this dependency into README will be better.

Suggestion:
Even if fix is very small it is better to change version to minor update like 3.0.0 -> 3.0.1 - just to be shure that caches won't stuck.

Cannot use the 1.3.1 version of aspectj plugin

Currently it is not possible to use the previous version of the plugin, compilation fails with :

Error:Could not find com.archinamon:android-gradle-aspectj:1.3.1.
Searched in the following locations:
    file:/C:/Program Files/Android/Android Studio/gradle/m2repository/com/archinamon/android-gradle-aspectj/1.3.1/android-gradle-aspectj-1.3.1.pom
    file:/C:/Program Files/Android/Android Studio/gradle/m2repository/com/archinamon/android-gradle-aspectj/1.3.1/android-gradle-aspectj-1.3.1.jar
    https://jcenter.bintray.com/com/archinamon/android-gradle-aspectj/1.3.1/android-gradle-aspectj-1.3.1.pom
    https://jcenter.bintray.com/com/archinamon/android-gradle-aspectj/1.3.1/android-gradle-aspectj-1.3.1.jar
    https://github.com/Archinamon/GradleAspectJ-Android/raw/master/com/archinamon/android-gradle-aspectj/1.3.1/android-gradle-aspectj-1.3.1.pom
    https://github.com/Archinamon/GradleAspectJ-Android/raw/master/com/archinamon/android-gradle-aspectj/1.3.1/android-gradle-aspectj-1.3.1.jar

The newest version with the new api seems to be incompatible with some projects, it would be good to have the 1.3.1 version still available and possible to use (maybe kept on the different branch)

Could not find com.archinamon:Aspectj-gradle:1.1.2

Hi!!! When i try to use your plugin it's happen.

Error:Could not find com.archinamon:AspectJ-gradle:1.1.2.
Searched in the following locations:
    file:/opt/android-studio/gradle/m2repository/com/archinamon/AspectJ-gradle/1.1.2/AspectJ-gradle-1.1.2.pom
    file:/opt/android-studio/gradle/m2repository/com/archinamon/AspectJ-gradle/1.1.2/AspectJ-gradle-1.1.2.jar
    https://repo1.maven.org/maven2/com/archinamon/AspectJ-gradle/1.1.2/AspectJ-gradle-1.1.2.pom
    https://repo1.maven.org/maven2/com/archinamon/AspectJ-gradle/1.1.2/AspectJ-gradle-1.1.2.jar
Required by:
    AspectjTest6:app:unspecified

Error:Could not find com.archinamon:AspectJ-gradle:1.0.15.

Hi I follow your instructions but I get the error message :

Error:Could not find com.archinamon:AspectJ-gradle:1.0.15.
Searched in the following locations:
    file:/C:/Program Files/Android/Android Studio/gradle/m2repository/com/archinamon/AspectJ-gradle/1.0.15/AspectJ-gradle-1.0.15.pom
    file:/C:/Program Files/Android/Android Studio/gradle/m2repository/com/archinamon/AspectJ-gradle/1.0.15/AspectJ-gradle-1.0.15.jar
    https://jcenter.bintray.com/com/archinamon/AspectJ-gradle/1.0.15/AspectJ-gradle-1.0.15.pom
    https://jcenter.bintray.com/com/archinamon/AspectJ-gradle/1.0.15/AspectJ-gradle-1.0.15.jar
    https://github.com/Archinamon/GradleAspectJ-Android/raw/master/com/archinamon/AspectJ-gradle/1.0.15/AspectJ-gradle-1.0.15.pom
    https://github.com/Archinamon/GradleAspectJ-Android/raw/master/com/archinamon/AspectJ-

Error while building using android gradle plugin 2.5.0-alpha-preview-01

Hi!
I have tried to run preemptive compatibility testing with

  • android gradle plugin 2.5.0-alpha-preview-01
  • gradle-3.5
  • GradlewAspectJ plugin 3.0.2

(More details here and here)
And got the error running, for instance, gradlew help:

A problem occurred configuring project ':Demo'.
Failed to notify project evaluation listener.
com.android.build.gradle.internal.scope.VariantScope.getInstantRunBuildContext()Lcom/android/build/gradle/internal/incremental/InstantRunBuildContext;

Compatibility with ButterKnife

Needs to remove wrong generated files destination (now puts them into the project's root) and setup properly dest-dir.

Tests source sets

I wrote a small android library based on AspectJ, along with some unit tests but running ./gradlew library:check simply fails because none of my tests have been weaved: I can clearly see the AJC compiler running twice (on sourceSets.main, then on sourceSets.test).

On a previous Java projects, I had the same problem on that plugin, and it was easily solved by declaring: testAspectpath sourceSets.main.output to my dependencies.

Your plugin is missing a way to instruct him to include the main source sets.

Migrate to Kotlin instead of Groovy

In groovy it's hard to work with dynamic contexts and Android Studio supports groovy wierd, so it's better to re-write plugin in Kotlin to make easier further development.

Experiencing troubles with includeAspectsFromJar

Looks like this cleanup commit broke proper plugin execution
55bbece

I have performed debugging around def isFilterMatched(String str, List filters, FilterPolicy filterPolicy) execution. Appears it returns false even if within
for (String s : filters) { if (isContained(str, s)) { true; } }
isContained returns true. Possibly because of enclosing for loop. Here is a discussion on the same problem.

Can this be used outside of Android projects?

This looks like the only complete AspectJ plug-in for Gradle that supports compiling *.aj separately from Java. I was wondering if there is any problem or drawback to using this project outside of an Android Gradle project (for example, Spring).

Doesn't work with Android Studio 3.0

I'm using Android Studio 3.0.0-beta7 and the code has an annotation style aspect in it.

The app compiled but was not able to run (had a ClassNotFoundException on the application class, even though that class was not involved in the weaving). I'm not sure any weaving occurred anyway.

Had a look at at issue 55 regarding Gradle 4. So I went back to Android Studio 2.3, but with the gradle wrapper updated to Gradle 4.1. That worked fine, so I suspect the problem is actually with the android gradle plugin 3.0.

Please note this was tested with an annotation style aspect, haven't tried with aj file.

Not working with android studio 2.2

When using the latest stable Android Studio 2.2 with gradle plugin 2.2.0 compilation fails with the following error :

Error:Cause: com.android.build.gradle.AppPlugin cannot be cast to groovy.lang.GroovyObject

Build failen in case of a lint error

The following error stoped a build

"XXX-1.13.jar [error] can't determine implemented interfaces of missing type org.apache.http.client.methods.HttpPost
when weaving type XXX$XXX
when weaving classes
when weaving
when batch building BuildConfig[null] #Files=0 AopXmls=#0
[Xlint:cantFindType]
(no source information available)
[Xlint:cantFindType]"

It seems like an issue in the AJ compiler which could not find a type from an external lib used in my class.

GradleAspectJ-Android not working within my app

Hi I'm on Mac OS X 10.12.6 with Android Studio 2.3.3 and trying to write my own trace functionality so that I can see all of my app's method calls with arguments on Android and stream them to my computer with adb logcat. This trace will give me a broad view of the projects I work on to cut through callback hell in Android API.

I tried your example app at https://github.com/Archinamon/AspectJExampleAndroid and it worked (after many blind alleys with AppMon, Frida, etc) thank you for that!

I've spent many days searching the web and as far as I can tell, your GradleAspectJ-Android library is the only one that provides a working example for catching all app method calls using aspectj on Android without having to annotate every method.

I even managed to strip out the kotlin, groovy, proguard, dagger and annotion stuff, so it simply has these aspectj hooks in Profiler and MyProfilerImpl:

before(): catchAny() {
    writeEnterTime(thisJoinPointStaticPart);
}

after(): catchAny() {
    writeExitTime(thisJoinPointStaticPart);
}

I left me.tatarka.retrolambda in the project because I wasn't sure if it was required for detecting anonymous classes (which I use in place of anonymous methods for now).

However, a few things:


Your AppStartNotifier never gets called if I create AspectJExampleAndroid/app/src/main/aspectj/com/archinamon/xpoint/AppStartNotifier.aj with:

import android.app.Application;
import android.app.NotificationManager;
import android.content.Context;
import android.support.v4.app.NotificationCompat;

aspect AppStartNotifier {

	pointcut postInit(): within(Application) && execution(* Application.onCreate());

	after() returning: postInit() {
		Application app = (Application) thisJoinPoint.getTarget();
		NotificationManager nmng = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
		nmng.notify(9999, new NotificationCompat.Builder(app)
			.setTicker("Hello AspectJ")
			.setContentTitle("Notification from aspectJ")
			.setContentText("privileged aspect AppAdvice")
			.setSmallIcon(R.drawable.ic_launcher)
			.build());
	}
}

You can try it yourself (I don't know if it's not detecting the Application.onCreate() etc). Which means I have no starting point for writing my own aspectj code.


Also, I've spent 2 days so far trying to copy your build.gradle settings to my app and no matter how hard I try, it never calls my Profiler or MyProfilerImpl. I'm pretty sure I've nested it properly in src/my/app/id/aspectj but I can't get it to work. Without a better understanding of how the ajc call works, how aspectj is detecting the app's methods, and how that gets called from gradle, there's simply no further I can go with this.


I even tried building issue #12 https://github.com/ardmn/TestAspectJApplication but no matter how hard I try, it no longer builds and runs as of Android Studio 2.3.3. If someone can fork that somewhere and get it working, that might give me a starting point.


So without a minimalist app containing an Empty Activity, Basic Activity (or some other example from the Android Studio project stationary) with the addition of your library and a single aspectj example that demonstrates detecting the app's methods without annotations, developers are going to have a hard time integrating your work. There are simply too many permutations to explore if it doesn't work.

I'm unable to post my app to GitHub, but do you have any suggestions I can try to show:

  • That my Profiler AspectJ code is compiling and running correctly?
  • A list of the app's methods collected by AspectJ, or proof that they are being detected?

Here is a minimal AspectJ method autodetection example, forked from yours with the above steps applied https://github.com/zmorris/AspectJExampleAndroid and even though it works, I can't get the same build.gradle settings to work within my app.

Thanks in advance for any help you can provide!

aspects not work for me

Hello. I'm new in AOP and your plugin is the first try to use AspectJ. I do all like in your guide but not see that my aspect work .

I have TestAspectJ.aj file in ...\app\src\main\aspectj\com\example\aspectj :

package com.example.aspectj;

aspect TestAspectJ{

     pointcut  helloAscpectJ(): execution ( * *(..) );

     before():helloAscpectJ()
     {
        System.out.println("testAspectJ hello");
     }
}

plugin settings:

aspectj {
    binaryWeave true
    weaveTests false
    exclude "com.example.aspectj"
    weaveInfo true
    addSerialVersionUID true
    ignoreErrors true
}

In android studio "Android monitor" window I do not see any messages like "testAspectJ hello" when use my andorid app.

Getting classpath error: unable to find org.aspectj.lang.JoinPoint (check that aspectjrt.jar is in your classpath) when running instrumentation tests

I'm getting this error when I run instrumentation tests using the plugin. Also happens in example project:

classpath error: unable to find org.aspectj.lang.JoinPoint (check that aspectjrt.jar is in your classpath)

Test:

package com.archinamon.example;

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

// AspectJExampleAndroid/app/src/androidTest/java/com/archinamon/example/ApplicationTest.java
@RunWith(AndroidJUnit4.class)
public class ApplicationTest {

  @Rule
  public ActivityTestRule<MainActivity> mainActivityActivityTestRule = new ActivityTestRule<>(MainActivity.class);

  @Test
  public void emptyTest() {
    System.out.println("Dummy test");
  }
}

Switched off augmenting of jars/aars/subprojects

I had to make this option off for complete support of multidex and retrolambda with transform API.
If you really need this option, please take previous releases.

I'll work to discover the way of implementing this feature in future.

ZipException: duplicate entry: android/support/v4/BuildConfig.class

Got this error on the latest release 2.2.2

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v4/BuildConfig.class

on attempt to weave support library.
Configuration:
`aspectj {
ajc '1.8.9'

includeJar 'support-v4'

weaveInfo true
debugInfo false
addSerialVersionUID false
noInlineAround false
ignoreErrors false

breakOnError true
experimental false

logFileName 'ajc-details.log'

}`

Have tried several cleans. Works great without includeJar directive.

Any ideas about how I can overcome this issue?

Aspect update only does not result in weave

Hi,

Thanks for the great plugin! I really like working with it.

I have a question though. When I only make some changes to an Aspect *.aj, then the changes don't get woven when I rebuild my app. The transformClassesWithAspectj* task doesn't get executed because it is marked UP-TO-DATE.

My guess would be that this is because the transformClassesWithAspectj* task has Java class files defined as an input. Since no Java source changed, no new Java class files were generated, as a result the transformClassesWithAspectj* task is marked UP-TO-DATE and skipped.

Is this correct? If so, what do you think is the fastest way to make sure the Aspect changes are applied? Running clean before each assembleDebug|Release run works, but makes the process quite slow.

Cheers,

Wijnand

Proguard: the input doesn't contains any classes

Using 2.01:

ajc args: [-encoding, UTF-8, -source, 1.7, -target, 1.7, -d, /home/renaud/Workspace/***/app/build/intermediates/transforms/aspectj/debug/folders/1/1f/aspectj, -bootclasspath, /home/renaud/Android/Sdk/platforms/android-24/android.jar, -classpath, /home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/logging-interceptor/3.4.1/381fc1096ba65040d8e80ea43b2e1d9bad02345e/logging-interceptor-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava-async-util/0.21.0/46d17bf13427f275c25c22eaccbfb4a8da1da85a/rxjava-async-util-0.21.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-applinks/1.4.0/8ad21bf21784dacce5f2043afb97218cc377e835/bolts-applinks-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.8.0/45b426f7796b741035581a176744d91090e2e6fb/jackson-annotations-2.8.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/frankiesardo/icepick/3.2.0/5ab94f3bba3f9315532eb1ca5547d120c4f71dae/icepick-3.2.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.8.1/fd13b1c033741d48291315c6370f7d475a42dccf/jackson-core-2.8.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.android.databinding/baseLibrary/2.1.2/d0395908c940f4171fb024435b25f7458c1147f3/baseLibrary-2.1.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.leakcanary/leakcanary-analyzer/1.4-beta2/449777cd466ac0a16f7e8d0dc508e70e2cdd13a9/leakcanary-analyzer-1.4-beta2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato/static-maps-api/1.0.2/7f40c64e6d1b1e96797fd13e4b8e5a4872d629b/static-maps-api-1.0.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/retrofit/2.1.0/2de7cd8b95b7021b1d597f049bcb422055119f2c/retrofit-2.1.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.auto.value/auto-value/1.1/f6951c141ea3e89c0f8b01da16834880a1ebf162/auto-value-1.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.vikingsen/pocketknife-core/3.2.1/ffc5ab610d09241e5addb5f92d2cad2cacb7bf8e/pocketknife-core-3.2.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-annotations/8.2.1/d6f54d76edfbe779a50a8636b10fd3f555d8f780/butterknife-annotations-8.2.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-core/4.48/e579bd2905d0399af5029aaaf9817d5fa0ca88a5/ormlite-core-4.48.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.flaviofaria/kenburnsview/1.0.7/ce4e8bba9e026dd29f8110b2f6bb1fc4ecbdd9b1/kenburnsview-1.0.7.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato.EventBus/eventbus-annotation/-SNAPSHOT/6b4caaba936b3e295711028fb225ef9cedc8354a/eventbus-annotation--SNAPSHOT.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.leakcanary/leakcanary-watcher/1.4-beta2/6a920fb0d14e5e3b36e37cf33b1eeef2bcce4c92/leakcanary-watcher-1.4-beta2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.8.1/c04eb2cc599cd1742889bfa7cc41878db0d152f5/jackson-databind-2.8.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.1/f7be08ec23c21485b9b5a1cf1654c2ec8c58168d/jsr305-3.0.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato.EventBus/eventbus/-SNAPSHOT/2f55af2c3e22c8ae42838428d28518d2906e353f/eventbus--SNAPSHOT.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.facebook.rebound/rebound/0.3.8/c8b90640dddaf1e7ad75d7cb00b09a44b3788f7e/rebound-0.3.8.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.haha/haha/2.0.2/fd65b84d12d6adc77ec0e4fcaca623fc391d8679/haha-2.0.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/3.7.0/9e9eeaf9948ee4d6c3ab354e8dc14368f16994a4/glide-3.7.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/org.aspectj/aspectjrt/1.8.9/87372d9e2323313bec24b09a325bfea8ae0eb867/aspectjrt-1.8.9.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/converter-jackson/2.1.0/ef33476a62d9c62dfca6b6c9e086f2e3343a96f4/converter-jackson-2.1.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.4.0/cc174c559b5177982887bf6e1b76003aebad9516/bolts-android-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.9.0/f824591a0016efbaeddb8300bee54832a1398cfa/okio-1.9.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-android/4.48/afa06f539a4026c10b247386312aa67404b80a16/ormlite-android-4.48.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp-urlconnection/3.4.1/63994437f62bc861bc20c605d12962f7246116d1/okhttp-urlconnection-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.1.7/45aaffc3cf6fa7c9b9eed6121369cad25789cf4a/rxjava-1.1.7.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/24.1.1/3af19f153122737b372622fa6c81dd11a1c6b999/support-annotations-24.1.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.4.1/c7c4f9e35c2fd5900da24f9872e3971801f08ce0/okhttp-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.dagger/dagger/2.5/571f4e0451db64a7b41dbeb5f2503986fe5acdb4/dagger-2.5.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho/1.3.1/2c4076b466a0eb4d6ddf5721edd35cd1adc1f317/stetho-1.3.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava-math/1.0.0/5efd0e3928c33c74bbc05d7425e3a4652b8fc0dc/rxjava-math-1.0.0.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/gridlayout-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/palette-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/design/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-location/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-appindexing/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics-impl/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-core/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics-impl/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-messaging/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-iid/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-common/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-tasks/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-basement/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.11.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/cardview-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/customtabs/23.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.trello/rxlifecycle-components/0.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.trello/rxlifecycle/0.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jakewharton.rxbinding/rxbinding/0.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/io.reactivex/rxandroid/1.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jakewharton/butterknife/8.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/pl.charmas.android/android-reactive-location/0.9/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jonathanfinerty.once/once/1.1.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.chrisbanes/PhotoView/1.2.6/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/ViewPagerIndicator/2.4.1-gradle/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.eftimoff/android-pathview/1.0.8/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.eftimoff/android-pathview/1.0.8/jars/libs/androidsvg-1.2.1.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.ozodrukh/CircularReveal/1.3.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.10/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.8/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/io.fabric.sdk.android/fabric/1.3.12/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/jp.wasabeef/glide-transformations/2.0.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/FloatingSearchView/1.0.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/ToggleDrawable/1.0.2/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato.SlidingUpPaneLayout/library/9bfa793df5/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/de.hdodenhof/circleimageview/2.1.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.h6ah4i.android.widget.advrecyclerview/advrecyclerview/0.8.5/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.databinding/adapters/1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.databinding/library/1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/libs/internal_impl-24.1.1.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.squareup.leakcanary/leakcanary-android/1.4-beta2/jars/classes.jar:/home/renaud/Android/Sdk/build-tools/24.0.1/renderscript/lib/renderscript-v8.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/***.libs/android-commons/1.13.2/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/***.libs/ormlite-content-provider/1.13.2/jars/classes.jar:/home/renaud/Workspace/***/domain/build/libs/domain-1.13.2.jar:/home/renaud/Workspace/***/libs/commons/build/libs/commons-1.13.2.jar:/home/renaud/Workspace/***/app/build/intermediates/classes/debug, -inpath, /home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/logging-interceptor/3.4.1/381fc1096ba65040d8e80ea43b2e1d9bad02345e/logging-interceptor-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava-async-util/0.21.0/46d17bf13427f275c25c22eaccbfb4a8da1da85a/rxjava-async-util-0.21.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-applinks/1.4.0/8ad21bf21784dacce5f2043afb97218cc377e835/bolts-applinks-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.8.0/45b426f7796b741035581a176744d91090e2e6fb/jackson-annotations-2.8.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/frankiesardo/icepick/3.2.0/5ab94f3bba3f9315532eb1ca5547d120c4f71dae/icepick-3.2.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.8.1/fd13b1c033741d48291315c6370f7d475a42dccf/jackson-core-2.8.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.android.databinding/baseLibrary/2.1.2/d0395908c940f4171fb024435b25f7458c1147f3/baseLibrary-2.1.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.leakcanary/leakcanary-analyzer/1.4-beta2/449777cd466ac0a16f7e8d0dc508e70e2cdd13a9/leakcanary-analyzer-1.4-beta2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato/static-maps-api/1.0.2/7f40c64e6d1b1e96797fd13e4b8e5a4872d629b/static-maps-api-1.0.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/retrofit/2.1.0/2de7cd8b95b7021b1d597f049bcb422055119f2c/retrofit-2.1.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.auto.value/auto-value/1.1/f6951c141ea3e89c0f8b01da16834880a1ebf162/auto-value-1.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.vikingsen/pocketknife-core/3.2.1/ffc5ab610d09241e5addb5f92d2cad2cacb7bf8e/pocketknife-core-3.2.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-annotations/8.2.1/d6f54d76edfbe779a50a8636b10fd3f555d8f780/butterknife-annotations-8.2.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-core/4.48/e579bd2905d0399af5029aaaf9817d5fa0ca88a5/ormlite-core-4.48.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.flaviofaria/kenburnsview/1.0.7/ce4e8bba9e026dd29f8110b2f6bb1fc4ecbdd9b1/kenburnsview-1.0.7.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato.EventBus/eventbus-annotation/-SNAPSHOT/6b4caaba936b3e295711028fb225ef9cedc8354a/eventbus-annotation--SNAPSHOT.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.leakcanary/leakcanary-watcher/1.4-beta2/6a920fb0d14e5e3b36e37cf33b1eeef2bcce4c92/leakcanary-watcher-1.4-beta2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.8.1/c04eb2cc599cd1742889bfa7cc41878db0d152f5/jackson-databind-2.8.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.1/f7be08ec23c21485b9b5a1cf1654c2ec8c58168d/jsr305-3.0.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato.EventBus/eventbus/-SNAPSHOT/2f55af2c3e22c8ae42838428d28518d2906e353f/eventbus--SNAPSHOT.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.facebook.rebound/rebound/0.3.8/c8b90640dddaf1e7ad75d7cb00b09a44b3788f7e/rebound-0.3.8.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.haha/haha/2.0.2/fd65b84d12d6adc77ec0e4fcaca623fc391d8679/haha-2.0.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/3.7.0/9e9eeaf9948ee4d6c3ab354e8dc14368f16994a4/glide-3.7.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/org.aspectj/aspectjrt/1.8.9/87372d9e2323313bec24b09a325bfea8ae0eb867/aspectjrt-1.8.9.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/converter-jackson/2.1.0/ef33476a62d9c62dfca6b6c9e086f2e3343a96f4/converter-jackson-2.1.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.4.0/cc174c559b5177982887bf6e1b76003aebad9516/bolts-android-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.9.0/f824591a0016efbaeddb8300bee54832a1398cfa/okio-1.9.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-android/4.48/afa06f539a4026c10b247386312aa67404b80a16/ormlite-android-4.48.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp-urlconnection/3.4.1/63994437f62bc861bc20c605d12962f7246116d1/okhttp-urlconnection-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.1.7/45aaffc3cf6fa7c9b9eed6121369cad25789cf4a/rxjava-1.1.7.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/24.1.1/3af19f153122737b372622fa6c81dd11a1c6b999/support-annotations-24.1.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.4.1/c7c4f9e35c2fd5900da24f9872e3971801f08ce0/okhttp-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.dagger/dagger/2.5/571f4e0451db64a7b41dbeb5f2503986fe5acdb4/dagger-2.5.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho/1.3.1/2c4076b466a0eb4d6ddf5721edd35cd1adc1f317/stetho-1.3.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava-math/1.0.0/5efd0e3928c33c74bbc05d7425e3a4652b8fc0dc/rxjava-math-1.0.0.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/gridlayout-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/palette-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/design/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-location/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-appindexing/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics-impl/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-core/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics-impl/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-messaging/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-iid/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-common/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-tasks/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-basement/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.11.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/cardview-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/customtabs/23.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.trello/rxlifecycle-components/0.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.trello/rxlifecycle/0.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jakewharton.rxbinding/rxbinding/0.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/io.reactivex/rxandroid/1.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jakewharton/butterknife/8.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/pl.charmas.android/android-reactive-location/0.9/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jonathanfinerty.once/once/1.1.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.chrisbanes/PhotoView/1.2.6/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/ViewPagerIndicator/2.4.1-gradle/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.eftimoff/android-pathview/1.0.8/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.eftimoff/android-pathview/1.0.8/jars/libs/androidsvg-1.2.1.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.ozodrukh/CircularReveal/1.3.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.10/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.8/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/io.fabric.sdk.android/fabric/1.3.12/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/jp.wasabeef/glide-transformations/2.0.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/FloatingSearchView/1.0.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/ToggleDrawable/1.0.2/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato.SlidingUpPaneLayout/library/9bfa793df5/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/de.hdodenhof/circleimageview/2.1.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.h6ah4i.android.widget.advrecyclerview/advrecyclerview/0.8.5/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.databinding/adapters/1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.databinding/library/1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/libs/internal_impl-24.1.1.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.squareup.leakcanary/leakcanary-android/1.4-beta2/jars/classes.jar:/home/renaud/Android/Sdk/build-tools/24.0.1/renderscript/lib/renderscript-v8.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/***.libs/android-commons/1.13.2/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/***.libs/ormlite-content-provider/1.13.2/jars/classes.jar:/home/renaud/Workspace/***/domain/build/libs/domain-1.13.2.jar:/home/renaud/Workspace/***/libs/commons/build/libs/commons-1.13.2.jar:/home/renaud/Workspace/***/app/build/intermediates/classes/debug, -aspectpath, /home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/logging-interceptor/3.4.1/381fc1096ba65040d8e80ea43b2e1d9bad02345e/logging-interceptor-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava-async-util/0.21.0/46d17bf13427f275c25c22eaccbfb4a8da1da85a/rxjava-async-util-0.21.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-applinks/1.4.0/8ad21bf21784dacce5f2043afb97218cc377e835/bolts-applinks-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.8.0/45b426f7796b741035581a176744d91090e2e6fb/jackson-annotations-2.8.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/frankiesardo/icepick/3.2.0/5ab94f3bba3f9315532eb1ca5547d120c4f71dae/icepick-3.2.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.8.1/fd13b1c033741d48291315c6370f7d475a42dccf/jackson-core-2.8.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.android.databinding/baseLibrary/2.1.2/d0395908c940f4171fb024435b25f7458c1147f3/baseLibrary-2.1.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.leakcanary/leakcanary-analyzer/1.4-beta2/449777cd466ac0a16f7e8d0dc508e70e2cdd13a9/leakcanary-analyzer-1.4-beta2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato/static-maps-api/1.0.2/7f40c64e6d1b1e96797fd13e4b8e5a4872d629b/static-maps-api-1.0.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/retrofit/2.1.0/2de7cd8b95b7021b1d597f049bcb422055119f2c/retrofit-2.1.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.auto.value/auto-value/1.1/f6951c141ea3e89c0f8b01da16834880a1ebf162/auto-value-1.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.vikingsen/pocketknife-core/3.2.1/ffc5ab610d09241e5addb5f92d2cad2cacb7bf8e/pocketknife-core-3.2.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-annotations/8.2.1/d6f54d76edfbe779a50a8636b10fd3f555d8f780/butterknife-annotations-8.2.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-core/4.48/e579bd2905d0399af5029aaaf9817d5fa0ca88a5/ormlite-core-4.48.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.flaviofaria/kenburnsview/1.0.7/ce4e8bba9e026dd29f8110b2f6bb1fc4ecbdd9b1/kenburnsview-1.0.7.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato.EventBus/eventbus-annotation/-SNAPSHOT/6b4caaba936b3e295711028fb225ef9cedc8354a/eventbus-annotation--SNAPSHOT.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.leakcanary/leakcanary-watcher/1.4-beta2/6a920fb0d14e5e3b36e37cf33b1eeef2bcce4c92/leakcanary-watcher-1.4-beta2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.8.1/c04eb2cc599cd1742889bfa7cc41878db0d152f5/jackson-databind-2.8.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.1/f7be08ec23c21485b9b5a1cf1654c2ec8c58168d/jsr305-3.0.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.renaudcerrato.EventBus/eventbus/-SNAPSHOT/2f55af2c3e22c8ae42838428d28518d2906e353f/eventbus--SNAPSHOT.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.facebook.rebound/rebound/0.3.8/c8b90640dddaf1e7ad75d7cb00b09a44b3788f7e/rebound-0.3.8.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.haha/haha/2.0.2/fd65b84d12d6adc77ec0e4fcaca623fc391d8679/haha-2.0.2.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/3.7.0/9e9eeaf9948ee4d6c3ab354e8dc14368f16994a4/glide-3.7.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/org.aspectj/aspectjrt/1.8.9/87372d9e2323313bec24b09a325bfea8ae0eb867/aspectjrt-1.8.9.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/converter-jackson/2.1.0/ef33476a62d9c62dfca6b6c9e086f2e3343a96f4/converter-jackson-2.1.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.4.0/cc174c559b5177982887bf6e1b76003aebad9516/bolts-android-1.4.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.9.0/f824591a0016efbaeddb8300bee54832a1398cfa/okio-1.9.0.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-android/4.48/afa06f539a4026c10b247386312aa67404b80a16/ormlite-android-4.48.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp-urlconnection/3.4.1/63994437f62bc861bc20c605d12962f7246116d1/okhttp-urlconnection-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.1.7/45aaffc3cf6fa7c9b9eed6121369cad25789cf4a/rxjava-1.1.7.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/24.1.1/3af19f153122737b372622fa6c81dd11a1c6b999/support-annotations-24.1.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.4.1/c7c4f9e35c2fd5900da24f9872e3971801f08ce0/okhttp-3.4.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.google.dagger/dagger/2.5/571f4e0451db64a7b41dbeb5f2503986fe5acdb4/dagger-2.5.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho/1.3.1/2c4076b466a0eb4d6ddf5721edd35cd1adc1f317/stetho-1.3.1.jar:/home/renaud/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava-math/1.0.0/5efd0e3928c33c74bbc05d7425e3a4652b8fc0dc/rxjava-math-1.0.0.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-maps/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/gridlayout-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/palette-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/design/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-location/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-appindexing/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics-impl/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-core/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics-impl/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-messaging/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-iid/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.firebase/firebase-common/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-tasks/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.google.android.gms/play-services-basement/9.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.11.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/cardview-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/customtabs/23.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.trello/rxlifecycle-components/0.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.trello/rxlifecycle/0.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jakewharton.rxbinding/rxbinding/0.4.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/io.reactivex/rxandroid/1.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jakewharton/butterknife/8.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/pl.charmas.android/android-reactive-location/0.9/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.jonathanfinerty.once/once/1.1.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.chrisbanes/PhotoView/1.2.6/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/ViewPagerIndicator/2.4.1-gradle/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.eftimoff/android-pathview/1.0.8/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.eftimoff/android-pathview/1.0.8/jars/libs/androidsvg-1.2.1.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.ozodrukh/CircularReveal/1.3.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics/2.6.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/crashlytics-core/2.3.10/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/beta/1.2.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.crashlytics.sdk.android/answers/1.3.8/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/io.fabric.sdk.android/fabric/1.3.12/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/jp.wasabeef/glide-transformations/2.0.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/FloatingSearchView/1.0.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato/ToggleDrawable/1.0.2/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.github.renaudcerrato.SlidingUpPaneLayout/library/9bfa793df5/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/de.hdodenhof/circleimageview/2.1.0/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.h6ah4i.android.widget.advrecyclerview/advrecyclerview/0.8.5/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.databinding/adapters/1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.databinding/library/1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/libs/internal_impl-24.1.1.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/com.squareup.leakcanary/leakcanary-android/1.4-beta2/jars/classes.jar:/home/renaud/Android/Sdk/build-tools/24.0.1/renderscript/lib/renderscript-v8.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/***.libs/android-commons/1.13.2/jars/classes.jar:/home/renaud/Workspace/***/app/build/intermediates/exploded-aar/***.libs/ormlite-content-provider/1.13.2/jars/classes.jar:/home/renaud/Workspace/***/domain/build/libs/domain-1.13.2.jar:/home/renaud/Workspace/***/libs/commons/build/libs/commons-1.13.2.jar:/home/renaud/Workspace/***/app/build/intermediates/classes/debug, -sourceroots, /home/renaud/Workspace/***/app/src/main/aspectj, -log, /home/renaud/Workspace/***/app/build/ajc-details.log, -showWeaveInfo]
1 fail|abort, 1 error
:app:transformClassesWithAspectjForDebug spend 163ms
:app:transformResourcesWithMergeJavaResForDebug
:app:transformResourcesWithMergeJavaResForDebug spend 128ms
:app:transformClassesAndResourcesWithProguardForDebug
ProGuard, version 5.2.1
Reading input...
Reading program jar [/home/renaud/Workspace/***/app/build/intermediates/transforms/mergeJavaRes/debug/jars/2/1f/main.jar] (filtered)
$ cat ajc-details.log
Wed Aug 10 12:24:35 EDT 2016
[error] build config error: bad sourceroot: /home/renaud/Workspace/popsy/app/src/main/aspectj

Any thoughts?

Add experimental aj-compiler options

-XhasMember allow hasmethod() and hasfield type patterns in declare parents and declare @type
-Xjoinpoints: supply a comma separated list of new joinpoints that can be identified by pointcuts. Values are: arrayconstruction, synchronization

compile error

Error:Cause: tried to access method com.android.build.gradle.BasePlugin.getVariantManager()Lcom/android/build/gradle/internal/VariantManager; from class com.archinamon.utils.VariantUtilsKt

defaultIncludeAllJars migration?

Since you removed defaultIncludeAllJars from the plugin, it looks like AJC is not seeing any joint points located into my (java?) modules anymore. What's the proper workaround?

Do I now have to use includeJar: my-module-<version>.jar ?

Can not track lambda expressions

Hello, perhaps I am using the library wrong somehow but I can't get pointcuts to work on lambda expressions in android code.

For instance, if I have the pointcut for a dialog's button click

@Before("execution(* android.content.DialogInterface.OnClickListener+.onClick(..))")

the logging function will be called as expected in a regularly-defined listener such as the following:

builder.setNegativeButton("string", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        //do something
    }
});

but not when it is defined using lambda notation:

builder.setNegativeButton("string", (dialog, which) -> {
      //do something
});

I'm not sure if this is expected behavior and couldn't find anything on the internet about it so I thought I would ask you about if you've experienced this.

Thanks, and sorry if this have been covered somewhere else!

Do not hardcode AspectJ version

I'm not a gradle plugin expert, but It seems your plugin is compiled against AspectJ 1.8.4, and we can't override it? I tried to explicitely define my AspectJ dependency to 1.8.7 without success.

Since I needed AspectJ 1.8.7 (bug fixes), I had to recompile your plugin against 1.8.7 - and the bug were fixed.

Android Butterknife/DataBinding error

Hello, I'm trying to use GradleAspectJ-Android plugin with Annotated aspects
such as :

package com.test.android.util.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;

@Aspect
public class CrashLyticsLogAspect {

    private static final String POINTCUT_METHOD =
            "execution(@com.test.android.util.aspect.CLog * *(..))";

    private static final String POINTCUT_CONSTRUCTOR =
            "execution(@com.test.android.util.aspect.CLog *.new(..))";


    @Pointcut(POINTCUT_METHOD)
    public void methodAnnotatedWithDebugTrace() {}

    @Pointcut(POINTCUT_CONSTRUCTOR)
    public void constructorAnnotatedDebugTrace() {}

    @Around("methodAnnotatedWithDebugTrace() || constructorAnnotatedDebugTrace()")
    public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        String className = methodSignature.getDeclaringType().getSimpleName();
        String methodName = methodSignature.getName();
        CrashlyticsLogger.log(buildLogMessage(className, methodName));
        return joinPoint.proceed();
    }

    /**
     * Create a log message.
     *
     *@param methodName A string with the method name.  @return A string representing message.
     */
    private static String buildLogMessage(String className, String methodName) {
        StringBuilder message = new StringBuilder();
        message.append("Test --> ");
        message.append(className);
        message.append(" --> ");
        message.append("[");
        message.append(methodName);
        message.append("ms");
        message.append("]");

        return message.toString();
    }
}

package com.test.android.util.aspect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.CLASS)
@Target({ ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE })
public @interface CLog {}
package com.test.android.util.aspect;

import android.util.Log;
import com.crashlytics.android.Crashlytics;

public class CrashlyticsLogger {

    private CrashlyticsLogger() {}

    public static void log(String message) {
        Log.d("ASPECT", message);
        Crashlytics.log(message);
    }

}

But aspectj is writing such logs :

Tue Jul 05 12:27:33 EEST 2016
[error] cannot generate view binders java.lang.IllegalArgumentException: element public void set(T)  is not a member of the containing type android.databinding.ObservableField<java.lang.String> nor any of its superclasses
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.TypesImpl.asMemberOf(TypesImpl.java:129)
    at android.databinding.tool.reflection.annotation.AnnotationMethod.<init>(AnnotationMethod.java:49)
    at android.databinding.tool.reflection.annotation.AnnotationClass.getDeclaredMethods(AnnotationClass.java:314)
    at android.databinding.tool.reflection.ModelClass.getMethods(ModelClass.java:254)
    at android.databinding.tool.reflection.ModelClass.findGetterOrField(ModelClass.java:406)
    at android.databinding.tool.expr.FieldAccessExpr.resolveType(FieldAccessExpr.java:180)
    at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:318)
    at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:198)
    at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:238)
    at android.databinding.tool.DataBinder.<init>(DataBinder.java:52)
    at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:83)
    at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:168)
    at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:149)
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66)
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:140)
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:122)
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
    at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:924)
    at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1036)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:272)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:185)
    at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
    at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
    at org.aspectj.tools.ajc.Main.run(Main.java:371)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:192)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at com.archinamon.AspectjCompileTask.compile(AspectjCompileTask.groovy:96)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:46)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)


/Users/valerii/Downloads/Projects/test/app/build/generated/source/apt/testDev/debug/com/test/android/view/widget/testTabView$$ViewBinder.java [error] Internal compiler error: java.lang.RuntimeException: failure, see logs for details.
cannot generate view binders java.lang.IllegalArgumentException: element public void set(T)  is not a member of the containing type android.databinding.ObservableField<java.lang.String> nor any of its superclasses
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.model.TypesImpl.asMemberOf(TypesImpl.java:129)
    at android.databinding.tool.reflection.annotation.AnnotationMethod.<init>(AnnotationMethod.java:49)
    at android.databinding.tool.reflection.annotation.AnnotationClass.getDeclaredMethods(AnnotationClass.java:314)
    at android.databinding.tool.reflection.ModelClass.getMethods(ModelClass.java:254)
    at android.databinding.tool.reflection.ModelClass.findGetterOrField(ModelClass.java:406)
    at android.databinding.tool.expr.FieldAccessExpr.resolveType(FieldAccessExpr.java:180)
    at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:318)
    at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:198)
    at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:238)
    at android.databinding.tool.DataBinder.<init>(DataBinder.java:52)
    at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:83)
    at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:168)
    at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:149)
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66)
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:140)
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:122)
    at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
    at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:924)
    at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1036)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:272)
    at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:185)
    at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
    at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
    at org.aspectj.tools.ajc.Main.run(Main.java:371)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:192)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at com.archinamon.AspectjCompileTask.compile(AspectjCompileTask.groovy:96)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:46)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.runner.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:58)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
 cannot generate view binders java.lang.IllegalArgumentException: element public void set(T)  is not a member of the containing type android.databinding.ObservableField<java.lang.String> nor any of its superclasses
(no source information available)

testxTabView$$ViewBinder.java

// Generated code from Butter Knife. Do not modify!
package com.test.android.view.widget;

import android.view.View;
import butterknife.ButterKnife.Finder;
import butterknife.ButterKnife.ViewBinder;

public class testxTabView$$ViewBinder<T extends com.test.android.view.widget.testxTabView> implements ViewBinder<T> {
  @Override public void bind(final Finder finder, final T target, Object source) {
    View view;
    view = finder.findRequiredView(source, 2131755334, "field 'icon'");
    target.icon = finder.castView(view, 2131755334, "field 'icon'");
    view = finder.findRequiredView(source, 2131755335, "field 'countLabel'");
    target.countLabel = finder.castView(view, 2131755335, "field 'countLabel'");
    view = finder.findRequiredView(source, 2131755319, "field 'titleLabel'");
    target.titleLabel = finder.castView(view, 2131755319, "field 'titleLabel'");
  }

  @Override public void unbind(T target) {
    target.icon = null;
    target.countLabel = null;
    target.titleLabel = null;
  }
}

Multidex support with instant run

Hi,

Does this plugin support multidex ? With the following configuration I end up with an empty (with ressources but no class) APK :

com.android.tools.build:gradle:2.2.3
com.github.Archinamon:GradleAspectJ-Android:2.2.2
compileSdkVersion = 25
buildToolsVersion = '25.0.1'
minSdkVersion = 21
targetSdkVersion = 25

Btw I am using java 7 sources and Proguard is disable.

When I disable the plugin, the multidex is working, giving me an normal apk.

Using Aspectj plugin without Transform API (like this one or the one from this plugin) seems to works with Multidex.

Thanks for the support and let me know if you need further info.

Android Studio 3 Compatibility?

This is more of a question but, have you tested the aop-common.zip and aspectj.zip plugins from https://github.com/Archinamon/GradleAspectJ-Android/tree/master/IDE in Android Studio 3?

https://android-developers.googleblog.com/2017/10/android-studio-30.html
https://developer.android.com/studio/preview/features/index.html
https://developer.android.com/studio/index.html

I'm hesitant to upgrade if it means losing AspectJ on Android for a time. Hopefully they didn't change how plugins work. I'm on a Mac OS Sierra 10.12.6 (16G29).

Thanks!

Simple mode lacks JarMerging

Preconditions:
I have classpath dependecy added sa written in instruction.
I use android library (my-library.aar) containing aspects for androidTest, and basically have no aspects in app itself.
I have applied apply plugin: 'com.archinamon.aspectj' and configured includeAspectsFromJar 'my-library' in aspectj section.
In ajc-transform.log i see an info that weaving was OK, and join points advised.

Problem:
When i launch Instrumentation tests my app fails to start due to:

 java.lang.ClassNotFoundException: Didn't find class "com.example.MyApp" on path: DexPathList ...

Workaround:
If we switch plugin to complex mode everything works like a charm:

apply plugin: 'com.archinamon.aspectj-ext'

Solution:
Remove modeComplex() check from com.archinamon.api.AspectJTransform#transform(com.android.build.api.transform.TransformInvocation)

            // if (modeComplex()) {
            aspectJMerger.doMerge(this, transformInvocation, outputDir)
            // }

Implement binary-weaving mechanism and support weaving java-based languages

In order to allow the aj-weaver inject our aspect classes into java-bytecode the plugin should be enhanced and support next:
— exclude aj bytecode from inpath data to prevent re-weaving of aspect classes which may generate errors on parsing semantic;
— correctly dispatch javac target dir to evaluate arbitrary lava-like languages and do not pass bad dirs (like ones retrolambda create);
— support switching between "include everything" and "include selected" inpath option;
— support switch on/off for binary weaver;

Make /src/main/aspectj non obligatory

Comrades, it there any reason of making this sources folder("/src/main/aspectj") mandatory?
Ajc throws an error during build process: "[error] build config error: bad sourceroot: C;\git\Project\src\main\aspectj"

Use case describing this issue.
I am going to precompile and distribute some aspects in binary form within an .aar package. Main idea: a developer can utilize functionality provided by aspects from .aar library in his app by adding GradleAspectJ plugin to their build.

I can provide fix for this but just want to be sure it won't contradict anything.
Regards.
//cc @Archinamon

APT compatibility?

Hi!

It seems that the plugin is not APT friendly, Dagger now simply crash at startup:

Caused by: java.lang.IllegalStateException: Module adapter for class ***.app.AppModule could not be loaded. Please ensure that code generation was run for this module.

They're correctly generated in build/generated/source/apt/***:

image

How can I help?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.