动态类加载以定位多个Android版本

时间:2010-08-20 12:15:11

标签: android classloader multitargeting

我想为多个Android版本(可能是其中每个版本)制作一个Android应用 我的问题是我想检查当前运行的应用程序的Android版本是什么,并动态加载一个版本相关的类。这部分应该没问题。

我只是想知道如何在Eclipse项目中没有编译错误的情况下实现这一点。 我的意思是,项目是针对特定目标(1.5,2.1 ...)配置的,因此如果我的项目中的某个类与所选目标不兼容,则会导致错误。

有没有办法导出这个类,即使它们不适合平台(我想到了一个单独的lib,但是又一次:如何在没有编译pbs的情况下将这些类编译成lib?)?这应该没问题,因为在我检查Android版本之后我们才会加载它们。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您使用最新目标编译项目,即2.2,它仍将在1.5上运行。

答案 1 :(得分:0)

您可以根据不同的条件使用Class.forName加载不同的类:

public interface MyType {}
public class MyTypeOn15 implements MyType {}
public class MyTypeOn16 implements MyType {}
public class MyTypeOn20 implements MyType {}
// ...

以及代码中的其他位置:

MyType myType = null;
if (getActualTarget().equals("1.5") {
   myType = Class.forName("MyTypeOn15").newInstance();
} else if (getActualTarget().equals("1.6") {
   myType = Class.forName("MyTypeOn16").newInstance();
} // ...

请注意,您的实现中需要一个可访问的空构造函数。而getActualTarget()是你的魔术方法,它将目标作为字符串标识符返回......