等等,Java?Kotlin?

什么?你还在使用Java编写Android程序?不知道Google已经宣布Kotlin是官方语言了吗?
好吧,还是有一些人仍然在执着于Java。现在列举一些Kotlin的好处。

  • Kotlin代码好看一些
  • 大多数变量或常量都可以通过推断来知道变量或常量类型
  • 函数式编程
  • 空指针安全
  • Kotlin的向下支持可以使你用JDK 1.6就能享受到Java 9以上的语言特性
  • 100%兼容Java

所以,还是用Kotlin吧。 还有,如果你使用Android Studio进行编写,那么你应该知道整个工程都使用Gradle进行项目构建。Gradle的配置文件bulid.gradle是用的Groovy编写的,相比于Kotlin它的可读性很差,而且没有IDE上的类型推断支持。得益于Kotlin DSL的支持,你可以将文件重命名为build.gralde.kts,然后将里面的代码全部改写成Kotlin,就好看多了。
在此我放一个模板:

// build.gradle.kts
buildscript {
    repositories {
	// maven仓库用法:maven(url)
        mavenCentral()
        jcenter()
        google()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:4.2.0-alpha07")
        classpath(kotlin("gradle-plugin", version = "1.4.10"))
    }
}

allprojects {
    repositories {
        mavenCentral()
        jcenter()
        google()
    }
}

tasks.register("clean", Delete::class) {
    delete(rootProject.buildDir)
}
// app/build.gradle.kts
// 你还可以定义val或者var
plugins {
    id("com.android.application")
    kotlin("android")
    kotlin("kapt")
    kotlin("plugin.serialization") version "1.4.0"
}
android {
    compileSdkVersion(30)
    defaultConfig {
        applicationId = "com.example.example"
        minSdkVersion(26)
        targetSdkVersion(30)
        versionCode = 1
        versionName = "1.0.0-alpha1"
    }
    buildTypes {
        getByName("debug") {
            isMinifyEnabled = false
        }
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
            signingConfig = signingConfigs.findByName("github")
        }
    }
    // 这样可以在src/mian里面使用kotlin文件夹啦~
    sourceSets["main"].java.srcDir("src/main/kotlin")
    // 使用Java 8
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions.jvmTarget = "1.8"
    // ViewBinding
    buildFeatures.viewBinding = true
}

dependencies {
// settings.gradle.kts
include(":app")