Android Native Modules
Advanced
Topic 6 of 18
Android Native Modules
Writing a custom Android native module allows you to expose Java or Kotlin functionality directly to your React Native JavaScript code. This tutorial walks through creating a basic Android native module.
Creating the Native Module Class
java
public class ToastModule extends ReactContextBaseJavaModule {
ToastModule(ReactApplicationContext context) {
super(context);
}
@Override
public String getName() {
return "ToastModule";
}
@ReactMethod
public void show(String message) {
Toast.makeText(getReactApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
}
Registering the Module Package
java
public class ToastPackage implements ReactPackage {
@Override
public List createNativeModules(ReactApplicationContext context) {
return Collections.singletonList(new ToastModule(context));
}
}
Adding the Package to MainApplication
java
@Override
protected List getPackages() {
List packages = new PackageList(this).getPackages();
packages.add(new ToastPackage());
return packages;
}
Calling the Module from JavaScript
javascript
import { NativeModules } from 'react-native';
const { ToastModule } = NativeModules;
ToastModule.show('Hello from Android!');
Returning Values with Promises
java
@ReactMethod
public void getDeviceName(Promise promise) {
promise.resolve(Build.MODEL);
}
Rebuilding the App
After adding or modifying native modules, you must fully rebuild the Android app rather than relying on Fast Refresh, since native code changes require recompilation.
bash
npx react-native run-android
Conclusion
Writing custom Android native modules allows you to expose Java or Kotlin functionality directly to your React Native JavaScript code, enabling access to platform-specific capabilities not available through pure JavaScript.