日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)

發布時間:2023/12/4 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin和Java混合开发总结(基于Kotlin1.3.0版本) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我本來是不想學習kotlin的,但是現在的形勢,很多公司都在使用kotlin開發,可以說學會kotlin也是無奈之舉,既然是潮流,谷歌也在大力推廣,所以還是只能硬著頭皮逼迫自己學一下,也能更快適應公司的需要。正所謂:“識時務者為俊杰”,改變不了公司的發展,那就改變自己。

廢話少說,直接上正題。本文主要講解kotlin和java混合開發的一個初探。這是一個入門篇的總結博客。我這里使用的Kotlin版本是最新的版本,版本號是 1.3.0

目錄

本文配套源碼請看github:https://github.com/AweiLoveAndroid/Kotlin-learn/

一、Kotlin集成步驟和注意事項(基于Kotlin1.3.0):1.在工程根目錄的 `build.gradle` 里面的 `build` 節點的 `dependencies` 子節點添加一行依賴:build {

dependencies {

// 添加這一行依賴

classpath?"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

}

}

2.在工程根目錄 `build.gradle` 的`build`節點 配置kotlin版本號:build {

ext.kotlin_version =?'1.3.0'

...

}

3.在項目module的 `build.gradle` 的頂部添加以下代碼:applyplugin:?'kotlin-android'

apply plugin:?'kotlin-android-extensions'

4.在項目module的 `build.gradle`的`dependencies` 節點里添加以下代碼:dependencies{

implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

}

5.注意事項:

  • 1.本地kotlin版本路徑:

Android Studio安裝根路徑/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib/

  • 2.不同了版本的依賴庫

1.2.0以前使用這個依賴庫

implementation?"org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"

1.2.0+版本使用這個依賴庫

implementation?"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

  • 3.Tools --> kotlin --> Decompiler Kotlin to Java,如果該選項是灰色,請下載插件 Java Bytecode Decompiler
  • 4.這幾個依賴庫的區別:
依賴庫名稱含義
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"1.2.0版本以前使用的配置,兼容java7
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"1.2.0以前使用的配置,兼容java8
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"1.2.0+版本以前使用的配置,兼容java7
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"1.2.0+版本使用的配置,兼容java8
  • 5.Kotlin下載到本地的路徑在哪里?

工程目錄的末尾有個External Libraries,選擇某一個kotlin的jar包,打開,

右鍵選擇 Show in Explorer,就可以看到kotlin的jar包和資源下載在本地的路徑了。

如下圖所示:

kotlin的所有jar下載的路徑為:

C:/Users/Administrator/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/

Users是我的電腦名。

如下圖所示:

二、Kotlin和Java文件互相轉換(1)Java轉Kotlin

  • 1.選中Java文件,點擊菜單欄Code-->Convert Java File to Kotlin File ,即可把java文件轉換成kotlin文件。

  • 2.點擊右上角提示的 configue ,然后會出現一個彈窗。

  • 3.設置工程里面哪些需要配置kotlin文件支持。比如我這里選中的是single module,module名為kotlinlibrary。還可以選擇kotlin的編譯和運行版本號,比如我選擇的1.2.30,然后點擊OK即可,如下圖所示。

  • 4.然后我們就可以看到項目根路徑的build.gradle和kotlinlibrary這個module的build.gradle都做了kotlin的配置。如圖所示:

根路徑的 build.gradle 配置:

kotlinlibrary 的 build.gradle 配置:

(2)Kotlin轉Java

點擊菜單欄Tools-->Kotlin-->Decompile Kotlin To Java 就可以了,我用的AS3.1.3,不知道為啥我的是灰色的?有人可以告訴我原因嗎?

三、Kotlin項目里面集成Java的module

這一部分源碼請看github:https://github.com/AweiLoveAndroid/Kotlin-learn/tree/master/KotlinAndJavaDemo

(1)創建一個名為 `KotlinAndJavaDemo` 的項目創建一個module,取名為`JavaModule`,跟普通創建一樣,只是最后一步要選擇使用的語言是`Java`,如圖所示:

(2)項目代碼和平常使用Java開發一樣。

代碼、資源文件、預覽圖都和平時開發是一樣的。

(3)如果我們是一個Java的lib庫,kotlin也是可以直接調用的。

我的kotlin的module名為app, 依賴了一個java的名為javalibrary的lib。我需要在app里面使用javalibrary的ResourcesUtils,然后獲取狀態欄高度,如果成功,就彈吐司顯示狀態欄高度。

這個是javalibrary的ResourcesUtils:

/**

* 描述:

* 資源工具類

*/

publicclassResourcesUtils{

/**

* 獲取狀態欄高度

* @return 狀態欄高度

*/

publicstaticintgetStatusBarHeight(Context context){

//獲取status_bar_height資源的ID

intresourceId = context.getResources().getIdentifier(?"status_bar_height",?"dimen",?"android");

if(resourceId >?0) {

//根據資源ID獲取響應的尺寸值

returncontext.getResources().getDimensionPixelSize(resourceId);

}?else{

returndip2px(context,?24f);

}

}

// dp 轉成 px

privatestaticintdip2px(Context context, Float dpValue){

floatscale = context.getResources().getDisplayMetrics().density;

return(?int) (dpValue * scale +?0.5f);

}

}

再來看看app的MainActivity里面的使用:

