Android Studio 中 Java 调用 Kotlin 代码的两种入口实现,包含环境配置。安卓开发的 app 和纯代码的 main 两种入口

  1. 背景信息

    • 开发背景

      笔者基于 Kotlin 开发头戴设备部署 AI 模型的时候,所参照的示例普遍也基于 Kotlin 实现,之所以出现 Java 和 Kotlin 要互相调用的情况,是因为要适配相对成熟的 Java for Android 开发。

      前辈们已经为此目的铺好了路,所以这里分享完整的互相调用的示例,而不是只呈现核心代码或注意事项的情况。同时非常感谢公司对笔者研发的支持,给予了足够的耐心让笔者向网上的前辈学习,希望能够在解决一个个的问题中,早日为公司的边缘端设备赋能 AI,而且稳定又好用。

    • 开发环境

      Android Studio Narwhal | 2025.1.1 Patch 1

  2. app 入口

    1. build.gradle.kts 的配置没有什么特殊要求,笔者是沿着 Android Studio 所创建的Empty模板而完成的本文。如果计划将kotlin/java所开发的代码作为模块导入,则在dependencies块中加入如下类似的配置即可。

      KotlinForJava是笔者创建的模块名

      implementation(project(":KotlinForJava"))
      
    2. app\src\main\res\activity_main.xml

      <?xml version="1.0" encoding="utf-8"?>
      <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".MainActivity">
      
          <TextView
              android:id="@+id/myTextView"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello World!"
              app:layout_constraintBottom_toBottomOf="parent"
              app:layout_constraintLeft_toLeftOf="parent"
              app:layout_constraintRight_toRightOf="parent"
              app:layout_constraintTop_toTopOf="parent" />
      
      </androidx.constraintlayout.widget.ConstraintLayout>
      
    3. MainActivity.java

      注意,此处Detector的实例化是从模块中导入的

      package com.example.javacallkotlinpurecode;
      
      import androidx.appcompat.app.AppCompatActivity;
      
      import android.os.Bundle;
      import android.util.Log;
      import android.widget.TextView;
      
      import com.example.kotlinforjava.purecode.Detector;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              TextView myTextView = findViewById(R.id.myTextView);
      
              Detector detector = new Detector();
              String message = detector.detect();
      
              MyKotlinUtils tester = new MyKotlinUtils();
              String testerMsg = tester.greetingFromKotlin();
      
              myTextView.setText(message);
              Log.i("JAVA Caller", testerMsg);
          }
      }
      
      
    4. MyKotlinUtils.kt

      注意本代码同 MainActivity.java是同在app\src\main\java\com\example\javacallkotlinpurecode目录下

      package com.example.javacallkotlinpurecode
      
      class MyKotlinUtils {
          fun greetingFromKotlin(): String {
              return "Hello form Kotlin in the same directory level!"
          }
      }
      

    此时 Android Studio 在MainActivity.javamain方法处应该就有一个绿色的运行按钮了。

  3. main 入口

    在 Android Studio 中,笔者实现的是以模块的形式运行纯代码

    1. build.gradle.kts

      重点是id("java-library"),其意思为构建一个纯 Java 库

      plugins {
          id("java-library")
          alias(libs.plugins.jetbrains.kotlin.jvm)
      }
      java {
          sourceCompatibility = JavaVersion.VERSION_11
          targetCompatibility = JavaVersion.VERSION_11
      }
      kotlin {
          compilerOptions {
              jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
          }
      }
      
      
      
    2. Detector.kt

      package com.example.kotlinforjava.purecode
      
      class Detector() {
          fun detect(): String {
              return "Kotlin: Aloha!!"
          }
      }
      
    3. Main.java

      package com.example.kotlinforjava.purecode;
      
      public class Main {
          public static void main(String[] args) {
              System.out.println("Java main method started.");
      
              Detector detector = new Detector();
      
              System.out.println(detector.detect());
      
              System.out.println("Java main method finished.");
          }
      }
      

      此时就可以看到如下的输出了
      在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值