Используя Eclipse, как я могу собрать и скомпилировать проект Android, предназначенный для 1.5, который использует функции 1.6+? - PullRequest
1 голос
/ 30 октября 2010

Вероятно, простой вопрос, но я разработал приложение, которое всегда использует цель сборки 1.5 без проблем.Однако теперь я добавляю TextToSpeech, который был представлен в 1.6.Я создал обертку TextToSpeech, которая инкапсулирует код TextToSpeech, и у меня есть проверки в действии, чтобы при его запуске он работал только на устройствах 1.6 и выше.Но хитрость заключается в том, чтобы заставить код работать в Eclipse с целью сборки 1,5.Конечно, когда я пытаюсь сделать это, я получаю следующие ошибки, связанные с моим классом-оберткой TextToSpeech:

«TextToSpeech не может быть разрешен».

Я поиграл с экспортом в виде jarсоздание проекта библиотеки и т. д., но я не могу заставить их работать.Для библиотечного проекта говорится, что зависимые проекты должны иметь одинаковый или более высокий уровень API, чтобы он не работал.Некоторые соответствующие выдержки из кода:

AndroidManifest.xml

 <uses-sdk 
  android:minSdkVersion="3"
  android:targetSdkVersion="8"
  />

класс активности

static {
      try {
        TextToSpeechWrapper.checkAvailable();
        androidTextToSpeechAvailable = true;
      } catch (Throwable t) {
        androidTextToSpeechAvailable = false;
      }
    }

класс оболочки

import java.util.HashMap;
import java.util.Locale;

import android.content.Context;
import android.speech.tts.TextToSpeech;

/*
 * A wrapper class for the newer Android text-to-speech library that is only found in
 * Android OS 1.6 and above (Donut and above).  This is useful so that the app can
 * be loaded on pre-Donut devices without breaking the app.
 */
public class TextToSpeechWrapper {

  private TextToSpeech mTextToSpeech;

  // class initialization fails when this throws an exception
  static {
    try {
      Class.forName("android.speech.tts.TextToSpeech");
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  // Some static vars from the text-to-speech class
  public static int SUCCESS = TextToSpeech.SUCCESS;
  public static int QUEUE_FLUSH = TextToSpeech.QUEUE_FLUSH;  <--- Eclipse errors point here cause it does not exist in 1.5.

Так что мой вопрос: каксделать так, чтобы проект снова использовал цель сборки 1,5 с эмулятором, чтобы я мог тестировать и чувствовать себя уверенно, что мое приложение все еще работает для 1,5 и выше?

Ответы [ 3 ]

0 голосов
/ 30 октября 2010

Что сказал Марк.Используйте цель сборки 4 (Android 1.6), а не 8, и minSdk 3 (Android 1.5).Вам все равно придется выполнить такую ​​проверку, чтобы вы корректно обрабатывали устройства 1.5, не имеющие TTS.Вы не можете просто включить файл jar в 1.5, потому что TTS нужно так много других компонентов, которых нет в файле jar, который вы пробовали.

0 голосов
/ 30 октября 2010

Если ваша цель - протестировать ваше приложение на устройстве 1.5 / AVD, вы можете попробовать собрать его под Android 1.6 (уровень API 4) и установить minSdkVersion = 3 в манифесте.Я не уверен, но я думаю, что вы должны быть в состоянии запустить его на устройстве Android 1.5 (уровень API 3) таким образом.Если это не сработает, у меня есть другое решение, но оно немного сложнее, поэтому дайте мне знать, если вам это нужно, и я объясню вам.

0 голосов
/ 30 октября 2010

Но хитрость заключается в том, чтобы заставить код работать в Eclipse с целью сборки 1,5.

Это невозможно.Вам нужно построить как минимум до минимального уровня API, который вы вызываете.

Поэтому мой вопрос заключается в том, как заставить проект использовать цель сборки 1,5 снова с эмулятором, чтобы я мог протестироватьчувствовать себя уверенным, что мое приложение все еще работает для 1.5 и выше?

Вы не.Вы используете целевую сборку версии 1.6 или выше, а затем тестируете приложение на устройстве / эмуляторе Android 1.5.

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