加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

react-native链接导致Android settings.gradle中的重复导入

发布时间:2020-12-15 05:07:02 所属栏目:百科 来源:网络整理
导读:出于某种原因,当我调用react-native链接时,它会向 android / settings.gradle添加重复包含,这反过来会向android / app / src / main / com / projectName /MainApplication. java添加重复的导入. 它并不总是如此.当我手动添加一个特定的包时,它开始这样做,因
出于某种原因,当我调用react-native链接时,它会向 android / settings.gradle添加重复包含,这反过来会向android / app / src / main / com /< projectName> /MainApplication. java添加重复的导入.

它并不总是如此.当我手动添加一个特定的包时,它开始这样做,因为有些东西不起作用,但我不记得是哪一个.

我的预感是,react-native链接假定以某种顺序列出的包 – 它看起来像反向字母 – 但是因为npm包名称不一定与settings.gradle中的include项目名称匹配,这与导入不匹配在MainApplication.java中的名字,我很难弄清楚如何在settings.gradle中重新排序它们以便停止这种行为.或者它可能完全是另一回事.

的package.json

{
  // ...
  "dependencies": {
    "events": "^1.1.1","flux": "^3.1.2","react": "~15.4.1","react-native": "0.42.0","react-native-datepicker": "^1.4.4","react-native-fs": "^2.1.0-rc.1","react-native-navigation": "^1.0.30","react-native-push-notification": "^2.2.1","react-native-sound": "^0.9.1","react-native-vector-icons": "^4.0.0","redux": "^3.6.0"
  },"devDependencies": {
    "babel-jest": "19.0.0","babel-preset-react-native": "1.9.1","jest": "19.0.2","react-test-renderer": "~15.4.1"
  },"jest": {
    "preset": "react-native"
  }
}

这是文件应该是什么……

安卓/ settings.gradle

rootProject.name = // <projectName>
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-vector-icons/android')
include ':react-native-sound'
project(':react-native-sound').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-sound/android')
include ':react-native-push-notification'
project(':react-native-push-notification').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-push-notification/android')
include ':react-native-navigation'
project(':react-native-navigation').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-navigation/android/app')
include ':react-native-fs'
project(':react-native-fs').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-fs/android')

include ':app'

机器人/应用/ SRC /主/ COM / [项目] /MainApplication.java

package // com.<projectName>;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.zmxv.RNSound.RNSoundPackage;
import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage;
import com.reactnativenavigation.RnnPackage;
import com.rnfs.RNFSPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.Arrays;
import java.util.List;

public class MainApplication 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 VectorIconsPackage(),new RNSoundPackage(),new ReactNativePushNotificationPackage(),new RnnPackage(),new RNFSPackage(),);
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this,/* native exopackage */ false);
  }
}

运行react-native链接后,文件将更改为:

安卓/ settings.gradle

rootProject.name = // <projectName>
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-fs/android')
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir,'../node_modules/react-native-fs/android')

include ':app'

机器人/应用/ SRC /主/ COM / [项目] /MainApplication.java

// ...
import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.zmxv.RNSound.RNSoundPackage;
import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage;
import com.reactnativenavigation.RnnPackage;
import com.rnfs.RNFSPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.zmxv.RNSound.RNSoundPackage;
import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage;
import com.reactnativenavigation.RnnPackage;
import com.rnfs.RNFSPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.Arrays;
import java.util.List;

public class MainApplication 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(),);
    }
  };

// ...

如果我再次运行react-native-link,它会添加第三个包的副本.

有没有人对反应原生链接如何工作有任何见解?

这是React Native上的已知错误.目前有一个公关待处理此错误: https://github.com/facebook/react-native/pull/18131

更新:错误已修复!

要解决此问题,您只需在运行react-native-link时手动梳理依赖项.我发现在运行它之前有一个干净的git状态是有帮助的,然后在之后使用git diff查看已更改的文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读