Maintenance ๏ Only jar & class ﬁles, not dex ๏ Jack n’Jill ? —> No one knows about Jayce ๏ Modiﬁcations are invisible BYTECODE WEAVING ✓ Simple to use ✓ No boiler plate code ✓ As easy as a gradle plugin ✓ Extremely powerful ✓ ‘de facto standard’ API : Javassist.
with reﬂection & ﬁll these data structures during annotation processing time . 2. Generate code so that RNЯ becomes available at runtime. 3. Generate code that allows modiﬁcation of members (access ﬁelds, invoke methods and constructors).
use the reﬂection API. We manipulate ﬁelds, methods, constructors & classes… before they are compiled ! Uniﬁcation of Annotation Processing and Reﬂection API By itself it is an important theoretical achievement in Java.
RNЯ reﬂection classes : • accessible to libs/apps at runtime • provide read/write access to reﬂection information • are faster than reﬂection on Android. (Oh, Btw, there is a little detail that we gently omitted : annotation implementations…And we are proud to have succeeded in doing it.)
lot of reﬂection, many if not all features of reﬂection —>The fork introduced a high volume of changes… and potential bugs. • Reﬂection is also linked to the compiler at a very low level via class symbolication / class literals : Reﬂection Compiler Symbole
at compile-time. RNЯ - Step 2 and Step 3 are a generalization of all the work that has been done on Android related to Annotation Processing to circumvent Reﬂection. RNЯ demonstrates that this approach is feasible.