Skip to content

Trying to create the most simple native Android component, failing silently #13553

Description

@Carpetfizz

Hello,

I'm trying to create a native UI component in Android. I believe I've followed the docs exactly, however the docs do not have an example of the ReactImageView which is the class that the view manager serves. I'm simply trying to display an Android TextView in RN. Once I get that to work I will move on to implementing my own class (so I don't strictly need TextView to work. The result of running this project is that literally nothing happens. It fails silently, and I don't see my "hello from android !" text appear on the screen and I don't know how to check if RN is even calling my Java code.

RCTScannerViewManager.java

publicclassRCTScannerViewManagerextendsSimpleViewManager<TextView> {
publicstaticfinalStringREACT_CLASS = "RCTScannerView";
@OverridepublicStringgetName() {
returnREACT_CLASS;
}
@OverrideprotectedTextViewcreateViewInstance(ThemedReactContextreactContext) {
TextViewtv = newTextView(reactContext);
tv.setText("hello from android !");
returntv;
}
}

RCTScannerViewPackage.java

publicclassRCTScannerViewPackageimplementsReactPackage {
@OverridepublicList<NativeModule> createNativeModules(ReactApplicationContextreactContext) {
returnCollections.emptyList();
}
@OverridepublicList<Class<? extendsJavaScriptModule>> createJSModules() {
returnCollections.emptyList();
}
@OverridepublicList<ViewManager> createViewManagers(ReactApplicationContextreactContext) {
returnArrays.<ViewManager> asList(
newRCTScannerViewManager()
);
}
}

MainApplication.java

publicclassMainApplicationextendsApplicationimplementsReactApplication {
privatefinalReactNativeHostmReactNativeHost = newReactNativeHost(this) {
@OverridepublicbooleangetUseDeveloperSupport() {
returnBuildConfig.DEBUG;
}
@OverrideprotectedList<ReactPackage> getPackages() {
returnArrays.<ReactPackage>asList(
newMainReactPackage(),
newRCTScannerViewPackage()
);
}
};
@OverridepublicReactNativeHostgetReactNativeHost() {
returnmReactNativeHost;
}
@OverridepublicvoidonCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */false);
}
}

ScannerView.js

importReact,{Component,PropTypes}from'react'import{Text,View,requireNativeComponent}from'react-native'variface={name: 'RCTScannerView',propTypes: {
...View.propTypes}}module.exports=requireNativeComponent('RCTScannerView',iface);

index.android.js

importReact,{Component}from'react'import{AppRegistry,Text,View}from'react-native';importScannerViewfrom'./ScannerView';classAwesomeProjectextendsComponent{render(){return(<View><Text> Hello world @@ </Text><ScannerViewtest="hello world"></ScannerView></View>);}}AppRegistry.registerComponent('AwesomeProject',()=>AwesomeProject)

I would love to use RN in my project, but there seems to be a lack of documentation online about how to create native modules in Android. I have posted this issue on Stack Overflow, but no one has responded.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions