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

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


person Tux    schedule 28.05.2013    source источник
comment
Вы проверили свой путь к классам? убедитесь, что вы добавили свою системную библиотеку.   -  person Smit    schedule 29.05.2013
comment
Как добавить в системную библиотеку? Кстати, спасибо за помощь.   -  person Tux    schedule 29.05.2013
comment
Я не уверен в Android-разработке. Но вот путь с точки зрения Eclipse.... Щелкните правой кнопкой мыши в проводнике проекта --> Путь сборки --> Настроить путь сборки --> Вкладка "Библиотека" --> Кнопка "Добавить библиотеку" --> Выбрать системную библиотеку JRE --> Далее -- > Заканчивать   -  person Smit    schedule 29.05.2013
comment
Для чего вы пытаетесь использовать аудиоклассы?   -  person SimonC    schedule 29.05.2013
comment
@SimonC Я генерирую синусоидальный тон.   -  person Tux    schedule 29.05.2013
comment
Похоже, то, что вы хотите сделать, может быть достигнуто с помощью класса Android AudioTrack. См.: stackoverflow. com/questions/10158409/ и stackoverflow.com/questions /11436472/   -  person SimonC    schedule 29.05.2013


Ответы (5)


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

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

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

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

person ben75    schedule 29.05.2013
comment
Кстати, вы упомянули, что не можете использовать полный API JavaSE. Однако я считаю, что рассматриваемая здесь зависимость - это конкретно JEE, а не Java SE. - person Chris Maggiulli; 04.09.2019
comment
Я бы хотел, чтобы в этом ответе было указано, как заставить javax работать, а не просто указано, почему это не так. Мы уже знаем, что ввод import javax не сработает, поэтому здесь нет новой информации. Мне кажется, что должен быть обходной путь или альтернативное решение. - person NL23codes; 07.12.2019

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

person SimonC    schedule 28.05.2013
comment
Однако раньше я использовал другие классы Java в своих приложениях. Это просто javax.*? - person Tux; 29.05.2013
comment
Похоже, именно пакет javax.sound.sampled не включен. - person SimonC; 29.05.2013

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

person Oleg Korniienko    schedule 28.01.2015

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

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

person George McKinney    schedule 08.03.2018

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

person R Earle Harris    schedule 29.05.2013