首页 > 技术文章 > 使用Kotlin创建Android项目

fuyaozhishang 2017-12-25 09:04 原文

如果你已经使用过Android Studio和Gradle,那么这一章会比较简单。我不会给出很多细节和截图,因为用户界面和细节可能会一直变化。

我们的应用是由一个简单的天气app组成,正如所使用的Google's Beginners Course in Udacity。我们可能会关注不同的事情,但是app的想法都是一样的,你会发现在一个典型的app里面会包括很多不同的东西。如果你的Android开发水平比较低,我推荐这个,这个过程是比较容易的。

1. 在Android Studio中创建一个项目

首先,打开Android Studio并选择Create new Project,然后它会让你输入一个名字,你可以任意取一个名字,比如:Weather App。然后你需要输入公司域名。如果你不会真正发布这个app,这个字段就不是特别重要了,但是如果你有的话可以使用自己的域名。然后给任意选择一个目录作为这个项目的保存地址。

下一步,它会让你选择最小的API版本。我们选择API 15,因为我们有一个库需要至少API 15才能用。无论如何你把大部分的Anroid用户作为了目标。现在不要选择任何除了手机和平板的其它平台。

最后,我们需要选择一个Activity模版来作为入口。我们可以选择Add no Activity然后从头开始(这是一个好的方式如果这是一个Kotlin项目的话),但是我将选择Blank Activity,因为我待会儿会给你展示Kotlin插件一个好玩的小特性。

暂时不用去关心Activity的名字,layout等。这些你会在下一篇中知道。如果我们需要,我待会儿会修改它。点击Finish然后让它继续创建项目。

2. 配置Gradle

Kotlin插件包括一个让我们配置Gradle的工具。但是我还是倾向于保持我对Gradle文件读写的控制权,否则它只会变得混乱而不会变得简单。不管怎么样,在使用自动工具之前知道它是怎么工作的是个不错的主意。所以这次,我们将手动去做。

首先,你需要如下修改父build.gradle

buildscript {
    ext.support_version = '23.1.1'
    ext.kotlin_version = '1.0.0'
    ext.anko_version = '0.8.2'
    repositories {
        jcenter()
        dependencies {
            classpath 'com.android.tools.build:gradle:1.5.0'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
}
allprojects {
    repositories {
        jcenter() 
    }
}

正如你看到的,我们创建了一个变量来存储当前的Kotlin版本。你读到这里的时候去检测一下最新版本,因为可能会有更新的版本已经发布了。我们需要在几个不同的地方用到那个版本号,比如你需要加上新的Kotlin插件的dependency。你会在你指定的那些模块中的build.gradle中再次需要到Kotlin标准库。

我们对于support library也是如此,Anko库也是同样的做法。用这个方式可以更方便地在一个地方修改所有的版本号。并且使用相同的版本号,更新的时候也不需要每个地方都修改。

我们会增加Kotlin标准库,Anko库,以及KotlinKotlin Android Extensions plugin插件到dependencies。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
    ...
}

dependencies {
    compile "com.android.support:appcompat-v7:$support_version"
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.anko:anko-common:$anko_version"
}

buildscript {
    repositories {
      jcenter() 
    }
    dependencies {
      classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    } 
}

Anko是一个用来简化一些Android任务的很强大的Kotlin库。我们之后将会学习部分anko,但是现在来说仅仅增加anko-common就足够了。这个库被分割成了一系列小的部分以至于我们不会把没用到的部分加进来。

3. 把MainActivity转换成Kotlin代码

Kotlin plugin包含了一个有趣的特性,它能把Java代码转成Kotlin代码。正如任何自动化那样,结果不会很完美,但是在你第一天能够使用Kotlin语言开始编写代码之前,它还是提供了很多的帮助。

所以我们在MainActivity.java类中使用它。打开文件,然后选择Code -> Convert Java File to Kotlin File。对比它们的不同之处,可以让你更熟悉这门语言。

4. 测试是否一切就绪

我们想再将编写一些代码来测试Kotlin Android Extensions是否在工作。我现在还不会对这些代码做解释,但是我想要确保它们在你的环境中是正常运行的。这可能是配置中最难的一部分。

首先,打开activity_main.xml,然后设置TextView的id:

<TextView
    android:id="@+id/message"
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

然后,手动在Activity中增加一个import语句(不要担心你现在对这个还不太理解)。

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

onCreate中,你现在可以直接得到并访问这个TextView了。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    message.text = "Hello Kotlin!"
}

多亏Kotlin和Java之间的互操作性,我们可以在Kotlin中像操作属性一样去操作Java库中的getter/setter方法。我们之后再去讲解属性,但是我想提醒的是,我们可以使用message.text来代替message.setText。编译器将会把它转换成一般的Java代码,所以这样使用是没有任何性能开销的。

现在运行这个app,并且它是正常运行的。检查TextView是否是显示的新的内容。如果你有疑问或者想查看代码,请在Kotlin for Android Developers repository查看。每个章节只要修改了代码,我都会进行提交,所以一定要检查所有的代码变化。

推荐阅读