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. Но вышеупомянутые решения доступны для вас.