React Native StackOverflowError

### Crash日志

```

Process: com.apex.livebos.stock, PID: 26510

java.lang.StackOverflowError

at android.text.MeasuredText.addStyleRun(MeasuredText.java:172)

at android.text.MeasuredText.addStyleRun(MeasuredText.java:204)

at android.text.StaticLayout.generate(StaticLayout.java:295)

at android.text.StaticLayout.(StaticLayout.java:150)

at android.text.StaticLayout.(StaticLayout.java:100)

at android.text.StaticLayout.(StaticLayout.java:78)

at android.text.StaticLayout.(StaticLayout.java:58)

at com.facebook.react.views.text.ReactTextShadowNode$1.measure(ReactTextShadowNode.java:229)

at com.facebook.csslayout.CSSNode.measure(CSSNode.java:137)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:294)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:492)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.csslayout.LayoutEngine.layoutNodeImpl(LayoutEngine.java:633)

at com.facebook.csslayout.LayoutEngine.layoutNode(LayoutEngine.java:210)

at com.facebook.cssl

```

### 问题表现栈溢出.### 解决方法google

* https://github.com/facebook/react-native/issues/5997

* https://github.com/facebook/react-native/pull/6817

*修改源码并编译:

  参考: https://github.com/facebook/react-native/pull/6817/commits/797af3f237c430aa6081f3d88018ed1cd6762506

 

### 编译源码(目标是自己的工程直接引用node_module/ReactAndroid)

* 参考: http://facebook.github.io/react-native/docs/android-building-from-source.html#content

* 直接使用node_module/ReactAndroid下的文件, 不要自己clone, clone代码编译有问题;

* 修改android/build.gradle

 

```

...

    dependencies {

        classpath 'com.android.tools.build:gradle:1.3.1'

        classpath 'de.undercouch:gradle-download-task:2.0.0'

 

        // NOTE: Do not place your application dependencies here; they belong

        // in the individual module build.gradle files

    }

...

```  

 

* 自己工程依懒:ReactAndroid

   * 修改android/settings.gradle

   

   ```

   ...

include ':ReactAndroid'

 

project(':ReactAndroid').projectDir = new File(

    rootProject.projectDir, '../node_modules/react-native/ReactAndroid')

...

   ```

   

  * 修改android/app/build.gradle把原来引用react-native包换成ReactAndroid库工程;

  compile 'com.facebook.react:react-native:0.16.+' ==> compile project(':ReactAndroid'):

  

  ```

  dependencies {    

 compile fileTree(dir: 'libs', include: ['*.jar'])    

 compile 'com.android.support:appcompat-v7:23.0.1'    

 compile 'com.android.support:multidex:1.0.1'    

 compile project(':ReactAndroid')    

 compile 'com.umeng.analytics:analytics:latest.integration'    

 compile(project(':ReactNativeBarcodescanner')) {       

 exclude group: 'com.facebook.react', module: 'react-native'    

 }    

 compile(project(':react-native-code-push')) {        

 exclude group: 'com.facebook.react', module: 'react-native'    

 }

 }

  ``` 

  

  * 其它相关lib工程如果引用了ReactAndroid工程

  * 删除ReactAndroid/build/intermediates/assets/androidTest目录, 否则npm start及打包js时报如下错误:

  

  ```

   ailed to build DependencyGraph: Naming collision detected: /Users/wv/work/d2papp/src/master/node_modules/react-native/ReactAndroid/build/intermediates/assets/androidTest/debug/ScrollViewTestModule.js collides with /Users/wv/work/d2papp/src/master/node_modules/react-native/ReactAndroid/src/androidTest/assets/ScrollViewTestModule.js

Error: Naming collision detected: /Users/wv/work/d2papp/src/master/node_modules/react-native/ReactAndroid/build/intermediates/assets/androidTest/debug/ScrollViewTestModule.js collides with /Users/wv/work/d2papp/src/master/node_modules/react-native/ReactAndroid/src/androidTest/assets/ScrollViewTestModule.js

    at HasteMap._updateHasteMap (HasteMap.js:132:13)

    at HasteMap.js:103:28

    at tryCallOne (/Users/wv/work/d2papp/src/master/node_modules/promise/lib/core.js:37:12)

    at /Users/wv/work/d2papp/src/master/node_modules/promise/lib/core.js:123:15

    at flush (/Users/wv/work/d2papp/src/master/node_modules/asap/raw.js:50:29)

    at nextTickCallbackWith0Args (node.js:452:9)

    at process._tickCallback (node.js:381:13)

```

 

猜你喜欢

转载自wv1124.iteye.com/blog/2290007
今日推荐