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

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

  1. react-native init AwesomeProject 生成的 android 目录,是一个标准的 Android Studio 工程,详见: http://facebook.github.io/react-native/docs/getting-started.html
  2. 直接在 Android Studio 中打开 AwesomeProject/android 目录.
  3. 参考文章 http://facebook.github.io/react-native/docs/native-modules-android.html,先用 java 实现
  4. 顶部菜单 --> code --> Convert Java File to Kotlin File ,自动转换为 kotlin .
package com.awesomeproject.AnExampleReactPackage

import android.widget.Toast

import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod import 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<String, Any>? {
val constants = HashMap<String, Any>()
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 nrm
nrm use taobao
npm install -g react-native-cli --verbose
react-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 分钟.详见: https://github.com/rlidwka/sinopia

  • 如果遇到 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://github.com/ios122/kotlin-module-sample-for-reactnative

参考文章

坑中速记整理! 使用 kotlin 写第一个 ReactNative Android 模块的更多相关文章

  1. kotlin 写的一个简单 sql 查询解析器

    package com.dx.efuwu.core import org.apache.commons.lang.StringUtils import java.sql.PreparedStateme ...

  2. Androng,一个针对Android的Pong克隆

    下载application from Android market 下载source - 532 KB 内容 IntroductionAndroid游戏开发 活动视图绘图使用CanvasAnimati ...

  3. 升级WebService图形服务,将K10.2和K10.3写到一个类库,所有服务放在一个类库

    问题描述: 平时负责电子政务和图形调用部分,凡是牵涉到图形的都需要调用WebService服务,因此很多工程都需要添加web服务引用,现在WebForm的工程一个是10.2版本,一个是10.3版本,区 ...

  4. iOS-如何写好一个UITableView

    如何写好一个UITableView 字数5787 阅读3745 评论25 喜欢69 本文是直播分享的简单文字整理,直播共分为上.下两部分.第一部分:优酷 Or YouTube,第二部分:优酷 Demo ...

  5. 自己写的一个简单PHP采集器

    自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...

  6. 用bat写的一个小病毒

    最近看了一点bat的知识,具体说是看了一个博客:http://blog.csdn.net/qsyzb/article/details/17364581 用了三天才看完=.=,感觉作者整理整理可以把博客 ...

  7. 访问github太慢?我写了一个开源小工具一键变快

    前言 GitHub应该是广大开发者最常去的站点,这里面有大量的优秀项目,是广大开发者寻找资源,交友学习的好地方.尤其是前段时间GitHub公布了一项代码存档计划--Arctic Code Vault, ...

  8. 用Kotlin创建第一个Android项目(KAD 01)

    原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...

  9. 搞了我一下午竟然是web.config少写了一个点

    Safari手机版居然有个这么愚蠢的bug,浪费了我整个下午,使尽浑身解数,国内国外网站搜索解决方案,每一行代码读了又想想了又读如此不知道多少遍,想破脑袋也想不通到底哪里出了问题,结果竟然是web.c ...

随机推荐

  1. 第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)

    目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的  (3) 分析stext函数如何启动内核:  (3.1) ...

  2. asp.net MVC下使用rest

    前言 最近做了下个MVC的项目,需要用到rest接口,与java写的应用程序通信,包括数据的接收和发送,那么我将用实用的角度来全面的讲解一下它的使用方法 一.创建rest服务 首先创建一个Asp.Ne ...

  3. 【Alpha】第七次Daily Scrum Meeting

    GIT 一.今日站立式会议照片        二.会议内容 1.讨论送礼物的方法和对象,使功能更加完善. 2.对于程序还存在的问题提出自己的看法,尽量让功能更加的饱满. 三.燃尽图 四.遇到的困难 能 ...

  4. 201521123111《Java程序设计》第6周学习总结

    1. 本章学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  5. 201521123077 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 向对象思想总结 1.2 使用常规方法总结其他上课内容 Swing一些常用组件的基本用法 Object类的clone及hashcode方法 2. 书面作业 1. clone方 ...

  6. 201521123096《Java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 (1)代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过 ...

  7. Emacs操作指南

  8. 201521123071 《JAVA程序设计》第十周学习总结

    第十周-异常与多线程 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业:本次PTA作业题集异常.多线程 1. finally:题目4-2 1. ...

  9. Babel初体验

    原文地址:→传送门 写在前面 现在es6很流行,尽管各大浏览器都还不能支持它的新特性,但是小伙伴们还是很中意它呀,于是小小的学习的一下 Babel 这里我们不介绍es6相关内容,只是说下入坑前奏,记录 ...

  10. Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'zhongfucheng.user' does

    编写第一个Hibernate程序的时候,就发现出现了错误 Exception in thread "main" org.hibernate.exception.SQLGrammar ...