создание в приложении для другой версии Android - доступно в более низких версиях с импортом только в более высокой версии - PullRequest
1 голос
/ 18 декабря 2011

Я знаю, что этот вопрос задавался ранее, например, здесь: Android: как кодировать в зависимости от версии API?

Там также упоминается, что одиндолжен скомпилироваться до новейшего уровня Android.Моя базовая версия приложения должна быть доступна с 7 и более продвинутыми, начиная с 12 уровня.

Значит ли это, что целевой настройкой проекта должно быть 12, а также min-sdk в манифесте.

НО приложение в Android Market будет доступно ТОЛЬКО для устройств 12 уровня?Даже при том, что приложение должно запускаться начиная с 7 - только с ограниченными возможностями.

Также на уровне 12 мне нужно будет импортировать определенные пакеты, доступные только начиная с 12. Поэтому я не смог бы даже установить более низкую цель Android, иначеЯ получаю сообщение об ошибке компилятора.

Итак, в итоге:

  1. Приложение должно быть доступно, начиная с уровня 7
  2. Если пользователь имеет уровень 12+, приложение должно импортироватьопределенные пакеты уровня 12+ и делают доступными эти функции
  3. Если у пользователя только <12, то пакеты не должны импортировать </li>

Большое спасибо!

1 Ответ

1 голос
/ 18 декабря 2011

Если я правильно читаю ваш вопрос, то это позволит установить ваше приложение на устройствах с уровнем 7

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="12" />

Для разработки вы можете установить для него любую цель, которую вы хотите, например, цель вашего проекта можетбыть SDK 4.0, но вы можете указать, что target может быть 1.5 (android: targetSdkVersion = "3") или наоборот.Eclipse выдаст вам предупреждение, но вы можете разрабатывать для любой цели и настраивать манифест на любую цель, если вы принимаете во внимание последствия.

Вы, вероятно, знаете, что в этой области нужно проделать определенную работуВы пишете код, чтобы убедиться, что приложение не падает, если оно пытается вызвать методы, которые не существуют на уровне 7. Я написал код для обработки этого, если вам нужны примеры.

РЕДАКТИРОВАТЬ:

Пример, который работает для меня.

/**
 * Get the current SDK version as an integer. If we are using 1.5 the SDK is
 * returned as a String so using the Build.VERSION.SDK_INT method will cause
 * the application to crash. This method will return 3 if the version is 1.5
 * and will return the proper result for Build.VERSION.SDK_INT if that
 * method is available.
 * 
 * @return
 */
public static int getSdkInt() {
    if (Build.VERSION.RELEASE.startsWith("1.5"))
        return 3;

    try {
        return YourInternalClass.getSdkIntInternal();
    } catch (VerifyError e) {
            Log.e(TAG, e.toString());
        return 3;
    }
}

Вы должны вызывать любые методы, которые могут не существовать во внутреннем классе, чтобы он не загружался до тех пор, пока метод не будет вызван.

private static class YourInternalClass {
    private static int getSdkIntInternal() {
        return Build.VERSION.SDK_INT;
    }
}

Теперь вы можете проверить версию SDK.Если у вас есть какие-либо методы, которые существуют только в пакетах больше 7, поместите эти методы во внутренний класс.тогда вы можете сделать

if(TheClassYouPutThisMethodIn.getSDKInt() >= 12)
YourInternalClass.yourLevel12Method();

Я уверен, что, возможно, есть лучший способ сделать это (и я надеюсь, что кто-то может опубликовать это), но он прекрасно работает для меня.У меня есть приложения, использующие методы из SDK 13, работающие безопасно на телефоне с уровнем 3.

Надеюсь, это поможет.

...