2012-03-09 58 views
0

我正在開發一個能夠下載的應用程序(即base apk),當需要提高時,第三方應用程序(即:外部應用程序)從專用服務器上下載。當發生這種情況時,基本應用程序(base apk)開始以類似於詳細描述的here的方式實例化每個先前下載的apk(即:外部apks)。整個過程平穩流暢,除非這些第三方機構是爲了利用本地資源(即:資源/佈局/佈局文件)而設計的。在這種情況下,用於訪問這些本地資源的第三方apk代碼(例如,通過嘗試擴展如下所示的佈局)會拋出NULLPointerException異常(無法找到每個資源)。如何訪問位於外部加載的apk中的佈局特定資源?

我不知道這是否可行。如果是(最有可能我猜)是否有任何直接解決方案/解決方法,目前我解僱..?

LayoutInflater.from(this.getContext()).inflate(mypackage.external.apk.R.layout_to_be_loaded, this); 

謝謝!

回答

0

當發生這種情況時,基本應用程序(base apk)開始以類似於此處詳述的方式實例化每個先前下載的apk(即:外部apks)。

這是不安全的,提供了代碼注入攻擊的可能性。我不會用十英尺的杆子來觸摸這種技術。

有沒有任何直接的解決方案/解決方法,目前我解僱..?

不是。您將字節碼從外部未安裝的APK中取出並在您的過程中執行。您無法以某種方式撕掉資源,並將它們與您的資源混合。

+0

感謝您的及時回覆! 不是真的我在跳着聽... :) 是的,整個過程構成了一個黑客..如果它不是關於概念證明的應用程序(它不會被安裝在比我更多的手機上)它不會是一個選擇..雖然它並沒有很大的意義(至少在一目瞭然),因爲它不是主要的apk不能直接訪問第三方的本地資源,但第三方apk它自己.. 在某種程度上,矛盾是能夠加載外部類(即使這會造成顯着的安全約束),但不是他們的本地資源。 – George 2012-03-10 09:04:21

+0

@喬治:「雖然,它沒有很多道理至少在一目瞭然),因爲它不是主要的apk不能直接訪問第三方的本地資源,但第三方apk它自己「 - 嚴格來說沒有第三方APK。有一個ZIP擴展名的APK文件,你碰巧正在使用。這不是已安裝的應用程序。 – CommonsWare 2012-03-10 12:16:03

+0

@George:「在某種程度上,矛盾是能夠加載外部類......但不是他們的本地資源」 - 這就像從EXE中抓取隨機x86指令並將它們插入RAM而不是安裝EXE。 EXE通常包含其他內容,在安裝時解壓縮,應用程序假定它將在那裏,但腳本 - kiddie方法繞過。 – CommonsWare 2012-03-10 12:16:24