迅猛整理下.,快捷整理下.

图片 1

图片 2

Kotlin 和 斯维夫特, 两大新宠! 借 ReactNative 驾驭下 kotlin
的用法,不料掉坑里面了.明早花了大半夜,趁那会儿思路清楚,把关系到的片段重点音讯,火速整理下.

Kotlin 和 斯维·夫特(Sw·ift), 两大新宠! 借 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"
    }
    

    }

超级的选用 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 初叶化慢,可以改用Tmall源,前边的 –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

有些坑中的经验

  • 即使 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 那一个项目改.

  • 改Tmall源,可以加飞速度,可是每一趟安装依旧要求 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

源码参考:

https://github.com/ios122/kotlin-module-sample-for-reactnative

参照文章

参考小说

相关文章