React Native开发android应用

1、准备工作:

①首先搭建React Native环境,http://facebook.github.io/react-native/docs/getting-started.html

②用真机运行(我用华为荣耀6)。

react-native run-android这句不需要执行。直接用Android Studio导入项目。

④开启服务器端:react-native start

⑤运行Android Studio中的该项目,会出现红屏。解决红屏需要:调出Dev Setting(华为荣耀6是摇晃手机调出Dev Setting),设置Debug的服务器地址与端口号。

2、开发前说明

①React Native遵循ES6规范。

ES6是对JavaScript的改进,但目前并不支持所有浏览器,所以在Web开发方面并不是很常用。React Native搭载ES6支持,所以完全不需要担心兼容性问题,请随意使用ES6元素importfromclassextends, 和语法 () =>

如果不熟悉ES6,也没关系。语法看多了就会懂,或者点这个连接大致浏览一下this page

②React Native支持JSX语言

开发时除了会看到import,from等之外,还会有<Text>Hello World</Text>,这就是JSX语言。

3、开发Hello World

修改入口文件index.android.js:

import React, { Component } from 'react';
import { AppRegistry, Text } from 'react-native';

class HelloWorldApp extends Component {
  render() {
    return (
      <Text>Hello world!</Text>
    );
  }
}

AppRegistry.registerComponent('HelloWorldApp', () => HelloWorldApp);
运行android项目,即可看到Hello World!字样。

4、理解Hello World程序

①为什么入口文件是index.android.js文件。

通过项目中的AndroidManifest.xml得知主Activit为MainActivity,而MainActivity继承自ReactActivity:

public class MainActivity extends ReactActivity {

ReactActivity的onCreate方法调用了getReactNativeHost().getReactInstanceManager()方法:

mReactRootView.startReactApplication(
      getReactNativeHost().getReactInstanceManager(),//-----调用ReactNativeHost.java中的createReactInstanceManager()方法。
      getMainComponentName(),
      getLaunchOptions());
setContentView(mReactRootView);//---------------------将mReactRootView设置为布局。

getReactInstanceManager()方法调用了ReactNativeHost.java中的createReactInstanceManager()方法:

  public ReactInstanceManager getReactInstanceManager() {
    if (mReactInstanceManager == null) {
      mReactInstanceManager = createReactInstanceManager();
    }
    return mReactInstanceManager;
  }

---------
  protected ReactInstanceManager createReactInstanceManager() {
    ReactInstanceManager.Builder builder = ReactInstanceManager.builder()
      .setApplication(mApplication)
      .setJSMainModuleName(getJSMainModuleName())
      .setUseDeveloperSupport(getUseDeveloperSupport())
      .setInitialLifecycleState(LifecycleState.BEFORE_CREATE);

    for (ReactPackage reactPackage : getPackages()) {
      builder.addPackage(reactPackage);
    }

    String jsBundleFile = getJSBundleFile();
    if (jsBundleFile != null) {
      builder.setJSBundleFile(jsBundleFile);
    } else {
      builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName()));
    }

    return builder.build();
  }

其中,setJSMainModuleName()方法就是配置入口JS的地方:

  /**
   * Returns the name of the main module. Determines the URL used to fetch the JS bundle
   * from the packager server. It is only used when dev support is enabled.
   * This is the first file to be executed once the {@link ReactInstanceManager} is created.
   * e.g. "index.android"
   */
  protected String getJSMainModuleName() {
    return "index.android";
  }

当然,IOS的react-native包中的getJsMainModuleName会指向“index.ios”。


②新建类都继承Component类

如上面HelloWorld代码中HelloWorldApp类,是继承自Component类,Component是react中的一个类。这样的子类可以使用标签形式(<HelloWorldApp>)被调用,可理解为android中的View组件。

另外每个类,都必须有reader()方法,且内部必须返回一个JSX代码块,以达到像android中View似的视图展示的目的。


③AppRegistry注册当前页面,并指示入口类。

https://github.com/facebook/react-native/blob/master/Libraries/AppRegistry/AppRegistry.js

1.registerConfig(config:Array<AppConfig>)  static 静态方法, 进行注册配置信息

2.registerComponent(appKey:string,getComponentFunc:ComponentProvider)  static静态方法,进行注册组件

3.registerRunnable(appKey:string,func:Function)  static静态方法 ,进行注册线程

4.registerAppKeys()  static静态方法,进行获取所有组件的keys值

5.runApplication(appKey:string,appParameters:any)  static静态方法, 进行运行应用

6.unmountApplicationComponentAtRootTag()  static静态方法,结束应用





























RNPolymerPo 是一个基于 React Native 的生活类聚合实战项目,目前由于没有 MAC 设备,所以没有适配 iOS,感兴趣的可以自行适配 app 目录下相关 JS 代码即可。 获取代码与编译调试打包 如下所有步骤及说明均为 React Native Android 的 DIY,涉及命令均为 Ubuntu 环境,Windows 类推即可。 1. 获取代码及模块安装和签名配置 执行如下命令进行代码下载及模块安装: $ git clone https://github.com/yanbober/RNPolymerPo.git $ cd RNPolymerPo $ npm install //如果觉得慢可以先切换到国内 npm 镜像源再执行此命令 配置 Gradle 个人签名路径及属性: //1. 把你个人的签名 my-release-key.keystore 文件(不知道如何生成请自行搜索)放到 RNPolymerPo 工程的 android/app 文件夹下。 //2. 编辑工程的 gradle.properties 文件,添加如下的代码(注意把其中的****替换为你自己相应密码)。 MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=***** 2. 编译打包 APK 文件 编译生成在线快速调试 Debug 开发包,执行如下命令: $ adb reverse tcp:8081 tcp:8081 $ react-native start //开启本地 JS 服务 $ react-native run-android //新终端的 RNPolymerPo 目录下执行 编译生成 release 包,执行如下命令: $ cd android && ./gradlew assembleRelease 拓展规划 下一个版本准备做的事情: 兼容性处理; 夜间模式; 热修复及 PHP 服务端编写; 多语言切换等问题评估;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值