2011-07-09 46 views
2

我試圖將另一個應用程序的主要活動加載到我自己的視圖層次結構中,類似於可以使用「碎片」所做的操作。將外部活動加載到自己的視圖中?

我已經試過:

Context foreignContext = createPackageContext("com.android.calculator2", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); 
Class<?> foreignClass = foreignContext.getClassLoader().loadClass("com.android.calculator2.Calculator"); 
Intent intent = new Intent(this, foreignClass); 

View view = getLocalActivityManager() 
      .startActivity("ReferenceName", intent 
      .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
      .getDecorView(); 
      this.setContentView(view); 

這將失敗,因爲ClassNotFoundException它試圖找到com.my.app/com.android.calculator2.Calculator(我假設在getLocalActivityManagerLocal添加前綴?)

有什麼辦法來實現這一目標?我不需要與外部活動或其代碼進行交互,只需將其顯示在我自己的活動中,那麼僅僅通過意圖啓動它就行不通。我認爲這是不可能的,由於安全考慮,但如果我可以(理論上)訪問外國應用程序的代碼,應該可以以某種方式運行它的onCreate方法?

謝謝!

+0

這將是很好的,那麼我可以在幾分鐘內在市場上銷售50個暢銷應用程序! ;-)我認爲這屬於注入類別,或者我猜是逆向注入,我懷疑如果沒有嚴重的黑客攻擊以及尚未發現的嚴重安全漏洞,就可以這樣做。 – Idistic

回答

0

有什麼辦法可以做到這一點?

絕對不是。對於初學者來說,這將是一個嚴重的安全違規行爲。

如果我可以(理論上)訪問外國應用程序的代碼,應該可以以某種方式運行其onCreate方法?

您無法訪問外國應用程序的代碼。而且,他們的活動不在你的清單中。

2

只有薄薄我知道,是使用清單設置:sharedUserId

但如果你知道外鍵

Android將只工作:sharedUserId

的名稱將與其他應用程序共享的Linux用戶標識。默認情況下,Android爲每個應用程序分配自己唯一的用戶ID。但是,如果此屬性設置爲兩個或更多應用程序的相同值,則它們將共享相同的ID - 前提是它們也由相同的證書籤名。具有相同用戶標識的應用程序可以訪問彼此的數據,並且如果需要,可以在相同的過程中運行。

相關問題