Fixed
Status Update
Comments
ja...@gmail.com <ja...@gmail.com> #2
Yeah it's not clear why some primitives were selected but others not. Both Long and Character seem to be missing. The absence of this support prevents the use of jvmTarget 1.8 in kotlinc. I'm going to raise the priority of this issue as a result.
$ cat Primitives.kt
data class Primitives(
val aByte: Byte,
val aBoolean: Boolean,
val aChar: Char,
val aDouble: Double,
val aFloat: Float,
val anInt: Int,
val aLong: Long,
val aShort: Short
)
$ kotlinc -jvm-target 1.8 *.kt
$ java -jar ~/dev/android/r8/build/libs/r8.jar --version
R8 1.5.14-dev
build engineering
$ java -jar ~/dev/android/r8/build/libs/r8.jar --lib $ANDROID_HOME/platforms/android-28/android.jar --release --output . *.class
$ dexdump -d classes.dex | egrep 'Ljava/lang/[a-zA-Z]+;\.hashCode:\([^\)]'
000ab8: 7110 1d00 0100 |0012: invoke-static {v1}, Ljava/lang/Character;.hashCode:(C)I // method@001d
000b00: 7120 2600 2100 |0036: invoke-static {v1, v2}, Ljava/lang/Long;.hashCode:(J)I // method@0026
$ cat Primitives.kt
data class Primitives(
val aByte: Byte,
val aBoolean: Boolean,
val aChar: Char,
val aDouble: Double,
val aFloat: Float,
val anInt: Int,
val aLong: Long,
val aShort: Short
)
$ kotlinc -jvm-target 1.8 *.kt
$ java -jar ~/dev/android/r8/build/libs/r8.jar --version
R8 1.5.14-dev
build engineering
$ java -jar ~/dev/android/r8/build/libs/r8.jar --lib $ANDROID_HOME/platforms/android-28/android.jar --release --output . *.class
$ dexdump -d classes.dex | egrep 'Ljava/lang/[a-zA-Z]+;\.hashCode:\([^\)]'
000ab8: 7110 1d00 0100 |0012: invoke-static {v1}, Ljava/lang/Character;.hashCode:(C)I // method@001d
000b00: 7120 2600 2100 |0036: invoke-static {v1, v2}, Ljava/lang/Long;.hashCode:(J)I // method@0026
ja...@gmail.com <ja...@gmail.com> #4
$ git -C ~/dev/android/r8 log --oneline | head -1
fd9c23137 Add desugaring of Java 8 Long|Character.hashCode methods
$ java -jar ~/dev/android/r8/build/libs/d8.jar --output . --release *.class
$ dexdump -d classes.dex | egrep 'Ljava/lang/[a-zA-Z]+;\.hashCode:\([^\)]' | wc -l
0
fd9c23137 Add desugaring of Java 8 Long|Character.hashCode methods
$ java -jar ~/dev/android/r8/build/libs/d8.jar --output . --release *.class
$ dexdump -d classes.dex | egrep 'Ljava/lang/[a-zA-Z]+;\.hashCode:\([^\)]' | wc -l
0
ag...@google.com <ag...@google.com>
ja...@google.com <ja...@google.com>
ap...@google.com <ap...@google.com> #5
Project: r8
Branch: master
commit db49dbc78dc4a4da9d0be0c32a135bef50689343
Author: Jake Wharton <jakew@google.com>
Date: Wed Apr 03 11:07:55 2019
Add desugaring of Java 8 Long and Character methods
Bug: 129730297
Test: Java8MethodsTest
Change-Id: Ibe67e8677ba4650a6ef30acf66ebcfeb8437aa02
M src/main/java/com/android/tools/r8/ir/desugar/Java8MethodRewriter.java
M src/test/java/com/android/tools/r8/desugar/Java8MethodsTest.java
https://r8-review.googlesource.com/36620
Branch: master
commit db49dbc78dc4a4da9d0be0c32a135bef50689343
Author: Jake Wharton <jakew@google.com>
Date: Wed Apr 03 11:07:55 2019
Add desugaring of Java 8 Long and Character methods
Bug: 129730297
Test: Java8MethodsTest
Change-Id: Ibe67e8677ba4650a6ef30acf66ebcfeb8437aa02
M src/main/java/com/android/tools/r8/ir/desugar/Java8MethodRewriter.java
M src/test/java/com/android/tools/r8/desugar/Java8MethodsTest.java
lo...@gmail.com <lo...@gmail.com> #7
Which canary version received it?
ri...@google.com <ri...@google.com> #8
This is not in canary yet, if you really need to try it out you should be able to do:
buildscript {
repositories {
maven {
url "http://storage.googleapis.com/r8-releases/raw/master "
}
}
dependencies {
classpath 'com.android.tools:r8:db49dbc78dc4a4da9d0be0c32a135bef50689343' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
buildscript {
repositories {
maven {
url "
}
}
dependencies {
classpath 'com.android.tools:r8:db49dbc78dc4a4da9d0be0c32a135bef50689343' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
ap...@google.com <ap...@google.com> #9
Project: r8
Branch: d8-1.4
commit d136eee65fb2e7f89f8199cd34f495fb3e83f0d4
Author: Rico Wind <ricow@google.com>
Date: Tue Apr 16 14:05:37 2019
Version 1.4.88
Cherry pick: Add desugaring of Java 8 Long and Character methods
CL:https://r8-review.googlesource.com/c/r8/+/36620
Bug: 129730297
Change-Id: I3ac7df7277dfea4d49b0633ba7d05c5a4241e03b
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/ir/desugar/Java8MethodRewriter.java
M src/test/java/com/android/tools/r8/desugar/Java8MethodsTest.java
https://r8-review.googlesource.com/37102
Branch: d8-1.4
commit d136eee65fb2e7f89f8199cd34f495fb3e83f0d4
Author: Rico Wind <ricow@google.com>
Date: Tue Apr 16 14:05:37 2019
Version 1.4.88
Cherry pick: Add desugaring of Java 8 Long and Character methods
CL:
Bug: 129730297
Change-Id: I3ac7df7277dfea4d49b0633ba7d05c5a4241e03b
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/ir/desugar/Java8MethodRewriter.java
M src/test/java/com/android/tools/r8/desugar/Java8MethodsTest.java
ey...@gmail.com <ey...@gmail.com> #10
Is there any way to check what version of AGP this will ship with (alpha, beta, etc...)?
mi...@gmail.com <mi...@gmail.com> #11
Seems to be fixed in AGP 3.4 final
ga...@gmail.com <ga...@gmail.com> #12
AGP 3.4 contains R8 1.4.77 and this change is not included.
js...@google.com <js...@google.com> #13
There will be 3.4.1 release (around Google I/O), and as per comment #9 , the fix is on board.
js...@google.com <js...@google.com> #14
Meanwhile, you can use comment #9 by editing your top-level gradle file like this:
buildscript {
repositories {
maven {
url 'http://storage.googleapis.com/r8-releases/raw '
}
}
dependencies {
classpath 'com.android.tools:r8:1.4.88' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:3.4.0'
}
}
buildscript {
repositories {
maven {
url '
}
}
dependencies {
classpath 'com.android.tools:r8:1.4.88' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:3.4.0'
}
}
vi...@gmail.com <vi...@gmail.com> #15
Is it finally fixed?
ju...@braze.com <ju...@braze.com> #16
Any update here?
go...@jakewharton.com <go...@jakewharton.com> #17
It was fixed a year ago in AGP 3.4.2
ju...@braze.com <ju...@braze.com> #18
Thanks Jake, you're the best
Description
As far as I can see, methods of java.lang.Long are still not desugared, e.g.
- int Long.hashCode(long value)
- long Long.sum(long a, long b)
- long Long.max(long a, long b)
- long Long.min(long a, long b)
Could you please add them too?
Looking at this file
Without this developers can't compile Kotlin code with jvmTarget = 1.8 and use it in Android projects.
For instance, ExoPlayer developers are struggling the issue -