将外部活动加载到自己的视图中?

问题描述:

我试图将另一个应用程序的主要活动加载到我自己的视图层次结构中,类似于可以使用“碎片”所做的操作。将外部活动加载到自己的视图中?

我已经试过:

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

有什么办法可以做到这一点?

绝对不是。对于初学者来说,这将是一个严重的安全违规行为。

如果我可以(理论上)访问外国应用程序的代码,应该可以以某种方式运行其onCreate方法?

您无法访问外国应用程序的代码。而且,他们的活动不在你的清单中。

只有薄薄我知道,是使用清单设置:sharedUserId

但如果你知道外键

Android将只工作:sharedUserId

的名称将与其他应用程序共享的Linux用户标识。默认情况下,Android为每个应用程序分配自己唯一的用户ID。但是,如果此属性设置为两个或更多应用程序的相同值,则它们将共享相同的ID - 前提是它们也由相同的证书签名。具有相同用户标识的应用程序可以访问彼此的数据,并且如果需要,可以在相同的过程中运行。