Динамическая загрузка классов для нескольких версий Android - PullRequest
1 голос
/ 20 августа 2010

Я хотел бы сделать одно приложение для Android для нескольких версий Android (возможно, для каждой из них) Моя проблема в том, что я хочу проверить, какая версия Android запущена в данный момент, и динамически загрузить класс, который зависит от версии. Эта часть должна быть в порядке.

Мне просто интересно, как я могу добиться этого без ошибок компиляции в моем проекте Eclipse. Я имею в виду, что проект настроен для конкретной цели (1.5, 2.1 ...), поэтому, если класс в моем проекте не совместим с выбранной целью, это приведет к ошибкам.

Есть ли способ экспортировать эти классы, даже если они не подходят для платформы (я подумал о разделенной библиотеке, но опять же: как собрать эти классы в библиотеку без компиляции pbs?) Это должно быть нормально, так как они не будут загружены, пока я не попрошу их после проверки версии Android.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 августа 2010

Вы можете использовать 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() - ваш магический метод, который возвращает цель в качестве идентификатора строки ...

0 голосов
/ 20 августа 2010

Если вы компилируете свой проект с последней целью, то есть 2.2, он все равно будет работать на 1.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...