Kotlin学习记录(一)——搭建环境到输出Hello World!

来源:互联网 发布:利达信tk832 软件 编辑:程序博客网 时间:2024/05/29 18:49

写在前面:

几年前因为工作需要从一个渣渣Java后端开发(别误会,哈哈,是说我自己当时的水平渣渣奋斗)转到了前端Android开发。那会老板发话了,给你个公司内部的项目自己练手去吧,赶紧搞好,学会了开始接客(之前的公司是外包嘛偷笑)。当时就琢磨着可以把自己自学Android的经过能写下来,但是实在没经住后来客人实在太多了,在一个又一个敷衍出的外包项目中,我就这样又删了当初建的自学分组。最近,抽出时间自学Kotlin,又想起了当初没干的事,琢磨着怎么着也得补一发。这是第一次写系列的文章,有啥不如,各位看官还请担待点,多多给小的提意见奋斗


关于Kotlin:

Kotlin,它是JetBrains开发的基于JVM的语言。JVM是啥?这.....(这都不知道,确定不是来逗我的尴尬),JetBrains可能很多人不认识,但是它的另一个产品大家肯定是知道的,没错,就是Android Studio!官方的Android IDE!

Kotlin是兼容Java的,但是它比Java更安全(比如:空安全),更简洁(这点就慢慢感受吧,岂止是少写了几行代码那么简单吗?)。

关于Kotlin说了这么多冠冕堂皇的话是不是觉得看不下去了?抱着试一试态度的人是不是这会更关心学习Kotlin的成本和难度?好吧,如果你是一名有Java开发基础的攻城狮,那它真的....很简单~!不信吗?跟我一起来试一试吧!大笑


环境搭建:

Android使用Kotlin的开发环境主要还是在Android Studio上,如果还有在使用Eclipse的童靴,Kotlin也是可以的,但是听说有很多的不足,具体的就自己尝试吧!本文,只针对Android Studio。

Android Studio 3.0+的版本将支持Kotlin的,可以直接下载使用。

如果是3.0之前的AS,也是可以通过插件的方式使用Kotlin的,具体方式如下:

现在我们的AS就可以理解Kotlin了,就和编译Java一样,编译运行Kotlin了。

创建项目:

使用Android studio新建一个项目(默认都是有过使用Android studio开发Android常识的)


如果你是AS3.0版本的,那么在新建的时候记得勾选Include Kotlin support,如图:


这样,新建项目完成后,大家会发现MainActivity的代码是这样的:


package com.lipeng.myapplicationimport android.support.v7.app.AppCompatActivityimport android.os.Bundleclass MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)    }}


没错,这就是Kotlin的代码啦!

如果你不是3.0+的版本,那么就需要先配置一下Gradle了,配置需要修改整个项目的build.gradle和module的build.gradle。分别如下:


父类的build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {    ext.kotlin_version = '1.1.2-4'  //存储当前的Kotlin版本,可以根据实时变动    ext.anko_version = '0.8.2'  //存储当前anko库的版本    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.2.2'        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        jcenter()        maven { url 'https://maven.google.com' }        mavenCentral()    }}task clean(type: Delete) {    delete rootProject.buildDir}

module的build.gradle:

apply plugin: 'com.android.application'apply plugin: 'kotlin-android'//记得这两个东西o~apply plugin: 'kotlin-android-extensions'android {    compileSdkVersion 25    buildToolsVersion "25.0.2"    defaultConfig {        applicationId "com.lipeng.kotlintest"        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'        }    }}buildscript {    repositories {        jcenter() }    dependencies {        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"    }}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.0'    testCompile 'junit:junit:4.12'    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"    compile "org.jetbrains.anko:anko-common:$anko_version"  //这库是一个用来简化Android任务的Kotlin}

配置完成后,MainActivity怎么办呢?Kotlin plugin提供了一个可以把Java代码转换为Kotlin的特性:

在MainActivity类中,code  >   Convert Java File to Kotlin File。


好啦,一切准备就绪,是不是已经迫不及待运行了呢?别着急,我们做点有趣的改动,初步认识一下kotlin的简洁!


输出“这真是美好的一天”:


(注:后续的所有示例都在AS3.0上完成)

我们在activity_main.xml中给默认的TextView增加一个ID:

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.lipeng.kotlinstudy.MainActivity">    <TextView        android:id="@+id/tv_hello"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintLeft_toLeftOf="parent"        app:layout_constraintRight_toRightOf="parent"        app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>

然后我们在MainActivity中这样:


package com.lipeng.kotlinstudyimport android.app.Activityimport android.os.Bundleimport kotlinx.android.synthetic.main.activity_main.*class MainActivity : Activity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        tv_hello.text="这真是美好的一天"    }}

是不是觉得很茫然,注意:

import kotlinx.android.synthetic.main.activity_main.*

对的,然后你就可以再Activity直接通过id使用view了,就这样简单,findViewById是什么鬼?

至于.text="这真是美好的一天"就相当于Java中的:tv_hello.setText("这真是美好的一天");,因为Kotlin和Java的互操作性,Kotlin是像操作属性一样,去操作Java库中的getter/setter方法。可以使用tv_hello.text代替tv_hello.setText,而且这样使用是没有任何性能开销的。具体的后续再说...


然后大家应该注意到一个地方,Kotlin中是不使用“;”的,是不是挺好,每次敲完都要小拇指点一下的习惯将离你远去。


还等什么,现在运行APP:这真是美好的一天偷笑



Kotlin学习记录(二)—— Kotlin的变量、属性、类、构造函数、继承、方法

阅读全文
2 0