簡體   English   中英

從基礎模塊調用動態特征代碼

[英]Call dynamic feature code from base module

我正在嘗試實現一個動態功能,我應該從我的基本模塊中調用該功能中的一些方法,但它只能從該功能調用基本方法,有沒有辦法使功能代碼可從基本模塊訪問 (我了解未安裝功能時會發生什么)

我已經使用默認的谷歌文檔實現了它,所以我沒有不同的代碼或實現

今天沒有動態功能,我有兩個 .apk 並且我使用通過 AIDL 進行通信,我試圖刪除 AIDL 使用並使用直接調用

我也在嘗試動態功能模塊。

這是我的方法:

  1. 在基礎應用程序中保留一個基礎抽象類。
  2. 在動態特性中實現基類。
  3. Feature feature = (Feature) Class.forName("full.class.name.FeatureImpl").newInstance();

然后你得到了調用特性代碼的實例。

由於您不能在應用程序模塊上擁有動態功能模塊的編譯時依賴性:

  1. 您需要首先確保模塊已安裝:

使用 SplitInstallManager 的 getInstalledModules() 方法並檢查它是否存在。

  1. 使用反射,創建要調用的類的實例並調用不同的方法:

     Class<?> dynamicFeatureClass = Class.forName("packagename.DFClass") Constructor<?> cons = dynamicFeatureClass.getConstructor(); Object dynamicFeatureClassInstance = cons.newInstance();

使用反射,您現在可以調用不同的方法。

  1. 如果您在基本模塊中定義一個通用接口並在動態要素類中實現這些方法會更好。

然后你可以這樣做:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM