I'm trying to make my app modular. There will be a core extensible base module. In Android, I plan on having a sub-directory in the assets folder, called plugins, where extensions to the core app will be downloaded into as .apks.
How can I create such a modular app in React Native?
I have a working implementation in Android. I currently have my app loading external plugins that implement an interface:
public interface IDynamicModule {
String getText();
}
I am loading the APKs using DexClassLoader :
class ModuleLoader(val cacheDir: String) {
fun load(dex: File, cls: String = "com.example.dynamicmodule.DynamicModule"): IDynamicModule {
try {
val classLoader = DexClassLoader(dex.absolutePath, cacheDir,
null, this.javaClass.classLoader)
val moduleClass = classLoader.loadClass(cls)
if (IDynamicModule::class.java.isAssignableFrom(moduleClass)) {
return moduleClass.newInstance() as IDynamicModule
}
} catch (e: Exception) {
Log.e("ModuleLoader", e.message, e)
}
return IDynamicModule { "Failed to load" }
}
}
Thank you all in advance.