目录:
- 版本说明
- 安卓配置内容
- iOS配置内容
- 使用方式
一、版本说明
本机系统: Mac
Android studio: 3.6.2
Xcode: 11.4
二、 安卓配置内容, Android
环境,参考这里
2.1、目录下 ${项目名}/android/app/src/main/java/com.项目名/
,新增以下两个文件 RNToolsManager.java
、 RNToolsPackage.java
,并修改文件 MainApplication.java
- 新增文件
RNToolsManager.java
,内容如下:
package com.bonehouse_business_app;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.uimanager.IllegalViewOperationException;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
public class RNToolsManager extends ReactContextBaseJavaModule {
public RNToolsManager(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "RNToolsManager";
}
@ReactMethod
public void getAppVersion(Callback successCallback) {
try {
PackageInfo info = getPackageInfo();
if (info != null) {
successCallback.invoke(info.versionName);
} else {
successCallback.invoke("");
}
} catch (IllegalViewOperationException e) {
}
}
private PackageInfo getPackageInfo() {
PackageManager manager = getReactApplicationContext().getPackageManager();
PackageInfo info = null;
try {
info = manager.getPackageInfo(getReactApplicationContext().getPackageName(), 0);
return info;
} catch (Exception e) {
e.printStackTrace();
} finally {
return info;
}
}
}
- 新增文件
RNToolsPackage.java
,内容如下:
package com.bonehouse_business_app;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class RNToolsPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules( ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new RNToolsManager(reactContext));
return modules;
}
}
- 修改文件
MainApplication.java
新增引用,内容如下:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
......
new RNToolsPackage()
......
);
}
三、iOS
配置内容
3.1、使用 xCode
打开项目,创建 RNToolsManager
类,新建两个文件 RNToolsManager.h
和 RNToolsManager.m
- 新增文件
RNToolsManager.h
内容如下:
#ifndef RNToolsManager_h
#define RNToolsManager_h
#endif
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RNToolsManager : NSObject <RCTBridgeModule>
@end
- 新增文件
RNToolsManager.m
内容如下:
#import <Foundation/Foundation.h>
#import "RNToolsManager.h"
@implementation RNToolsManager
@synthesize bridge = _bridge;
RCT_EXPORT_MODULE(RNToolsManager);
RCT_EXPORT_METHOD(getAppVersion:(RCTResponseSenderBlock)callback)
{
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
callback(@[[NSString stringWithFormat:@"%@",version]]);
}
@end
- 具体如下图:


四、使用方式
4.1、组件中获取版本号如下:
import React, {Component} from 'react';
import { NativeModules, View, Text, ...} from 'react-native';
export default class TestPage extends Component{
constructor(props) {
super(props)
this.state = {
version_apk: '',
...
}
}
componentDidMount() {
this.setVersion()
}
setVersion() {
NativeModules.RNToolsManager.getAppVersion((event)=>{
this.setState({
version_apk: event
})
})
}
render() {
let { version_apk } = this.state
return (
<View>
<Text>版本号:</Text>
<Text>{version_apk}</Text>
</View>
}
4.2、 运行即可看到效果 ✌️
写给自己的随笔,有问题欢迎指出