javax.* не может быть импортирован в мое приложение для Android?

Я пытаюсь импортировать некоторые javax.* классы в моем приложении для Android, но я продолжаю получать ошибки компилятора в Android Studio. Я использую Ubuntu Linux 13.04.

Вот мой импорт:

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
// Here are the imports I am having trouble with:
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.SourceDataLine;

И когда я пытаюсь запустить приложение или даже скомпилировать Java-файл активности, я получаю следующие ошибки:

Gradle: error: package javax.sound.sampled does not exist
Gradle: error: package javax.sound.sampled does not exist
Gradle: error: package javax.sound.sampled does not exist

Я просто не могу понять эту проблему. Любая помощь будет потрясающей!

5 ответов

Решение

Помните, что когда вы запускаете приложение для Android: вы не запускаете и не компилируете его на стандартной JVM/JDK, вы даже не выполняете байт-код Java. Google выбирает язык Java (или, по крайней мере, его часть) в качестве языка разработки Android, но это только язык.

В конце концов, скомпилированный java-код не является байт-кодом java, но это байт-код dalvik. (нет файлов.class, но есть файлы.dex)

Итак, при разработке под Android: вы не можете использовать полный API JavaSE: вы ограничены API, поддерживаемым виртуальной машиной dalvik (доступно здесь).

(Обратите внимание, что при просмотре этого API остерегайтесь версии в верхнем правом углу страницы: добавлено на уровне API X. Оно информирует вас о версии Android-API, поддерживающей этот класс или метод)

Эти классы не включены в библиотеку Android. Вы должны использовать специфичные для Android API звуков. Смотрите: http://developer.android.com/reference/android/media/package-summary.html

У меня такая же проблема. Я решил это, загрузив источники OpenJDK (например, отсюда: http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/classes/javax/sound) и экспорт необходимого пакета в файл *.jar для включения этого файла в приложение для Android. Это работало просто отлично для меня.

Если вы загружаете OpenJDK из программы разработчиков Red Hat (бесплатное членство), вы можете найти исходные файлы.java для всего OpenJDK, включая javax.sound.sampled. Я смог отладить свое Android-приложение с помощью OpenJDK8.

Обратите внимание, что не все функции OpenJDK8 доступны в Android, но включают только те классы, которые вам нужны. Для получения дополнительной информации см. https://developer.android.com/studio/write/java8-support.html

Я работаю над проблемой javax.sound в Android в течение двух дней. Я выбрал легкий путь, потому что использование javax.sound означало бы создание jar-файла нужных мне библиотек, и если бы под ними был код C в JNI, мне пришлось бы перенести его на вооружение. Или я мог бы взять Linux дистрибутив и принести оттуда то, что мне нужно для конвертации mp3 в wav, в JNI. Вы можете использовать обычные файлы JAR в Android. Я использую стандартную библиотеку FTP от стороннего производителя для FTP Juju. Мои mp3 были не очень большими. Поэтому я просто конвертировал их в wavs в res/raw. Но вышеупомянутые решения доступны для вас.

Другие вопросы по тегам