2017-10-21 243 views
-2

我應該創建一個具有基本功能的「容器」應用程序。在單獨的應用程序中創建插件/附加組件/擴展應用程序

在「Container」應用程序中,我有一個NavigationView(根據已安裝的插件動態添加項目)和一個FrameLayout。

在一個單獨的apk中,我應該創建一個插件,用我自己的視圖爲我的應用程序添加功能。

問題是:如何在插件應用程序中創建帶有視圖的片段並將它們移動到上下文應用程序的FrameLayout。

這裏有更好的解釋的情況

enter image description here

enter image description here

有沒有人有任何示例代碼兩個圖像?鏈接到教程?或者告訴我我該怎麼做?

我試圖創建一個AIDL的進程之間的通信,但只有通過原始數據,不允許通過:對象,資源,圖像等

+0

你想要的通常不可能以安全的方式進行。歡迎您使插件向「容器」應用程序提供「RemoteViews」,應用程序窗口小部件通過「AppWidgetManager」向主屏幕提供「RemoteViews」的方式。 – CommonsWare

回答

0

這是可能的,有需要的時候,你兩件事試圖加載一個apk:dex代碼&資源。

使用dex代碼,您可以執行的操作是修改當前上下文的默認ClassLoader。爲每個插件添加分隔的ClassLoader,並將它們放到上下文的ClassLoader中,並修改上下文的ClassLoader的findClass方法,使其首先從插件的ClassLoader中找到類,如果沒有找到,則回退到傳統的ClassLoader方式。我認爲PathClassLoader會做到這一點,你必須做的是通過插件的文件路徑。

帶資源,你需要做的是從Resources類中獲取舊的AssetManager,並用反射調用addAssetPath,並將插件的apk路徑傳遞給它。

在完成這兩個步驟後,您將擁有一個插件,其所有類和資源與常規應用程序運行方式沒有多大區別。

ps:注意到還有很多工作要做,才能在不同的系統版本和不同的自定義ROM上正常工作,並且這兩個步驟不會讓您從插件中添加新的活動/服務/廣播/提供程序,原因你需要將它們註冊到SystemServer,這受到系統的限制,我認爲沒有一種方法可以在沒有root的情況下完成。

---------------------------我是一個分隔符--------------- -------------

如果您的應用有能力運行可從互聯網上下載的代碼,則Play-store將不允許您的應用發佈。因爲不能保證這些代碼將收集來自某人的電話的私人數據,或者做任何違法的事情。