如何绕过AndroidManifest.xml中的活动声明?

时间:2013-11-11 19:06:58

标签: android android-activity android-manifest classloader

我正在处理将被困在其他人的应用程序中的代码。我有两个活动都在视频视图中播放(行为略有不同)。但是,我绝对不想依赖其他人手动声明我创建的AndroidManifest.xml活动。 (有些开发人员可能会忘记在清单中声明它)

基本上,我希望能够告诉android加载一个未在Manifest中声明的活动。我该怎么做?

这是我的想法:

1)我已经尝试了对已声明的活动进行子类化(声明的活动是指在AndroidManifest中声明的活动)。但是,调用此子类会引发ActivityNotFoundException并不奇怪。

2)我可以通过静态方法传递静态视图,如:

public class Blah extends Activity {
    private static VideoView badIdea;
    public void setBadIdeaView(VideoView vv) { badIdea = vv; }
//... start it up as usual, but `badIdea` is now configured
}

但我真的不想这样做,因为一个视图保留了一个上下文,我不想要一个对Activity上下文的静态强引用。

3)有没有人知道Android如何实际加载您的活动?我猜Android使用反射来打开类的实例....但是......我的意思是,为什么必须在Manifest中声明活动?这是出于安全目的,以防止错误的动态类加载?这是一个可能的解决方案吗?

感谢

1 个答案:

答案 0 :(得分:0)

  

我该怎么做?

你没有。必须在清单中声明所有活动。

  

但是,我绝对不想依赖其他人手动声明我创建的AndroidManifest.xml活动。

正如评论中所建议的,如果您的代码是作为Android库项目实现的,那么您可以尝试依赖清单合并。

  某些开发人员可能忘记在清单中声明它

所以?他们应该在测试中抓住它。您还可以通过PackageManager向您公开的API添加完整性检查,以便查看应用是否已注册您的活动,这样,如果您的代码不遵循您的说明,您的代码将“快速失败”。