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

news2025/8/17 4:29:48

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

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

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

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

      • 创建一个从0 - 1 Java、Kotlin 项目
        • Java项目
        • Kotlin项目
        • Java兼容Kt
      • 兼容中可能遇到的问题
        • java 调用 kotlin 找不到符号
        • 报错 Plugin with id 'kotlin-android' not found.*
        • module使用kotlin报错找不到类

创建一个从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'
}

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
}

兼容中可能遇到的问题

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

java 调用 kotlin 找不到符号

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

 apply plugin: 'kotlin-android'

报错 Plugin with id ‘kotlin-android’ not found.*

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

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

图示

在这里插入图片描述

module使用kotlin报错找不到类

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

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

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

 apply plugin: 'kotlin-android'
 apply plugin: 'kotlin-android-extensions'

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

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统

[附源码]计算机毕业设计JAVA面向服装集群企业的个性化定制服务系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

C语言:数据的存储

数据的存储首先就要说到数据的类型&#xff0c;类型决定了看待内存空间的视角。C语言的数据类型分为内置类型和外置类型。 1.内置类型 &#xff08;1&#xff09;整型数组 char&#xff08;字符型&#xff09;、short&#xff08;短整型&#xff09;、int&#xff08;整型&am…

【网络原理】应用层协议概述

1. HTTP协议 Hyper Text Transfer Protocpl&#xff08;超文本传输协议&#xff09;。允许将超文本语言&#xff08;HTML&#xff09;从web服务器传送到客户端的浏览器上。HTTP的端口号是80&#xff0c;HTTPS的端口号是443。 HTTP0.9和1.0使用的是非持续链接&#xff0c;每次…

nginx(六十五)proxy模块(六)处理上游的响应头部

一 处理上游的响应头部 重点&#xff1a; 生成了响应内容准备向客户端发送的时候,响应内容必须经过过滤模块的处理补充&#xff1a; 要关注默认行为 &#xff08;1&#xff09;禁用上游响应头对nginx的影响 ① proxy_ignore_headers 应用层如何控制nginx 背景&#xff1…

【电力系统】CJAYA算法优化光伏模型SDM参数附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Spring源码深度解析:九、bean的获取② - createBeanInstance

createBeanInstance()的流程图如下,让我们根据流程图一步一步的学习一下spring是如何创建bean的吧 一、前言 文章目录&#xff1a;Spring源码分析&#xff1a;文章目录 这篇文章应该是接着 Spring源码深度解析&#xff1a;八、bean的获取② - getSingleton 的继续分析过程。…

Eolink自动全代码注释自动上传API

目录 一、自动全代码注释 测试环境 Eolink Apikit安装 1、自建bootstrap项目用作测试 2、点击【File】->【Settings...】 3、搜索并安装【Eollink ApiKit】 4、添加eo注释 5、注释效果 二、一键上传API 1、配置服务信息 2、Server获取 3、SpaceKey获取 4、Proj…

C++回溯法leetcode练习集

文章目录什么是回溯法回溯法的模板组合组合总和|||洛谷刷题-八皇后问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解析&#xff1a;电话号码的字母组合组合总和组合总和II分割回文串复原IP地址小结子集子集||递增子序列全排列全排列||842排列数字皇后问题什么…

BGP进阶:BGP 综合实验一

BGP路由优选规则 BGP是一个应用非常广泛的边界网关路由协议&#xff0c;被部署于大型的网络环境中。它能够支持大规模的网络&#xff0c;能够运载IP骨干网络中大批量的路由前缀并且在AS之间灵活的传递。BGP拥有丰富的路径属性&#xff0c;以及路由策略部署工具&#xff0c;正是…

win10家庭版安装Docker

首先查看你的电脑里面是否是win10且没有Hyper-V&#xff0c;是的话&#xff0c;那这个教程就是给你的啦~ 1、安装Hyper-v 首先将下面的内容复制到新建的txt中&#xff0c;将txt更名为Hyper-V.cmd,右键管理员运行这个文件 pushd "%~dp0"dir /b %SystemRoot%\servici…

为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果...

为了提前预测比赛结果&#xff0c;于是我用Python获取比赛球员数据进行分析&#xff0c;结果...前因后果准备工作实现步骤代码展示部分效果展示最后前因后果 最近不是世界杯嘛&#xff0c;但是太忙了实在没时间看&#xff0c;于是为了凑热闹&#xff0c;用Python把本次球员信息…

AQS源码解析 5.Condition条件队列 await() signal() 核心方法

AQS源码解析—Condition条件队列 await() & signal() 核心方法 简介 在 Condition 条件队列中使用的也是 AQS 中的 Node 结构&#xff0c;它并没有使用 prev 和 next 属性&#xff0c;而使用的是 nextWaiter 去实现了一个单向链表的结构&#xff1a; Node nextWaiter;流…

MySQL索引和事务

目录 1.索引 1.1 索引的作用 1.2 查看索引 1.3 创建索引 1.4 删除索引 1.5 索引背后的数据结构(重点、面试题) 2.事务 2.1 什么是事务? 2.2 事务的使用 2.2.1 回滚 2.2.2 执行 2.3 事务的原子性(事务的初心) 2.4 事务的一致性 2.5 事务的持久性 2.6 事务的隔离性…

STM32之蜂鸣器实验

本章知识点 STM32GPIO的应用 蜂鸣器的原理&#xff08;最好网上看看&#xff09; 蜂鸣器概述 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作…

CFD基本概念

1、流动控制方程 2、流体力学中的流动模型及流场解 N-S方程→&#xff08;忽略粘性与热扩散&#xff09;→Euler方程→&#xff08;无旋&#xff09;→全速位方程→&#xff08;小扰动&#xff09;→小扰动方程→&#xff08;不可压&#xff09;→labplace方程&#xff1b; 数…

【机器学习】python实现随机森林

目录 一、模型介绍 1. 集成学习 2. bagging 3. 随机森林算法 二、随机森林算法优缺点 三、代码实现 四、疑问 五、总结 本文使用mnist数据集&#xff0c;进行随机森林算法。 一、模型介绍 1. 集成学习 集成学习通过训练学习出多个估计器&#xff0c;当需要预测时通过…

[附源码]SSM计算机毕业设计流浪动物救助网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【百度AI_人脸识别】图片对比相似度、人脸对比登录(调摄像头)

人脸对比 此文档功能&#xff1a; 两张人脸图片相似度对比&#xff1a;比对两张图片中人脸的相似度&#xff0c;并返回相似度分值。存档一张图片与调用的摄像中的人脸进行对比。项目、资源下载&#xff1a;https://download.csdn.net/download/m0_70083523/87150842?spm1001.2…

编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算

编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算1.语法制导翻译1.1属性文法1.2算术表达式的计数器1.3属性的分类1.4属性依赖图继承属性的计算1.5语义规则的计算方法1.6属性计算次序2. S属性定义2.1 语法树与分析树2.2 语法树与DAG2.2.1构造表达式的语法树(DAG)2…

Android中常见的那些内存泄漏——【问题分析+方案】

1.静态Activity(Activity上下文Context)和View 静态变量Activity和View会导致内存泄漏&#xff0c;在下面代码中对Activity的Context和TextView设置为静态对象&#xff0c;从而产生内存泄漏&#xff1b; public class MemoryTestActivity extends AppCompatActivity {private…