android 架构之集成react native框架js混编APP
本篇文章主要总结一下现在APP当中使用的js、webView混编架构和技术。
什么是 js 混编?
js混编简单说就是使用JavaScript开发APP程序。
android应用使用的是java,Kotlin 、c/c++ 为主的语言开发,ios使用的object-c 、 swift、c/c++ 为主语言开发,由于市场是基本都是android和ios手机,所以一般公司开发什么项目android和ios的APP都必须开发。android和ios都提供一个库webkit浏览器引擎的支持,android提供了一个组件webView用于显示网页,相当于一个内置浏览器,ios也有类似一个组件UIWebView;webView和UIWebView也都支持js bridge的模式,就是js与java或者object-c进行交互,那么就产生一种开发模式就是hybrid APP开发模式。
hybrid 应用
hybrid APP开发模式由于可以使用HTML5 、css、js进行大量UI开发得到了飞速的房展,到后面这类开发也出现很多优秀的框架例如:cordova(phoneGap) ionic 等,他们基本架构都是使用浏览器组件(webView,UIWebView)渲染UI,使用js调用原生代码执行手机功能。那么随后发展中hybrid应用也暴露很多问题。
hybrid 应用缺点
- UI渲染性能差,例如加载白屏,渲染卡顿
- 内存消耗高,主要是没有优秀的回收复用机制,例如原生recyclerView
- 用户交互差,用户触摸反应迟钝等
- UI渲染失真
那么为了解决hybrid APP中的鸡肋痛点,那么也产生除了很多记得新js 混编开发框架,例如react native(facebook 公司出品), Xamarin(微软公司出品);这种框架已经不再是hybrid模式,应该叫做js native APP 开发模式。
js native 应用(react native ,Xamarin )
js native 应用克服了很hybrid的缺点,他是通过js开发使用自定义封装UI控件进行开发,最终打包成原生应用。
1、优点
- 原生级别的UI渲染
- 没有通过webView来进行桥接,减少内存消耗
- 用户体验迅速,触摸流畅
- 提供原生方法调用自定义接口,和自定义UI组件的封装使用,可以无缝对接你现在应用
- android和ios端高度UI一致性
其实缺点也是比较明显,例如:
1、缺点
- 一定的学习成本,相当于学习新的开发技术
- 项目避免不了封装自定义方法和UI控件,桥接代码多
- 项目维护成变高了
总体而言优点还是跨平台,相对选择js混编框架还是推荐使用react native。
react native整合进入android应用 ,加入js开发模式
操作步骤:
配置好React Native依赖和项目结构。
创建js文件,编写React Native组件的js代码。
在应用中添加一个RCTRootView。这个RCTRootView正是用来承载你的React Native组件的容器。
启动React Native的Packager服务,运行应用。
验证这部分组件是否正常工作。
开始前我们必须使用react native脚手架搭建出一个可以运行的hello world 项目,本文介绍主要是集成react native框架进入现有应用重点不是环境搭建,所以你可以自行百度react native官网的初始化项目文章。
假设你现在已经有了环境了和一个可以运行hello world 项目了 那么我们可以开始接入现有应用了。
hello world 项目项目目录如图:
复制node_modules目录和package.json进入你android项目跟目录如图:
创建index.android.js 文件放入android根目录,写入代码:
'use strict';import React from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
TouchableOpacity,
NativeModules,
ToastAndroid,
requireNativeComponent,
DeviceEventEmitte,
Alert
} from 'react-native';
class HelloWorld extends React.Component {
constructor(props) {
super(props);
}
componentWillMount() {
}
render() {
return (
<View style={styles.container}>
<Text style={{alignItems:'flex-start', backgroundColor:'red', height:49, textAlign:'right'}}>
作者jason 李
</Text>
</View>
)
}
}
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
flexDirection: 'column',
},
hello: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
});
AppRegistry.registerComponent('HelloWorlds', () => HelloWorld);
接下是android部分了:
在入口gradle文件加入代码:
allprojects { repositories {
google()
jcenter()
maven {
url "$rootDir/node_modules/react-native/android" //加入这句
}
}
}
在项目gradle文件中加入依赖:
compile "com.facebook.react:react-native:0.55.3"
创建Application程序:
public class MyApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new MyPackage()
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}
创建react activity:
public class MyReactActivity extends Activity implements DefaultHardwareBackBtnHandler { private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
// 注意这里的MyReactNativeApp必须对应“index.js”中的
// “AppRegistry.registerComponent()”的第一个参数
mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorlds", null);
setContentView(mReactRootView);
}
@Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
}
加入权限:
<uses-permission android:name="android.permission.INTERNET" />
至此所有的配置结束!!!
运行测试
在目录打开cmd:输入
yarn start
然后用Android studio运行你的项目!!
以上是 android 架构之集成react native框架js混编APP 的全部内容, 来源链接: utcz.com/z/382208.html