我试图实现一个动态功能,我应该从我的基本模块中调用该功能中的一些方法,但它只能从该功能中调用基本方法,有什么方法可以从基本模块访问功能代码?(我了解未安装功能时会发生什么)
我已经使用默认的谷歌文档实现了它,所以我没有不同的代码或实现
今天没有动态功能,我有两个 .apk,我通过 AIDL 使用通信,我试图删除 AIDL 的使用并使用直接调用
我试图实现一个动态功能,我应该从我的基本模块中调用该功能中的一些方法,但它只能从该功能中调用基本方法,有什么方法可以从基本模块访问功能代码?(我了解未安装功能时会发生什么)
我已经使用默认的谷歌文档实现了它,所以我没有不同的代码或实现
今天没有动态功能,我有两个 .apk,我通过 AIDL 使用通信,我试图删除 AIDL 的使用并使用直接调用
我也在尝试动态功能模块。
这是我的方法:
Feature feature = (Feature) Class.forName("full.class.name.FeatureImpl").newInstance();
然后你让实例调用功能代码。
由于您不能在应用程序模块上具有动态功能模块的编译时间依赖性:
使用 SplitInstallManager 的 getInstalledModules() 方法并检查它是否存在。
使用反射,创建要调用的类的实例并调用不同的方法:
Class<?> dynamicFeatureClass = Class.forName("packagename.DFClass")
Constructor<?> cons = dynamicFeatureClass.getConstructor();
Object dynamicFeatureClassInstance = cons.newInstance();
使用反射,您现在可以调用不同的方法。
然后你可以这样做:
FeatureContract feature = (FeatureContract) dynamicFeatureClassInstance;
// In the base module.
public interface FeatureContract
{
void performSomething();
}
// In the dynamic feature module.
DFClass implements FeatureContract
{
performSomething()
{
//code
}
//other Class methods
}
使用这种方法,您只需进行一次反射调用即可在动态功能模块中创建类的实例,之后您将能够使用编译时间优势,就像使用接口调用方法一样。