https://kotlinlang.org logo
#android
Title
# android
u

uhe

03/01/2017, 4:47 PM
every code change 😞
Copy code
73ms  :app:mergeDevDebugResources
     53ms  :app:processDevDebugManifest
  28678ms  :app:kaptDevDebugKotlin
   1812ms  :app:compileDevDebugKotlin
   7043ms  :app:compileDevDebugJavaWithJavac
   1479ms  :app:copyDevDebugKotlinClasses
   8729ms  :app:transformClassesAndResourcesWithProguardForDevDebug
   4255ms  :app:transformClassesWithDexForDevDebug
   1828ms  :app:packageDevDebug
while annotation processing is cool in principle the performance hit really hurts 😕
m

mg6maciej

03/01/2017, 4:49 PM
uhe: Wow. This is huge. I'm glad I don't use APT.
u

uhe

03/01/2017, 4:51 PM
Yeah, sucks a bit. But I'm too deeply invested in our various libs to just not use it.
m

mg6maciej

03/01/2017, 4:58 PM
What libs do you use?
You mean your own libs?
u

uhe

03/01/2017, 5:01 PM
butterknife, android-state, dagger 2 and paper-parcel
those 4 need kapt
m

mg6maciej

03/01/2017, 5:18 PM
Yeah, that would be a lot of code to modify if you wanted to remove kapt.
a

adibfara

03/01/2017, 6:12 PM
why have you enabled proguard in debug build?
m

masc3d

03/01/2017, 7:37 PM
why butterknife when having kt android extensions?
r

rwachol

03/01/2017, 9:02 PM
java support ?
1
u

uhe

03/01/2017, 9:33 PM
because of the method limit
and butterknife because ... historic reasons
when we last tried android extension they didn't really work in all our cases
might have changed tho... maybe I'll give them another try some time
m

masc3d

03/01/2017, 9:38 PM
not sure if you consider moving away from kapt, as I did
but just in case, I have settled with [Kodein](https://salomonbrys.github.io/Kodein/) for injection
maybe it helps..
u

uhe

03/01/2017, 9:41 PM
I've thought about using Kodein but we have huge dagger modules... would probably take quite some time to migrate
will have a look at icekick, thanks
s

spierce7

03/02/2017, 3:07 AM
Kodein has bad performance. Like it's pretty bad.
I ended up rolling my own dependency injection for Kotlin that was a ton more performant
a

adibfara

03/02/2017, 6:09 AM
@spierce7 what's wrong with dagger?
r

rwachol

03/02/2017, 6:21 AM
better question is, what’s wrong with kapt 😉 (it doesnt always work / is slow)
m

mg6maciej

03/02/2017, 6:58 AM
I also have my own, veeery simple DI microframework.
Just for overriding stuff I can't control in UI tests.
d

deviant

03/02/2017, 10:18 AM
https://kotlinlang.slack.com/archives/android/p1488424037005445?thread_ts=1488386854.005378&cid=C0B8M7BUY really? could you give us more details? i thought it uses property delegates which is nothing more than just sugar. and should be pretty fast.
m

masc3d

03/02/2017, 10:34 AM
yes. I would be curious to hear about those details as well.
s

spierce7

03/02/2017, 5:52 PM
@adibfara Nothing is wrong with dagger, except that it's a bit ugly in kotlin, and requires annotation processing.
other than that, it's spectacular.
@deviant @masc3d You can see some of the benchmarking I did vs dagger, kodein, and the start of my own dependency injection system I rolled based on kodein's API
a

adibfara

03/02/2017, 5:56 PM
I currently use dagger on kotlin in a big project , haven't had a problem with it.What is the expected build time (incremental) for you guys? For me with this project, it's about 5-10s each incremental build
s

spierce7

03/02/2017, 5:56 PM
I gave up a few things when I rolled my own, that kodein has. Kodein can inject based on Generics. i.e. It can tell the difference between List<String> and List<Integer>. My solution can't. It see's all List's as the same.
To be clear, I'm not suggesting you use my DI solution. The one posted in that has some bugs I believe that I've sorted out now. Point is that Kodein has bad performance, which is why I steered away from it. I brought it up with them, and the creator made a separate API that was more performant, but I find it annoying that I have to use a separate API consistently to get the performance I expect. Plus I found that Kodein had an annoying number of features.
Kodein has bad performance because on each injection, it uses reflection to determine if there are any generic classes, and it's essentially generating a Java Type similar to how gson uses TypeTokens.
👍 1
r

rwachol

03/02/2017, 6:57 PM
well, for me total build time is not that bad
Total time: 1 mins 33.179 secs
@adibfara if I dont change anything it’s 6 sec, if I change java file it’s 10 sec
m

masc3d

03/02/2017, 7:25 PM
@spierce7 thanks that’s interesting. there’s
kodein-erased
now if you don’t need generics, but even that is still at least 10 times slower than yours or even dagger.
2 Views