classMainActivity:?AppCompatActivity() {

overridefunonCreate(savedInstanceState:?Bundle?){

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

init(?this)

}

funinit(context:?Context){

valstatusBarHeight = ResourcesUtils.getStatusBarHeight(context)

Toast.makeText(context,?"狀態欄高度為:$statusBarHeight",Toast.LENGTH_SHORT).show()

}

}

(4)我們在看看看完整的工程結構圖

四、Java項目里面集成Kotlin的module

這一部分源碼請看github:https://github.com/AweiLoveAndroid/Kotlin-learn/tree/master/JavaAndKotlinDemo

(1)創建一個名為 `KotlinAndJavaDemo` 的項目創建一個module,取名為`KotlinModule`,跟普通創建一樣,只是最后一步要選擇使用的語言是`Kotlin`,如圖所示:

(2)項目代碼和平常使用Kotlin開發一樣。

(3)如果我們是一個Kotlin的lib庫,Java也是可以直接調用的。

我的Java的module名為app, 依賴了一個Kotlin的名為kotlinlibrary的lib。我需要在app里面使用kotlinlibrary的ResourcesUtils,然后獲取狀態欄高度,如果成功,就彈吐司顯示狀態欄高度。

這個是kotlinlibrary的ResourcesUtils:

packagecom.lzw.kotlinlibrary

importandroid.content.Context

/**

* 描述:

* 資源工具類

*/

classResourcesUtils{

// 伴生對象 這里面包裹的方法 實際上類似于java的靜態方法

companionobject{

/**

* 獲取狀態欄高度

*?@return狀態欄高度

*/

fungetStatusBarHeight(context:?Context):?Int{

//獲取status_bar_height資源的ID

valresourceId = context.resources.getIdentifier(?"status_bar_height",?"dimen",?"android")

returnif(resourceId >?0) {

//根據資源ID獲取響應的尺寸值

context.resources.getDimensionPixelSize(resourceId)

}?else{

dip2px(context,?40f)

}

}

/**

* dp 轉 px(像素)

*/

fundip2px(context:?Context, dpValue:?Float?):?Int{

valscale = context.resources.displayMetrics.density

return(dpValue!! * scale +?0.5f).toInt()

}

/**

* px(像素) 的單位 轉 dp

*/

funpx2dip(context:?Context, pxValue:?Float?):?Int{

valscale = context.resources.displayMetrics.density

return(pxValue!! / scale +?0.5f).toInt()

}

}

}

再來看看app的MainActivity里面的使用:

publicclassMainActivityextendsAppCompatActivity{

@Override

protectedvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init(?this);

}

privatevoidinit(Context context){

intstatusBarHeight = ResourcesUtils.Companion.getStatusBarHeight(context);

Toast.makeText(context,?"狀態欄高度為:"+ statusBarHeight +?"像素",Toast.LENGTH_SHORT).show();

}

}

(4)我們在看看看完整的工程結構圖

五、同一個module同時使用Java和Kotlin(一)給kotlin文件單獨配置文件路徑

我們還是拿第一個前面的工程KotlinAndJavaDemo為例,我在moduleapp里面同時使用kotlin和java兩種語言做開發。 為了便于區分,需要在該module的build.gradle文件做配置。

默認情況,Kotlin文件存放在src/main/java/文件夾下。若是需要隔開java文件和Kotlin文件,我們可以指定一個專門存放Kotlin文件的文件夾, 首先在src/main目錄下創建文件夾kotlin,然后做以下配置:

android {

// 配置一個路徑專門存放kotlin文件

sourceSets {

main.java.srcDirs +=?'src/main/kotlin'

}

圖示如下:

(二)代碼里面的使用

(1)如果主工程是kotlin寫的,部分是Java寫的。

比如Activity是kotlin寫的,工具類是java寫的,實例代碼如下:

packagecom.lzw.kotlinandjavademo

importandroid.content.Context

importandroid.os.Bundle

importandroid.support.v7.app.AppCompatActivity

importandroid.util.Log

importandroid.widget.Toast

// 使用本包名里面的對應文件

importcom.lzw.kotlinandjavademo.util.ResourcesUtils

classMainActivity:?AppCompatActivity() {

overridefunonCreate(savedInstanceState:?Bundle?){

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

init(?this)

}

funinit(context:?Context){

valstatusBarHeight = ResourcesUtils.getStatusBarHeight(context)

Toast.makeText(context,?"狀態欄高度為:$statusBarHeight像素", Toast.LENGTH_SHORT).show()

Log.e(?"tag",?"狀態欄高度為:$statusBarHeight像素")

}

}

工程目錄結構如圖所示:

(2)如果主工程是Java寫的,部分是Kotlin寫的。

比如Activity是Java寫的,工具類是kotlin寫的,實例代碼如下:

packagecom.lzw.javaandkotlindemo;

importandroid.content.Context;

importandroid.os.Bundle;

importandroid.support.v7.app.AppCompatActivity;

importandroid.widget.Toast;

importcom.lzw.javaandkotlindemo.util.ResourcesUtils;

publicclassMainActivityextendsAppCompatActivity{

@Override

protectedvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init(?this);

}

privatevoidinit(Context context){

intstatusBarHeight = ResourcesUtils.Companion.getStatusBarHeight(context);

Toast.makeText(context,?"狀態欄高度為:"+ statusBarHeight +?"像素",Toast.LENGTH_SHORT).show();

}

}

工程目錄結構如圖所示:

原諒地址:http://www.sohu.com/a/273947418_608959

總結

以上是生活随笔為你收集整理的Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。