2011-12-17 2 views
1

я знаю, такого рода вопрос был задан ранее, например, здесь: Android: how to code depending on the version of the API?создания на приложения для другой версии Android - доступны на более низких версиях с импортом только в более высокой версии

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

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

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

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

Так что в итоге:

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

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

ответ

1

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

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

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

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

EDIT:

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

/** 
* 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.

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

+0

спасибо - я попробую это. В моем случае я ожидаю, что проверка действительно простая, так как в зависимости от уровня я просто инактивирую/активирую одну функцию. Но если у вас есть примеры кода, которые могут помочь, пожалуйста, будьте любезны и опубликуйте их. – user387184

Смежные вопросы