集成react-native-baidu-map及遇到的问题

公司之前开发的地图类APP主要以原生Native的方式实现,现在想要封装一套兼容iOS和Android双平台的sdk。

考虑方向为React-Native和Web-Native,而RN更接近原生效果,所以最终决定使用RN封装地图sdk。

看到Githup上react-native-baidu-map已经使用RN对百度地图做了基础的实现,所以先download下来,运行一下。

参考了

文章 react-native 实现百度地图(ios&Android),感谢 sybil052

一、集成

1) 初始化本地项目

在WorkSpace目录下 shift+右键打开命令窗口,输入下句命令:

react-native init BaiduMapDemo

2) 安装开源项目库

切换到项目的根目录,输入以下命令:

npm install react-native-baidu-map --save
或
yarn add react-native-baidu-map

3) 集成demo并配置

参考了
文章 react-native-baidu-map,感谢 妄自
下载react-native-baidu-map 中demo,并将demo中BaiduMapDemo.js拷贝到新建项目根目录下

项目根目录index.js如下修改

// import App from './App';
import BaiduMapDemo from './BaiduMapDemo';

// AppRegistry.registerComponent('BaiduMapDemo', () => App);
AppRegistry.registerComponent('BaiduMapDemo', () => BaiduMapDemo);

setting.gradle中添加

include ':react-native-baidu-map'
project(':react-native-baidu-map').projectDir = new File(settingsDir, '../node_modules/react-native-baidu-map/android')

app/build.gradle的dependencies中添加

compile project(':react-native-baidu-map')

MainApplication.java中添加

import org.lovebing.reactnative.baidumap.BaiduMapPackage;

        @Override
        protected List getPackages() {
            return Arrays.asList(
                    new MainReactPackage(),
                    new BaiduMapPackage(getApplicationContext())//添上这一句,不要忘记上面的逗号。
            );
        }

在AndroidMainifest.xml中添加
注意:权限不要重复添加,react-native编译有时不通过。

    
    
    
    
    
    
    
    
    
    
    
    
    

application标签内添加


二、遇到的问题及处理方法

(1)

...\node_modules\react-native-baidu-map\android\src\main\java\org\lovebing\reactnative\baidumap\BaiduMapPackage.java
Error:(49, 5) 错误: 方法不会覆盖或实现超类型的方法

    @Override
    public List> createJSModules() {
        return Collections.emptyList();
    }

ReactPackage 接口中并没有createJSModules()方法,注释掉@Override即可。

(2)

undefined is not an object (evaluating '_react2.PropTypes.bool'
从React15.5起,React.PropTypes被移入到单独的package中。react提供了一个package(prop-types)去检查props的类型。首先需要将prop-types引用到文件中。
更改项目中对组件原的引用方式,在此项目中需要在node_modules\react-native-baidu-map\js\MapView.js文件中

import React, {
  Component,
  PropTypes
} from 'react';

更改为

import React, {
  Component
} from 'react';

import { PropTypes} from 'prop-types';

(3)

项目能运行,地图不显示。
主要因为keystore和及其配置。
把keystore拷贝到 项目\android\keystores目录下,
并在 项目\android\app\build.gradle中配置

signingConfigs {
            debug {
                storeFile file('../keystores/debug.keystore')
                storePassword "android"
                keyAlias "androiddebugkey"
                keyPassword "android"
            }
        }

(4)

提示MainActivity不存在 Activity is not exist

项目\android\app\src\main\AndroidManifest.xml中的 package
与 项目\android\app\build.gradle中的applicationId保持一致。


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "此处"

你可能感兴趣的:(集成react-native-baidu-map及遇到的问题)