当安装 react-native-gesture-handler
后,React Native 应用程序停止运行的问题通常是因为缺少必要的配置步骤或与其他库的冲突导致的。以下是解决此问题的一些常见解决方法:
配置 Android:
android/app/src/main/java/com/[your-app-namespace]/MainActivity.java
文件中导入 com.facebook.react.ReactActivityDelegate
和 com.facebook.react.ReactRootView
。MainActivity
类中添加以下代码:import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
public class MainActivity extends ReactActivity {
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
@Override
protected ReactRootView createRootView() {
return new RNGestureHandlerEnabledRootView(MainActivity.this);
}
};
}
}
android/settings.gradle
文件中添加以下代码:include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
android/app/build.gradle
文件中添加以下代码:implementation project(':react-native-gesture-handler')
MainApplication.java
文件中添加以下代码:import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List packages = new PackageList(this).getPackages();
packages.add(new RNGestureHandlerPackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}
react-native run-android
。配置 iOS:
pod install
命令来安装依赖项。ios/[your-app-name]/AppDelegate.m
文件,并添加以下代码:#import
#import
#import
#import // 如果使用 React Native Navigation
#import
// ...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
#ifdef FB_SONARKIT_ENABLED
InitializeFlipper(application);
#endif
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
// ...
#if RNN_DEBUG
[[RNBridgeManager sharedInstance] setBridge:bridge];
#endif
// ...
#if RNN_DEBUG
[ReactNativeNavigation bootstrapWithDelegate:self launchOptions:launchOptions];
#else
[ReactNativeNavigation bootstrapWithDelegate:self launchOptions:launchOptions rootViewCreator:^UIViewController *(NSString *componentName, NSDictionary *props, RCTBridge *bridge) {
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:componentName
initialProperties:props];
[rootView addGestureRecognizer:[[RNRootViewGestureRecognizer alloc] initWithRootView:rootView]];
return [[UIViewController alloc] initWithView:rootView];
}];
#endif
return YES;
}
// ...
react-native run-ios
。以上是一些可能的解决方法