Я хотел бы сделать одно приложение для Android для нескольких версий Android (возможно, каждый из них) Моя проблема в том, что я хочу проверить, какая версия Android в настоящее время работает, и динамически загружать класс, зависящий от версии. Эта часть должна быть в порядке.
Мне просто интересно, как я могу добиться этого без ошибок компиляции в моем проекте Eclipse. Я имею в виду, что проект настроен для конкретной цели (1.5, 2.1...), поэтому, если класс в моем проекте не совместим с выбранной целью, это приведет к ошибкам.
Есть ли способ экспортировать эти классы, даже если они не подходят для платформы (я думал об отдельной библиотеке, но опять же: как скомпилировать классы тезисов в lib без компиляции pbs?)? Это должно быть нормально, так как они не будут загружены, пока я не попрошу их после проверки версии Android.
Спасибо!
Вы можете использовать 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()
- ваш магический метод, который возвращает цель как идентификатор строки...
Если вы скомпилируете проект с последней целью, то есть 2.2, он все равно будет работать на 1.5.