为什么kotlin写的代码可以在安卓系统上运行?
Kotlin 写的代码之所以能在 Android 系统上运行其最核心的原因可以用一句话来概括因为 Kotlin 在编译后会变成和 Java 一模一样的“中间语言”字节码而 Android 系统的底层引擎刚好认识这种语言。为了让你透彻理解这个过程我们可以把它拆解为以下几个关键步骤和原理1. 历史背景Android 原本是 Java 的天下在 Android 诞生的早期Google 选择了Java作为官方开发语言。Java 的一个重要特性是“一次编写到处运行”。它怎么做到的呢Java 代码在运行前不会直接被翻译成手机或电脑的底层机器码而是被编译器翻译成一种名为字节码Bytecode也就是.class文件的中间文件。然后Android 系统内部有一个专门用来运行这些字节码的“引擎”——早期叫 Dalvik现在叫ART (Android Runtime)。2. Kotlin 的“障眼法”它其实是一门 JVM 语言Kotlin 是由一家叫 JetBrains 的公司开发的。他们在设计 Kotlin 之初就下定决心要做到100% 兼容 Java。当你在写 Kotlin 代码.kt文件时你用的是比 Java 更简洁、更现代的语法。但是当你点击“运行/编译”时Kotlin 编译器会把你的 Kotlin 代码原封不动地翻译成和 Java 编译出来完全一样的“Java 字节码.class 文件”。对于底层的计算机来说它根本不知道这段代码原本是用 Java 写的还是用 Kotlin 写的。只要变成了符合规范的字节码它看起来就完全一样。3. Android 的编译打包流程无论是 Java 还是 Kotlin在 Android 中的最终运行流程是这样的第一步Kotlin 编译器将MainActivity.kt翻译成MainActivity.classJava 字节码。第二步Android 的打包工具D8/R8 编译器接收到这些.class文件把它们进一步压缩和转化变成 Android 专属的.dex文件Dalvik Executable。第三步把这些.dex文件、图片、布局文件一起打包生成最终的.apk或.aab安装包。4. 引擎接管ART (Android Runtime)当用户在手机上安装并打开这个 App 时Android 系统的底层引擎ART会接管这个.dex文件。ART 会将这些中间代码转换成手机 CPU 能直接读懂的二进制机器码0和1指挥手机硬件进行工作比如在屏幕上画一个按钮、发起一个网络请求等。一个通俗的比喻翻译官模型Android 系统老板他只听得懂“英语”Java 字节码 / DEX。Java 语言老员工他用“美式英语”写报告老板能看懂。Kotlin 语言新员工他平时满口“法语”更简洁优雅的语言但是每次交报告给老板之前他都会用一个超级翻译机Kotlin 编译器把报告完美地翻译成极其标准的“美式英语”Java 字节码。结果老板Android 系统拿到报告后根本察觉不到这是新员工用“法语”起草再翻译过来的因为最终呈现的内容和老员工写的一模一样甚至因为逻辑更严密Kotlin 规避了空指针异常老板看着还更舒服。总结Google 的官方加持除了底层的无缝兼容Kotlin 能在 Android 上完美运行还离不开 Google 的商业和技术推广2017 年Google 宣布 Kotlin 成为 Android 开发的一级支持语言。2019 年Google 进一步宣布Kotlin-FirstKotlin 优先这意味着最新的 Android API、库和官方教程都会优先为 Kotlin 设计比如专门为 Kotlin 写的 Android KTX 扩展库。所以Kotlin 并非在 Android 系统里“重新造了一个轮子”而是巧妙地“借壳上市”利用了 Android 已经非常成熟的 Java 运行环境。