• Kotlin基础入门 - 创建、兼容一个属于自己的Kotlin项目


    这应该是我年前就想记录的一个基础入门,但是因为一直比较忙,当时只是做了一个备忘草稿,正文就拖到了现在,趁着有时间,赶紧来帮助一下新入行的朋友…

    关于为何我把这篇Blog叫做 创建、兼容一个属于自己的Kotlin项目? 主要是因为在实际开发中会遇到以下俩种项目场景 > <

    • 从0 - 1 的Kotlin项目,后续混用Java(自带兼容,基本无需处理)
    • Java项目,后续兼容Kt(原始为Java项目,基本无kt;后期加入kt

    其实兼容一个原始Java项目让其能顺利的运行,我们仅需创建一个Kotlin项目,然后对比俩者的相关kt配置,就可以查缺补漏了~

    创建一个从0 - 1 Java、Kotlin 项目

    在新建项目时,我们的Language 对应选择 Java、Kotlin 即可,新建过后gradle会加载相关依赖配置

    在这里插入图片描述

    Java项目

    我们先把Java项目的配置作为标准,看一下Project、和moudlebuild.gradle配置

    build.gradle(app)

    在这里插入图片描述

    build.gradle(Project)

    在这里插入图片描述

    Kotlin项目

    通过Kotlin项目对比Java项目,主要看一下Project、和moudlebuild.gradle配置(主要注意标红区域)

    build.gradle(app)

    在这里插入图片描述

    build.gradle(Project)

    在这里插入图片描述

    Java兼容Kt

    我在Java项目中使用到了Kt类,提示让我配置信息,这时候我们可以以下操作二选一

    • 直接通过提示让As自行配置
    • 也可以尝试将Kt中的标红部分copy过来试一试

    在这里插入图片描述

    在Kt类As在右上角会提示configure ,点击之后可以选择配置全部组件或单个组件

    在这里插入图片描述

    我们来看下添加的配置,把标红的copy进去也行

    build.gradle(app)- 图示

    在这里插入图片描述

    build.gradle(app)- 代码

    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
    }
    
    android {
        namespace 'com.example.javademo'
        compileSdk 32
    
        defaultConfig {
            applicationId "com.example.javademo"
            minSdk 21
            targetSdk 32
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    dependencies {
    
        implementation 'androidx.appcompat:appcompat:1.4.1'
        implementation 'com.google.android.material:material:1.5.0'
        implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
        implementation 'androidx.core:core-ktx:+'
        testImplementation 'junit:junit:4.13.2'
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    build.gradle(Project)- 图示

    在这里插入图片描述

    build.gradle(Project)- 代码

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    plugins {
        id 'com.android.application' version '7.3.1' apply false
        id 'com.android.library' version '7.3.1' apply false
        id 'org.jetbrains.kotlin.android' version '1.8.0-Beta' apply false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    兼容中可能遇到的问题

    主要记录我当时在Java项目中首次使用kt遇到的问题

    java 调用 kotlin 找不到符号

    检查kotlin配置时,发现module下的build.gradle中没有使用kotlin插件

     apply plugin: 'kotlin-android'
    
    • 1
    报错 Plugin with id ‘kotlin-android’ not found.*

    你可以查看下你的项目Gradle文件,加上如图两行代码:

     ext.kotlin_version="1.3.30"
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    
    • 1
    • 2

    图示

    在这里插入图片描述

    module使用kotlin报错找不到类

    module开发时,如果选择语言为kotlin可能会出现编译时报错,Unresolved reference:xxx.xxx.xxx

    其实类本身是存在的,但是由于是kotlin语法写的,所以需要一个转译,否则编译的时候无法识别。

    在module的build.gradle下添加下面语句:

     apply plugin: 'kotlin-android'
     apply plugin: 'kotlin-android-extensions'
    
    • 1
    • 2

    提示: apply plugin: 'kotlin-android-extensions'早期使用,现在基本已经被废弃了

    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
    }
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    【历史上的今天】7 月 31 日:“缸中之脑”的提出者诞生;Wi-Fi 之父出生;USB 3.1 标准发布
    信号与进程间通信
    python中的关联关系
    Redis 7 第九讲 微服务集成Redis 应用篇
    springboot:集成Kaptcha实现图片验证码
    【机器学习】基于卷积神经网络 CNN 的猫狗分类问题
    JDBC-API详解-Connection类
    Python中的列表推导式(List Comprehension)
    01 飞行器设计 —— 一门独立的学科
    2022-2028全球油气无人机行业调研及趋势分析报告
  • 原文地址:https://blog.csdn.net/qq_20451879/article/details/123860569