【译】创建一个基于 Kotlin 的 Android 项目(上集)

阅读 1415
收藏 15
2016-03-12
原文链接:github.com

学习一门新语言的最好途径是在实际情景中使用它。

这个新系列的文章正是以此方式来集中使用 Kotlin 建立一个真正的 Android 项目。

情景

为适用尽可能多的场合,该项目将需要:

  • 接入网络
  • 通过 REST API 访问取得数据 > 【译注】这里了解 REST API 概念。
  • 反序列化数据 > 【译注】这里了解序列化反序列化概念。
  • 在一个列表中展示图片

为此,何不干脆让此应用展示小猫咪呢?;)

使用 thecatapi.com/ API 我们可以获取几张有趣的小猫图片:

查看图片

依赖

看来这是个很好的机会以尝试一些非常酷的库:

创建项目

使用 Android Studio 可以非常简单地从头开始新建一个项目。

开始一个新的 Android 项目

查看图片

创建一个新项目

查看图片

选择目标 Android 设备

查看图片

添加一个 Activity

查看图片

定制 Activity

查看图片

按下 Finish,新的项目将按选定模板创建:

查看图片

这里开始是我们小猫应用的基础部分!

尽管代码仍然是 Java,后文我们将看到如何将其转换。

定义 Gradle Build 工具

下一步是调整 Build 工具以及确定我们会将到哪些库用于项目。

此阶段开始之前,请前往这篇文章去看看你在一个 Android Kotlin 项目中需要用到什么。

打开 Module App build.gradle (图中用红色矩形框圈出):

查看图片

一个非常好的实践是,将所有库的版本号 (version) 和 Android 特性配置 (properties) 集中于一个单独的脚本中,然后通过 Gradle 提供的 ext 属性去访问它们。

最简单的方法就是将以下代码片段添加到 build.gradle 文件的开头:

buildscript {
  ext.compileSdkVersion_ver = 23
  ext.buildToolsVersion_ver = '23.0.2'

  ext.minSdkVersion_ver = 21
  ext.targetSdkVersion_ver = 23
  ext.versionCode_ver = 1
  ext.versionName_ver = '1.0'

  ext.support_ver = '23.1.1'

  ext.kotlin_ver = '1.0.0'
  ext.anko_ver = '0.8.2'

  ext.glide_ver = '3.7.0'
  ext.retrofit_ver = '2.0.0-beta4'
  ext.rxjava_ver = '1.1.1'
  ext.rxandroid_ver = '1.1.0'

  ext.junit_ver = '4.12'

  repositories {
      mavenCentral()
  }

  dependencies {
      classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_ver"
  }
}

然后添加 Kotlin 插件,如下所示:

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

在为库添加依赖之前,我们将在项目中利用此前在文件开头添加的 ext 属性来更改脚本中的所有版本号:

android {
  compileSdkVersion "$compileSdkVersion_ver".toInteger()
  buildToolsVersion "$buildToolsVersion_ver"

  defaultConfig {
    applicationId "com.github.cirorizzo.kshows"
    minSdkVersion "$minSdkVersion_ver".toInteger()
    targetSdkVersion "$targetSdkVersion_ver".toInteger()
    versionCode "$versionCode_ver".toInteger()
    versionName "$versionName_ver"
}
...

再更改一下 buildTypes 部分:

buildTypes {
    debug {
        buildConfigField("int", "MAX_IMAGES_PER_REQUEST", "10")
        debuggable true
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    release {
        buildConfigField("int", "MAX_IMAGES_PER_REQUEST", "500")
        debuggable false
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

下一步是声明项目中用到的库:

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile "junit:junit:$junit_ver"

  compile "com.android.support:appcompat-v7:$support_ver"
  compile "com.android.support:cardview-v7:$support_ver"
  compile "com.android.support:recyclerview-v7:$support_ver"
  compile "com.github.bumptech.glide:glide:$glide_ver"

  compile "com.squareup.retrofit2:retrofit:$retrofit_ver"
  compile ("com.squareup.retrofit2:converter-simplexml:$retrofit_ver") {
    exclude module: 'xpp3'
    exclude group: 'stax'
}

  compile "io.reactivex:rxjava:$rxjava_ver"
  compile "io.reactivex:rxandroid:$rxandroid_ver"
  compile "com.squareup.retrofit2:adapter-rxjava:$retrofit_ver"

  compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_ver"
  compile "org.jetbrains.anko:anko-common:$anko_ver"
}

至此项目的 build.gradle 已准备就绪。

还有一点就是添加 uses-permission 来接入网络,因此将下面这行添加到 AndroidManifest.xml 中:

    

现在我们可以准备进行下一步了。

设计项目结构

另一个较好的实践是,在项目使用不同的包 (packages) 和文件夹 (folders) 来组织构成我们项目的不同类集合,所以我们可以这样组织我们的项目:

查看图片

右击根目录包 com.github.cirorizzo.kshows 然后选择 New->Package

编写代码

下一篇文章将论述如何为小猫应用的各部分编码。

评论