[英]How to Access Java Code/Lib from Dynamic Feature Module in Base Module in Android?
[英]Call dynamic feature code from base module
我正在嘗試實現一個動態功能,我應該從我的基本模塊中調用該功能中的一些方法,但它只能從該功能調用基本方法,有沒有辦法使功能代碼可從基本模塊訪問? (我了解未安裝功能時會發生什么)
我已經使用默認的谷歌文檔實現了它,所以我沒有不同的代碼或實現
今天沒有動態功能,我有兩個 .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
}
使用這種方法,您只需進行一次反射調用即可在動態功能模塊中創建類的實例,之后您將能夠利用編譯時優勢,就像使用接口調用方法一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.