1.å¦ä½å建ä¸ä¸ªandroidçreact-nativeç»ä»¶
2.React Native框架写小程序,标源并运行在App的源码一种方法
å¦ä½å建ä¸ä¸ªandroidçreact-nativeç»ä»¶
Step 1 - æ°å»ºreact-nativeå·¥ç¨ ReactNativeToastAndroid
$ react-native init ReactNativeToastAndroid1
Step 2 - å°æ°å»ºçå·¥ç¨å¯¼å ¥android studioç¶åæ°å»ºç©ºlibraryï¼ä»¥react-native-toast-android为libraryçå称ï¼ä¹æ以è¦æ°å»ºä¸ä¸ªlibraryèä¸å¨ReactNativeToastAndroidå·¥ç¨ä¸åå¢ï¼ä¸»è¦æ¯ä¸ºäºæ¹ä¾¿ä¸ä¼ å°npmågithubä¸æ¹ä¾¿å ¶ä»å¼åè 使ç¨ï¼ä¸è¬ä»¥react-native-xxx-androidå½åæ¹ä¾¿è¯å«è¿æ¯react-nativeç»ä»¶ã
Step 3 - æ°å»ºç©ºlibraryï¼ä»¥react-native-toast-android为libraryçå称ï¼
å¨libraryç®å½ä¸çbuild.gradleä¸æ·»å react-nativeçä¾èµ
// file: android/react-native-toast-android/build.gradle
â¦
dependencies {
â¦
compile 'com.facebook.react:react-native:0..+'
}
Step 4 - 继æ¿ReactContextBaseJavaModule ï¼å¤§å®¶å¯ä»¥å¾ææ¾çåç°showï¼ï¼æ¹æ³ä¸å¤äºä¸ä¸ªâ@ReactMethodâï¼å ä¸äºâ@ReactMethodâçæ¹æ³å¯ä»¥è¢«jsè°ç¨ã
public class AndroidToastModule extends ReactContextBaseJavaModule {
private static final String DURATION_SHORT_KEY = âSHORTâ;
private static final String DURATION_LONG_KEY = âLONGâ;
public AndroidToastModuleï¼ReactApplicationContext reactContextï¼ {
superï¼reactContextï¼ï¼
}
@Override
public String getNameï¼ï¼ {
return âToastForAndroidâ;
}
@Override
public Map<String, Object> getConstantsï¼ï¼ {
final Map<String, Object> constants = MapBuilder.newHashMapï¼ï¼ï¼
constants.putï¼DURATION_SHORT_KEY, Toast.LENGTH_SHORTï¼ï¼
constants.putï¼DURATION_LONG_KEY, Toast.LENGTH_LONGï¼ï¼
return constants;
}
@ReactMethod
public void showï¼String message, int durationï¼ {
Toast.makeTextï¼getReactApplicationContextï¼ï¼ï¼ message, durationï¼ãshowï¼ï¼ï¼
}
}
Step 5 - 继æ¿ReactPackageï¼æ³¨æcreateNativeModulesï¼ï¼è¿åçæ¯å å ¥äº AndroidToastModule çéåï¼createJSModulesï¼ï¼ä¸createViewManagersï¼ï¼è¿åçé½æ¯ç©ºéåï¼å¦æStep 4 æ¥ç»§æ¿çæ¯BaseViewManageræå ¶åç±»ï¼é£ä¹createViewManagersï¼ï¼ä¸è¿åçå°±æ¯å å ¥äºBaseViewManagerçéåï¼å ¶ä»çå°±æ¯ç©ºéåï¼ä¸è¬æ åµcreateJSModulesï¼ï¼çè¿åå¼é½æ¯ç©ºéåã
public class AndroidToastPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModulesï¼ReactApplicationContext reactContextï¼ {
return Arrays.<NativeModule>asListï¼new AndroidToastModuleï¼reactContextï¼ï¼ï¼
}
@Override
public List<Class<? extends JavaScriptModuleã createJSModulesï¼ï¼ {
return Collections.emptyListï¼ï¼ï¼
}
@Override
public List<ViewManager> createViewManagersï¼ReactApplicationContext reactContextï¼ {
return Collections.emptyListï¼ï¼ï¼
}
}
Step 6 - æ°å»ºToastForAndroid.jsï¼æ件ä½ç½®
' android/react-native-toast-android/ToastForAndroid.js â代ç å¦ä¸ï¼ç¶åå¨ 'android/react-native-toast-android/âä¸è¿è¡å¦ä¸å½ä»¤çæpackage.jsonæ件
$ npm init //çæpackage.jsonæ件1
'use strict';
var RCTToastAndroid = requireï¼âNativeModulesâï¼ãToastForAndroid;
var ToastForAndroid = {
SHORT: RCTToastAndroid.SHORT,
LONG: RCTToastAndroid.LONG,
show: function ï¼
message: string,
duration: number
ï¼ï¼ void {
RCTToastAndroid.showï¼message, durationï¼ï¼
},
};
module.exports = ToastForAndroid;
Step 7 - å¤å¶ToastForAndroid.js æ件å°â/ReactNativeToastAndroid/ ' ç®å½ä¸ï¼å¦ä¸æ¯index.android.js代ç ï¼ç¶åè¿è¡æµè¯
'use strict';
var React = requireï¼'react-nativeâï¼ï¼
var {
AppRegistry,
StyleSheet,
Text,
Dimensions,
TouchableHighlight,
View,
} = React;
// var ToastForAndroid = requireï¼âreact-native-toast-androidâï¼ï¼
var ToastForAndroid = requireï¼â./ToastForAndroidâï¼ï¼
var deviceWidth = Dimensions.getï¼âwindowâï¼ãwidth;
var deviceHeight = Dimensions.getï¼âwindowâï¼ãheight;
var ReactNativeSegmentedExample = React.createClassï¼{
_onPressButton:functionï¼ï¼{
ToastForAndroid.showï¼âç¹å»äºï¼', ToastAndroid.SHORTï¼
}ï¼ï¼
},
render: functionï¼ï¼ {
return ï¼
renderButton: functionï¼ï¼ {
return ï¼
<TouchableHighlight onPress={ this._onPressButton}>
<Text style={ { width:deviceWidth,height:}}>click goto activity</Text>
</TouchableHighlight>
ï¼ï¼
},
ï¼ï¼
}
}ï¼ï¼
â¦
Step 9 - æµè¯æåï¼å¨ç®å½' /android/react-native-toast-android/ âä¸è¿è¡å½ä»¤ï¼
$ npm adduser //å¢å npmç¨æ·
$ npm publish //ä¸ä¼ react-naive-toast-androidå°npmä¸
Step - å ¶ä»å¼åè 使ç¨ä½ ä¸ä¼ å°npmä¸çç»ä»¶æ¹æ³ï¼githubä¸ç模æ¿ï¼
React Native框架写小程序,并运行在App的标源一种方法
跨平台应用开发的最佳技术选择一直是业界关注的焦点。
Flutter和React Native作为构建跨平台移动应用的源码html个人网站模板源码框架,都由各自的标源科技巨头谷歌和Facebook支持,这使得两者在未来竞争中有望更加完善。源码
鉴于原生应用开发耗时且成本高,标源跨平台应用开发成为近年来的源码一大趋势,Flutter和React Native也逐渐成为移动开发社区中最受欢迎的标源框架。那么,源码开发者应该如何选择呢?本文将重点介绍React Native及其与小程序的标源双十一拆红包源码结合。
React Native是源码Facebook在年推出的跨平台移动应用开发框架,主要使用JavaScript、标源JSX和CSS进行开发。源码这使得熟悉Web前端开发的标源开发者可以轻松进入移动应用开发领域,并利用代码共享功能加快开发进程。婚介所 app源码React Native的热重载功能允许开发者直接在运行中的应用程序中添加或纠正代码,进一步加速开发过程。
React Native采用基于React的混合移动应用开发方法,不生成原生UI组件,而是安卓蓝牙点名源码基于React构建基于Web的交互界面,从而提供更丰富的UI体验效果。React Native已经成为流行的移动开发技术,同时也提供了使用JavaScript构建原生跨平台移动应用的强大框架。
React Native需要注意的事项包括,虽然它已经成为受支持的在线客服聊天源码开源社区的热门框架,但在使用某些功能(如UI导航或地图)时可能需要编写区别于平台的代码。对于复杂的应用,可能需要编写自定义组件或深入了解iOS和Android。
React Native如何与小程序结合?我们可以将混合应用模式从“原生H5”改为“原生+小程序”,将小程序搬到App中运行。在React Native工程基础上集成FinClip小程序解析引擎,只需行代码即可完成小程序集成。
FinClip官方提供了详细的环境搭建文档,项目运行稳定。在VSCode+Xcode开发组合环境下,你可以选择两种不同的方式运行App在iOS/Android平台。同时,ReactNative需要依赖本地安装对应的iOS、Android开发工具,即需要安装Xcode和AndroidStudio。
在main.dart文件中,通过引入小程序引擎插件和初始化方法,即可实现小程序的打开。SDKKEY和Secret可以从部署的社区版管理后台获取,apiServer为小程序生态后端的服务地址,小程序id为在管理后台上架的小程序唯一ID。