前言
起因
前两天下班前突然被通知下个季度项目要转成 Kotlin,说实话,Kotlin 在 IO 大会之后就火了,然而我们公司今年一直在实行九九六的工作制,而且那段时间我又在学习 Python ,还有一部分的个人原因所以,所以对 Kotlin 的了解仅仅浮于表面,学习计划也是一度搁浅。
问题
曾经周六熬夜到十二点多摸索搭建 Kotlin 的环境。最后却差点把 AndroidStudio 的配置给搞混,Kotlin 便被我暂时抛弃了。
需要说明的是,当时我使用的是官方的说法。Kotlin 官网指引:https://kotlinlang.org/docs/reference/android-overview.html 去安装了 3.0 预览版的 AndroidStudio 。
预览版地址:https://developer.android.com/studio/preview/index.html
虽然官方说是可以两个版本并存,但是很可惜,我使用的是 Ubuntu 。 所以配置信息加载的时候会造成混乱。
总结
这里我会使用插件来配置 AndroidStudio 防止在此发生之前的情况,
环境配置
基本信息
Kotlin 环境并不需要单独配置,因为它是基于 Java 的语言,仅仅需要本地 JDK 版本 在 1.6 及以上版本即可。(注:Mac 系统,使用官方的 1.6 是不行的。Kotlin 有给出单独的 1.6 版本下载。https://support.apple.com/kb/DL1572)
插件支持
AndroidStudio 2.3 通过插件也可以支持 Kotlin
File –> Settings –> Plugins –> Browse repositories –> 输入“Kotlin” –> 点击“Kotlin”项目 –> 点击右侧的 “Install” –> 重启 AndroidStudio
新建 Kotlin 的 AndroidStudio 项目
1.预览版(3.0)支持新建项目页面直接通过勾选生成 Kotlin 项目
2.通过插件将创建普通项目转换为 Kotlin 项目
注意:Kotlin 的文件扩展名为 .kt 所以如果新建 Kotlin 项目 ,请注意选择
* Kotlin File/class
* Kotlin Activity
已有Android项目有转为 Kotlin
1.转换代码(此时运行也是崩溃)
Code –> Convert Java File to Kotlin File
转换操作可以 Ctrl + Z 撤销,但是不能反向转换
2.转换 Gradle 配置
Tools –> Kotlin –> Configure Kotlin in Project
你可以选择 Gradle 也可以选择 Android Gradle
我大概说一下区别,Gradle 指的是 Project 的 Gradle 。 只是让你的项目支持 Kotlin,并没有让你的 Module 变成 Kotlin 项目。
Android Gradle 则除了将 Project 的配置添加 Kotlin 支持,同时还可以选择 Module 转化为 Kotlin 项目。 (只要代码有 Kotlin 的 Module ,必须转换成 Kotlin 项目。)
转换到效果如下:
Gradle:
Project:build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.3-2' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
Android Gradle:
Project:build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.3-2' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin 编译支持 // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
Module Gradle:build.gradle
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' // 声明项目为Kotlin项目 android { compileSdkVersion 25 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.huaijin.myapplication" minSdkVersion 14 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" // 添加 Kotlin 依赖 } repositories { mavenCentral() }