IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> React Native中使用Kotlin -> 正文阅读

[移动开发]React Native中使用Kotlin

写在前面

github项目地址

目前该项目做了部分修改,但仍可以clone之后使用git回退到第二个commit的版本查看计算A+B测试的完整代码,具体步骤:

  1. git clone https://github.com/zih-an/RNwithKotlin.git
  2. cd RNwithKotlin
  3. git log,找到以下红色箭头 modify the readme 的版本在这里插入图片描述4. git checkout 40c057ddc645762d3b31126f923971c1890a57fa 即可!(此时该项目即为本博客的A+B示例完整版)

介绍

现希望用 kotlin 计算 a+b 的值返回,用 react-native 调用并显示结果

  • a+b在文件AlertManager.kt
    • fun trigger(a:Double, b:Double, resPromise:Promise)
  • react-native只能使用async & await接收结果,参见文件App.js
  • 此外,java和kotlin同时存在并不影响,因此react-native生成的java文件不用动

详细步骤

1 初始化React Native项目

详情参考官网
npx react-native init RNwithKotlin

2 使用Android Studio打开 android 文件夹

2.1 android/build.gradle

buildscript {
  //== add 1. ==
  ext.kotlin_version = "1.4.32"
  ...
  repositories {
    ...
    //== add 2. ==
    maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
  }
  dependencies {
    ...
    //== add 3. ==
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  }
}

allprojects {
  repositories {
    ...
    //== add 4. ==
    jcenter()
    maven { url 'https://www.jitpack.io' }
  }
}

2.2 android/app/build.gradle

/**============ add here ===============*/
apply plugin: "kotlin-android"

...

android {
  ...
//============== add here =======================
  buildFeatures {
    viewBinding true
  }
}

dependencies {
  ...
//============== add here =======================
  implementation "org.jetbrains.kotlin:kotlin-stdlib"
  ...
}

2.3 aplusb.kt

package com.rnwithkotlin

import android.view.View
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ViewManager
import java.util.*

class AplusB:ReactPackage {
    override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
        val modules = ArrayList<NativeModule>()
        modules.add(AlertManager(reactContext))
        return modules
    }

    override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
        return Collections.emptyList<ViewManager<*, *>>()
    }
}

2.4 AlertManager.kt

package com.rnwithkotlin

import android.content.Intent
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
import com.facebook.react.bridge.Promise;

class AlertManager(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
    private final var TAG = "AlertMangager";
    override fun getName(): String {
        return "Alt"
    }

    @ReactMethod
    //=========== a+b here ===============
    // have to use promise to get the result async.
    fun trigger(a:Double, b:Double, resPromise:Promise) {
        resPromise.resolve(a+b);
    }

}

2.5 MainApplication.java

@Override
protected List<ReactPackage> getPackages() {
  @SuppressWarnings("UnnecessaryLocalVariable")
  List<ReactPackage> packages = new PackageList(this).getPackages();

//============================= add here ===============================
  packages.add(new AplusB());

  // Packages that cannot be autolinked yet can be added manually here, for example:
  // packages.add(new MyReactNativePackage());
  return packages;
}

3 export the module

in kotlin.js:

import {NativeModules} from 'react-native';
const {Alt} = NativeModules;
console.log('Alt: ', Alt);
export default Alt;

现在可以调用 Alt.trigger(a,b),例如App.js 中:

import React from 'react';
import {View, Text} from 'react-native';
import Alt from './kotlin';

export default class App extends React.Component {
  state = {res: 0};

  async componentDidMount() {
    let tmp = await Alt.trigger(10, 3); // test value here!
    console.log(tmp);
    this.setState({res: tmp});
  }

  render() {
    return (
      <View>
        <Text>Hello ReactNative</Text>
        <Text>this is a+b from kotlin: {this.state.res}</Text>
      </View>
    );
  }
}

4 测试

npx react-native run-android

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:12:56  更:2022-03-06 13:16:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:26:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码