美文网首页爱上Android
ReactNative学习——原生Android项目集成RN

ReactNative学习——原生Android项目集成RN

作者: b77535296c81 | 来源:发表于2017-08-26 16:51 被阅读1524次

    准备前工作:

    1、RN环境(python2、nodejs)

    2、使用AndroidStudio创建好一个Demo工程

    一、基础文件添加

    1、package.json文件添加

    这个文件可以从已有的RN项目里面copy到Demo工程根目录下,也可以自己新建一个空白的package.json文件,粘贴下面的代码:

    注意:name替换成自己的项目名

    {
    "name": "HelloRN",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "16.0.0-alpha.12",
        "react-native": "0.47.2"
    },
    "devDependencies": {
        "babel-jest": "20.0.3",
        "babel-preset-react-native": "3.0.1",
        "jest": "20.0.4",
        "react-test-renderer": "16.0.0-alpha.12"
    },
    "jest": {
        "preset": "react-native"
    }
    }
    

    2、index.android.js文件添加

    这个文件是添加在项目根目录下,可以直接从已有RN项目里面cooy过来,或者自己新建index.android.js,粘贴下面的代码(代码来源官网的HelloWorld):

    import React, { Component } from 'react';
    import { AppRegistry, Text } from 'react-native';
    
    class HelloWorldApp extends Component {
        render() {
        return (
          <Text>Hello world!</Text>
        );
     }
    }
    
    // 注意,这里用引号括起来的'HelloWorldApp'必须和你init创建的项目名一致
    AppRegistry.registerComponent('HelloWorldApp', () => HelloWorldApp);
    

    二、安装npm模块

    使用AndroidStudio自带的命令行,输入npm install,执行完成后,会在根目录看到新增node_modules文件

    三、依赖添加

    1、根目录的build.gradle文件

    allprojects节点下,添加如下代码:

    maven {
          
            url "$rootDir/node_modules/react-native/android"
    }
    

    2、主moudle的build.gradle文件

    dependencies节点下添加:compile "com.facebook.react:react-native:+" // From node_modules;

    也就是我们平时添加依赖的地方

    dependencies {
        ...
        compile "com.facebook.react:react-native:+"  // From node_modules
        ...
    }
    

    四、代码部分修改

    前提:完成上面的步骤,重新编译通过(否则下面会出现找不到类)

    1、Application

    项目的Application需要实现RNReactApplication接口

    注意:下面BuildConfig要导入自己项目包名下的,不要导成了faceBook或者其他lib库的

    public class HelloRnApplication extends Application implements ReactApplication {
    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        public boolean getUseDeveloperSupport() {
            //注意:BuildConfig需要导入自己项目包名下的BuildConfig
            return BuildConfig.DEBUG;
        }
    
        @Override
        protected List<ReactPackage> getPackages() {
            return Arrays.<ReactPackage>asList(
                    new MainReactPackage()
            );
        }
    };
    
    @Override
    public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
    }
    }
    

    如果没配置Application的,还需要到AndroidManifest.xml文件中完成配置:

    2、Activity

    需要继承自ReactActivity,或者网上也方案实现DefaultHardwareBackBtnHandler接口也可以

    public class ReactNativeActivity extends ReactActivity {
    
    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
        @Override
        protected String getMainComponentName() {
            return "HelloRN";
        }
    }
    

    3、AndroidManifest.xml

    增加两项权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    

    五、启动npm服务

    进入到项目的工作空间目录,ctrl+鼠标右键,在此处打开命令行,执行react-native start指令,启动npm服务端

    相关文章

      网友评论

        本文标题:ReactNative学习——原生Android项目集成RN

        本文链接:https://www.haomeiwen.com/subject/xgfvdxtx.html