我试图实现一个动态功能,我应该从我的基本模块中调用该功能中的某些方法,但是只能从该功能中调用基本方法,有没有办法使功能代码可从基本中访问模块? (我知道未安装功能会发生什么情况
我已经使用默认的Google文档实现了它,所以我没有不同的代码或实现方式
今天没有动态功能,我有两个.apks,我通过AIDL使用通讯,我试图删除AIDL的使用并使用直接呼叫
答案 0 :(得分:2)
我也在尝试动态功能模块。
这是我的方法:
Feature feature = (Feature) Class.forName("full.class.name.FeatureImpl").newInstance();
然后,您可以实例调用功能代码。
答案 1 :(得分:0)
因为您不能在应用程序模块上拥有动态功能模块的编译时依赖性:
使用 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
}
使用这种方法,您只需进行一次反射调用即可在动态功能模块中创建类的实例,之后您将能够使用编译时优势,因为您将使用以下方法调用方法界面。