Kotlin bytecode in Android Apps
I'm a kotlin and Java developer, and recently I started analyzing the bytecode generated by kotlin. And I found out a lot of wrapper code and other stuff that the compiler generates in order to translate what I have coded in Kotlin to Java.
So, my question is:
Imagine that I have an app that its code is 100% written in kotlin. Dependencies and the main app. All Kotlin.
- Does this mean that a different compiler will be used in order to avoid Java compatible bytecode?
- Or is there any optimization done by the compiler in this kind of scenarios?
Many Thanks.
I know about Kotlin Native
but I think it will only be applied to Android in the future.
android kotlin decompiler
|
show 7 more comments
I'm a kotlin and Java developer, and recently I started analyzing the bytecode generated by kotlin. And I found out a lot of wrapper code and other stuff that the compiler generates in order to translate what I have coded in Kotlin to Java.
So, my question is:
Imagine that I have an app that its code is 100% written in kotlin. Dependencies and the main app. All Kotlin.
- Does this mean that a different compiler will be used in order to avoid Java compatible bytecode?
- Or is there any optimization done by the compiler in this kind of scenarios?
Many Thanks.
I know about Kotlin Native
but I think it will only be applied to Android in the future.
android kotlin decompiler
What do you mean by in order to avoid bytecode?
– leonardkraemer
Nov 13 '18 at 15:57
kotlin has its own compiler, yes
– Tim Castelijns
Nov 13 '18 at 16:00
@TimCastelijns but it still becomes Java bytecode, although it's an absolute mess.
– TheWanderer
Nov 13 '18 at 16:01
1
What leads you to say "an absolute mess?" It's not.
– yole
Nov 13 '18 at 16:05
@yole Well I guess I don't know about the bytecode, but when it's decompiled, using Android Studio's decompiler, JADx or APKTool (Java, Java, Smali), it's much harder to follow the code vs a Java app. Kotlin classes also still usekotlin.String
,kotlin.Int
andkotlin.Unit
types when compiled, instead ofjava.lang.String
,int
andvoid
.
– TheWanderer
Nov 13 '18 at 16:07
|
show 7 more comments
I'm a kotlin and Java developer, and recently I started analyzing the bytecode generated by kotlin. And I found out a lot of wrapper code and other stuff that the compiler generates in order to translate what I have coded in Kotlin to Java.
So, my question is:
Imagine that I have an app that its code is 100% written in kotlin. Dependencies and the main app. All Kotlin.
- Does this mean that a different compiler will be used in order to avoid Java compatible bytecode?
- Or is there any optimization done by the compiler in this kind of scenarios?
Many Thanks.
I know about Kotlin Native
but I think it will only be applied to Android in the future.
android kotlin decompiler
I'm a kotlin and Java developer, and recently I started analyzing the bytecode generated by kotlin. And I found out a lot of wrapper code and other stuff that the compiler generates in order to translate what I have coded in Kotlin to Java.
So, my question is:
Imagine that I have an app that its code is 100% written in kotlin. Dependencies and the main app. All Kotlin.
- Does this mean that a different compiler will be used in order to avoid Java compatible bytecode?
- Or is there any optimization done by the compiler in this kind of scenarios?
Many Thanks.
I know about Kotlin Native
but I think it will only be applied to Android in the future.
android kotlin decompiler
android kotlin decompiler
edited Nov 13 '18 at 16:14
André Sousa
asked Nov 13 '18 at 15:54
André SousaAndré Sousa
1,1581818
1,1581818
What do you mean by in order to avoid bytecode?
– leonardkraemer
Nov 13 '18 at 15:57
kotlin has its own compiler, yes
– Tim Castelijns
Nov 13 '18 at 16:00
@TimCastelijns but it still becomes Java bytecode, although it's an absolute mess.
– TheWanderer
Nov 13 '18 at 16:01
1
What leads you to say "an absolute mess?" It's not.
– yole
Nov 13 '18 at 16:05
@yole Well I guess I don't know about the bytecode, but when it's decompiled, using Android Studio's decompiler, JADx or APKTool (Java, Java, Smali), it's much harder to follow the code vs a Java app. Kotlin classes also still usekotlin.String
,kotlin.Int
andkotlin.Unit
types when compiled, instead ofjava.lang.String
,int
andvoid
.
– TheWanderer
Nov 13 '18 at 16:07
|
show 7 more comments
What do you mean by in order to avoid bytecode?
– leonardkraemer
Nov 13 '18 at 15:57
kotlin has its own compiler, yes
– Tim Castelijns
Nov 13 '18 at 16:00
@TimCastelijns but it still becomes Java bytecode, although it's an absolute mess.
– TheWanderer
Nov 13 '18 at 16:01
1
What leads you to say "an absolute mess?" It's not.
– yole
Nov 13 '18 at 16:05
@yole Well I guess I don't know about the bytecode, but when it's decompiled, using Android Studio's decompiler, JADx or APKTool (Java, Java, Smali), it's much harder to follow the code vs a Java app. Kotlin classes also still usekotlin.String
,kotlin.Int
andkotlin.Unit
types when compiled, instead ofjava.lang.String
,int
andvoid
.
– TheWanderer
Nov 13 '18 at 16:07
What do you mean by in order to avoid bytecode?
– leonardkraemer
Nov 13 '18 at 15:57
What do you mean by in order to avoid bytecode?
– leonardkraemer
Nov 13 '18 at 15:57
kotlin has its own compiler, yes
– Tim Castelijns
Nov 13 '18 at 16:00
kotlin has its own compiler, yes
– Tim Castelijns
Nov 13 '18 at 16:00
@TimCastelijns but it still becomes Java bytecode, although it's an absolute mess.
– TheWanderer
Nov 13 '18 at 16:01
@TimCastelijns but it still becomes Java bytecode, although it's an absolute mess.
– TheWanderer
Nov 13 '18 at 16:01
1
1
What leads you to say "an absolute mess?" It's not.
– yole
Nov 13 '18 at 16:05
What leads you to say "an absolute mess?" It's not.
– yole
Nov 13 '18 at 16:05
@yole Well I guess I don't know about the bytecode, but when it's decompiled, using Android Studio's decompiler, JADx or APKTool (Java, Java, Smali), it's much harder to follow the code vs a Java app. Kotlin classes also still use
kotlin.String
, kotlin.Int
and kotlin.Unit
types when compiled, instead of java.lang.String
, int
and void
.– TheWanderer
Nov 13 '18 at 16:07
@yole Well I guess I don't know about the bytecode, but when it's decompiled, using Android Studio's decompiler, JADx or APKTool (Java, Java, Smali), it's much harder to follow the code vs a Java app. Kotlin classes also still use
kotlin.String
, kotlin.Int
and kotlin.Unit
types when compiled, instead of java.lang.String
, int
and void
.– TheWanderer
Nov 13 '18 at 16:07
|
show 7 more comments
1 Answer
1
active
oldest
votes
The only way you're going to avoid Java bytecode with Kotlin is to use Kotlin Native, and you won't be able to use the Android SDK in that case.
Kotlin JVM, as the name implies, compiles to JVM bytecode; it's one of the main draws of using it. If it compiled to something different, it would be Kotlin Native.
To answer your bullets:
- No, the same compiler is used whether or not you have Java source files.
- Probably not. Kotlin JVM is made to be almost completely interoperable with Java, and that's the same whether or not your project includes Java code.
Think about if you were creating an Android library in Kotlin. Would you really want it to automatically compile to something other than Java bytecode in that case? It wouldn't be able to be used in Java projects, defeating one of the main reasons Kotlin is so good as a Java alternative.
Also remember, you're using the Android SDK. Even if you have no dependencies in your build.gradle, you still reference the core SDK itself, which is Java. The SDK isn't included in your APK, but it's still used during compilation.
If you want something that avoids Java bytecode, use something like Flutter. It has its own SDK, and can bridge back to Java components. Of course, you can't completely avoid the JVM, because you still need some way for Android to install and open the app.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53284773%2fkotlin-bytecode-in-android-apps%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The only way you're going to avoid Java bytecode with Kotlin is to use Kotlin Native, and you won't be able to use the Android SDK in that case.
Kotlin JVM, as the name implies, compiles to JVM bytecode; it's one of the main draws of using it. If it compiled to something different, it would be Kotlin Native.
To answer your bullets:
- No, the same compiler is used whether or not you have Java source files.
- Probably not. Kotlin JVM is made to be almost completely interoperable with Java, and that's the same whether or not your project includes Java code.
Think about if you were creating an Android library in Kotlin. Would you really want it to automatically compile to something other than Java bytecode in that case? It wouldn't be able to be used in Java projects, defeating one of the main reasons Kotlin is so good as a Java alternative.
Also remember, you're using the Android SDK. Even if you have no dependencies in your build.gradle, you still reference the core SDK itself, which is Java. The SDK isn't included in your APK, but it's still used during compilation.
If you want something that avoids Java bytecode, use something like Flutter. It has its own SDK, and can bridge back to Java components. Of course, you can't completely avoid the JVM, because you still need some way for Android to install and open the app.
add a comment |
The only way you're going to avoid Java bytecode with Kotlin is to use Kotlin Native, and you won't be able to use the Android SDK in that case.
Kotlin JVM, as the name implies, compiles to JVM bytecode; it's one of the main draws of using it. If it compiled to something different, it would be Kotlin Native.
To answer your bullets:
- No, the same compiler is used whether or not you have Java source files.
- Probably not. Kotlin JVM is made to be almost completely interoperable with Java, and that's the same whether or not your project includes Java code.
Think about if you were creating an Android library in Kotlin. Would you really want it to automatically compile to something other than Java bytecode in that case? It wouldn't be able to be used in Java projects, defeating one of the main reasons Kotlin is so good as a Java alternative.
Also remember, you're using the Android SDK. Even if you have no dependencies in your build.gradle, you still reference the core SDK itself, which is Java. The SDK isn't included in your APK, but it's still used during compilation.
If you want something that avoids Java bytecode, use something like Flutter. It has its own SDK, and can bridge back to Java components. Of course, you can't completely avoid the JVM, because you still need some way for Android to install and open the app.
add a comment |
The only way you're going to avoid Java bytecode with Kotlin is to use Kotlin Native, and you won't be able to use the Android SDK in that case.
Kotlin JVM, as the name implies, compiles to JVM bytecode; it's one of the main draws of using it. If it compiled to something different, it would be Kotlin Native.
To answer your bullets:
- No, the same compiler is used whether or not you have Java source files.
- Probably not. Kotlin JVM is made to be almost completely interoperable with Java, and that's the same whether or not your project includes Java code.
Think about if you were creating an Android library in Kotlin. Would you really want it to automatically compile to something other than Java bytecode in that case? It wouldn't be able to be used in Java projects, defeating one of the main reasons Kotlin is so good as a Java alternative.
Also remember, you're using the Android SDK. Even if you have no dependencies in your build.gradle, you still reference the core SDK itself, which is Java. The SDK isn't included in your APK, but it's still used during compilation.
If you want something that avoids Java bytecode, use something like Flutter. It has its own SDK, and can bridge back to Java components. Of course, you can't completely avoid the JVM, because you still need some way for Android to install and open the app.
The only way you're going to avoid Java bytecode with Kotlin is to use Kotlin Native, and you won't be able to use the Android SDK in that case.
Kotlin JVM, as the name implies, compiles to JVM bytecode; it's one of the main draws of using it. If it compiled to something different, it would be Kotlin Native.
To answer your bullets:
- No, the same compiler is used whether or not you have Java source files.
- Probably not. Kotlin JVM is made to be almost completely interoperable with Java, and that's the same whether or not your project includes Java code.
Think about if you were creating an Android library in Kotlin. Would you really want it to automatically compile to something other than Java bytecode in that case? It wouldn't be able to be used in Java projects, defeating one of the main reasons Kotlin is so good as a Java alternative.
Also remember, you're using the Android SDK. Even if you have no dependencies in your build.gradle, you still reference the core SDK itself, which is Java. The SDK isn't included in your APK, but it's still used during compilation.
If you want something that avoids Java bytecode, use something like Flutter. It has its own SDK, and can bridge back to Java components. Of course, you can't completely avoid the JVM, because you still need some way for Android to install and open the app.
answered Nov 13 '18 at 16:27
TheWandererTheWanderer
7,05721028
7,05721028
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53284773%2fkotlin-bytecode-in-android-apps%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What do you mean by in order to avoid bytecode?
– leonardkraemer
Nov 13 '18 at 15:57
kotlin has its own compiler, yes
– Tim Castelijns
Nov 13 '18 at 16:00
@TimCastelijns but it still becomes Java bytecode, although it's an absolute mess.
– TheWanderer
Nov 13 '18 at 16:01
1
What leads you to say "an absolute mess?" It's not.
– yole
Nov 13 '18 at 16:05
@yole Well I guess I don't know about the bytecode, but when it's decompiled, using Android Studio's decompiler, JADx or APKTool (Java, Java, Smali), it's much harder to follow the code vs a Java app. Kotlin classes also still use
kotlin.String
,kotlin.Int
andkotlin.Unit
types when compiled, instead ofjava.lang.String
,int
andvoid
.– TheWanderer
Nov 13 '18 at 16:07