2017-12-29 49 views
12

HTML 파일 입력을 사용하여 파일을 업로드 할 수 있도록 사용자 정의 Android WebView를로드하려고합니다. 기본적으로 Android webview는 입력 파일에서 작동하지 않습니다.엑스포 키트를 사용하여 반응 네이티브로 사용자 정의 기본 구성 요소로드

public class MainApplication extends MultiDexApplication { 

    // Needed for `react-native link` 
    public List<ReactPackage> getPackages() { 
     return Arrays.<ReactPackage>asList(
     new MainReactPackage(), 
     new CustomWebViewPackage() 
    ); 
    } 

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

기본적으로 어떤 자식 코드가 수행하는 기본 만들기 위해 기본 웹뷰 반응 오버라이드 (override)입니다 (기본적으로 다른 클래스에서 상속) Im using this code는, 유일한 차이점은 메신저 사용 엑스포 키트, 그래서 내 MainApplication.java은 다르다 그것은이 코드 (this is on CustomWebView.android.js)와 requireNativeComponent를 사용하여, 안드로이드에 CustomWebView.java를 사용

var RCTWebView = requireNativeComponent('CustomWebView', WebView, { 
nativeOnly: { 
    messagingEnabled: PropTypes.bool, 
}, 

});

문제를 요약

enter image description here

가 내 사용자 지정 기본 구성 요소가 읽을되지 않는 것을 : 내가 시작하고 CustomWebView이있는 화면으로 이동 특급 사용하여 응용 프로그램을 실행할 때

는하지만 난이 오류가 나타납니다 네이티브에 반응합니다. 누군가 나를 기쁘게 도와 줄 수 있습니까?

답변

7

엑스포를 사용할 때 네이티브 코드를 사용할 수 없으며, 네가 제공 한 것만 사용할 수 있습니다. 꺼내기를하면 네이티브 코드를 사용할 수 있지만 더 이상 엑스포를 사용할 수 없으며 돌이킬 수 없다는 것이 확실합니다.

현재 엑스포를 사용할 때의주의 사항에 대해 자세히 볼 수 있습니다 : 기본적으로 https://facebook.github.io/react-native/docs/getting-started.html#caveats

+0

안녕하세요, Matt, 답변 해 주셔서 감사합니다. 이미 퇴장했습니다. Im은 Expo Kit를 사용하여 문서화를 통해 expo 프레임 워크와 함께 네이티브 코드 (네비게이션 키트를 꺼내거나 네이티브로 반응 할 수 있음)를 허용한다고 말합니다. – sagits

8

엑스포는 사용자 정의 기본 모듈을 지원하지 것이다. 이는 바이너리가 하나의 바이블을 가지고 있고 사용자가 작성한 JS 번들 만로드하기 때문입니다. 따라서 Expo로 작성한 모든 코드는 순수한 자바 스크립트 일 수 있습니다. 그러나 엑스포 설명서에서는 분리 후 사용자 정의 네이티브 모듈을 추가 할 수 있다고 말합니다. 여기 더 많은 정보 :

https://docs.expo.io/versions/latest/guides/detach.html#should-i-detach

https://docs.expo.io/versions/latest/introduction/faq.html#what-is-the-difference-between-expo-and-react-native

https://github.com/expo/expo/issues/56

5

당신은 어떤 BoilerPlates을 가지고 매우 쉽게 사용할 수 Ignite로 알려진 React Native에 대한 코드의 최고의 발생기 시작할 수 있습니다.

주어진 유용한 상용구에서 Ignite Expo BoilerPlate을 사용하면 expo + 기본 모듈 지원으로 모든 코드를 설정할 수 있습니다. ignite-cli을 글로벌 패키지로 설치하고 실행 한 후 ignite new [AppName] -b ignite-expo

이렇게하면 쉽게 수행 할 수 있습니다. 또한 유용한 모듈을 추가합니다.

+0

답변 해 주셔서 감사합니다. 나는 이미 모든 코드를 수행하고 작업하고 있으며, 여전히 필요한 유일한 부분은이 기본 모듈이므로 처음부터 모든 것을 다시 시작할 수 없습니다 (ignite를 사용하여). – sagits

1

프로젝트를 추출한 후 exp start을 통해이 프로젝트를 사용하려고해도 결과를 얻을 수 없습니다. 엑스포 키트가 여전히 지원되는 동안 새로운 기본 코드가 필요합니다. react-native run-android을 사용하여 실행할 필요가 있습니다. 그렇게하면 exp start처럼 JS를 제공 할뿐만 아니라 네이티브 코드를 컴파일하여 장치에 넣을 수 있습니다.

지금은 exp start을 사용하면 JS 번들을 제공하지만 번들은 일반 EXPO 클라이언트 내에 존재하지 않는 네이티브 모듈을 찾을 수 없습니다.