博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
坑中速记整理! 使用 kotlin 写第一个 ReactNative Android 模块
阅读量:5914 次
发布时间:2019-06-19

本文共 4460 字,大约阅读时间需要 14 分钟。

  hot3.png

preview

Kotlin 和 Swift, 两大新宠! 借 ReactNative 熟悉下 kotlin 的用法,不料掉坑里面了.昨晚花了大半夜,趁这会儿思路清晰,把涉及到的一些关键信息,迅速整理下.

最佳的使用 Kotlin 快速开始写Android模块的方式

  1. react-native init AwesomeProject 生成的 android 目录,是一个标准的 Android Studio 工程,详见:
  2. 直接在 Android Studio 中打开 AwesomeProject/android 目录.
  3. 参考文章 ,先用 java 实现
  4. 顶部菜单 --> code --> Convert Java File to Kotlin File ,自动转换为 kotlin .
package com.awesomeproject.AnExampleReactPackageimport android.widget.Toastimport com.facebook.react.bridge.ReactApplicationContextimport com.facebook.react.bridge.ReactContextBaseJavaModuleimport com.facebook.react.bridge.ReactMethodimport java.util.HashMap/** * Created by yanfeng on 2017/10/12. */class ToastModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {    override fun getName(): String {        return "ToastExample"    }    override fun getConstants(): Map
? { val constants = HashMap
() constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT) constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG) return constants } @ReactMethod fun show(message: String, duration: Int) { Toast.makeText(reactApplicationContext, message, duration).show() } companion object { private val DURATION_SHORT_KEY = "SHORT" private val DURATION_LONG_KEY = "LONG" }}

一些坑中的经验

  • 如果 ReactNative 初始化慢,可以改用淘宝源,后面的 --verbose 参数,主要用来辨别是否卡住.
npm install -g nrmnrm use taobaonpm install -g react-native-cli --verbosereact-native init AwesomeProject --verboses
  • RN 与已有项目集成的原理是,把已有的 Android 项目复制到 android 文件夹,然后改下配置.

  • 如果没有已有的运行良好的项目,不要尝试用 Android Studio 直接新建项目,因为 Android Studio 的默认 SDK 版本(25.3.1) 和 ReactNative 的SDK版本(23.0.1) 不一致,所以在根据 RN 文档,改配置,会遇到各种问题.如果非要模拟,建议直接基于 AwesomeProject/android 这个项目改.

  • 改淘宝源,可以加快速度,但是每次安装还是需要 20~40 分钟(取决于网络环境等).如果本地再起一个 sinopia ,这样第二次初始化 RN 时,只需要 3 ~ 5 分钟.详见:

  • 如果遇到 All com.android.support libraries must use the exact same version specification 一类的错误,又必须解决的话,可以尝试查看依赖关系,看到底是哪里在冲突:

命令是:

./gradlew -q dependencies app:dependencies --configuration compile

可能的输出:

+--- com.android.support.constraint:constraint-layout:1.0.0-beta2|    \--- com.android.support.constraint:constraint-layout-solver:1.0.0-beta2\--- com.facebook.react:react-native:+ -> 0.20.1     +--- com.google.code.findbugs:jsr305:3.0.0     +--- com.facebook.stetho:stetho-okhttp:1.2.0     |    +--- com.google.code.findbugs:jsr305:2.0.1 -> 3.0.0     |    +--- com.facebook.stetho:stetho:1.2.0     |    |    +--- com.google.code.findbugs:jsr305:2.0.1 -> 3.0.0     |    |    \--- commons-cli:commons-cli:1.2     |    \--- com.squareup.okhttp:okhttp:2.2.0 -> 2.5.0     |         \--- com.squareup.okio:okio:1.6.0     +--- com.squareup.okhttp:okhttp-ws:2.5.0     |    \--- com.squareup.okhttp:okhttp:2.5.0 (*)     +--- com.facebook.fresco:fresco:0.8.1     |    +--- com.facebook.fresco:imagepipeline:0.8.1     |    |    +--- com.nineoldandroids:library:2.4.0     |    |    +--- com.facebook.fresco:fbcore:0.8.1     |    |    +--- com.android.support:support-v4:21.0.3 -> 23.0.1     |    |    |    \--- com.android.support:support-annotations:23.0.1     |    |    \--- com.parse.bolts:bolts-android:1.1.4     |    +--- com.facebook.fresco:fbcore:0.8.1     |    \--- com.facebook.fresco:drawee:0.8.1     |         +--- com.facebook.fresco:fbcore:0.8.1     |         \--- com.android.support:support-v4:21.0.3 -> 23.0.1 (*)     +--- org.webkit:android-jsc:r174650     +--- com.fasterxml.jackson.core:jackson-core:2.2.3     +--- com.squareup.okhttp:okhttp:2.5.0 (*)     +--- com.facebook.fresco:imagepipeline-okhttp:0.8.1     |    +--- com.squareup.okhttp:okhttp:2.3.0 -> 2.5.0 (*)     |    +--- com.facebook.fresco:imagepipeline:0.8.1 (*)     |    \--- com.facebook.fresco:fbcore:0.8.1     +--- com.squareup.okio:okio:1.6.0     +--- com.android.support:recyclerview-v7:23.0.1     |    +--- com.android.support:support-v4:23.0.1 (*)     |    \--- com.android.support:support-annotations:23.0.1     +--- com.facebook.stetho:stetho:1.2.0 (*)     \--- com.android.support:appcompat-v7:23.0.1          \--- com.android.support:support-v4:23.0.1 (*)(*) - dependencies omitted (listed previously)
  • kotlin,会自动引入库; java,点击提示不存在的类,然后使用 Alt + 回车 也可以快速引入.

  • RN 的文档可能是错的.如果提示方法名总是不对,可以尝试下手动输入,看下提示,可能真的变了.

  • 执行 react-native run-android 可能比在 Android Studio 中运行方便;但是第二次执行原生 Android 代码时, Android Studio Run Build 的速度非常快,是更好的选择.

  • 如果是真机,可能需要:

adb reverse tcp:8081 tcp:8081
  • 遇到诡异的问题时,可以尝试先: clean build

源码参考:

参考文章

转载于:https://my.oschina.net/ios122/blog/1549914

你可能感兴趣的文章
性能测试分享:性能测试工具开发的案例分享(下)
查看>>
linux sar命令详解
查看>>
通过Gearman实现MySQL到Redis的数据复制
查看>>
eclipse 自动为getter和setter添加注释
查看>>
kafka 监控之Mx4jLoader
查看>>
XBImageFilters
查看>>
Hadoop之HDFS的常用命令
查看>>
分布式系统架构解决方案之Dubbo(三)--Dubbo管理端 和 Dubbo综合案例
查看>>
The function getUserId must be used with...解决办法
查看>>
Class yii\base\View
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
使用Unirest发送Json的格式数据
查看>>
目前所学的关键字整理
查看>>
我的友情链接
查看>>
Eclipse常用配置
查看>>
linux修改IP和DNS
查看>>
我的友情链接
查看>>
WordPress新增Page的模版文件
查看>>
WP移动设备压缩与解压控件Xceed Zip for .NET Compact Framework控件下载及详细介绍使用方法...
查看>>