Программирование сразу под J2ME и Android

Темы о Java и ее разновидностях типа J2me
Ответить
Аватара пользователя
blackstrip
Админ
Сообщения: 1349
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Программирование сразу под J2ME и Android

Сообщение blackstrip » Чт авг 20, 2026 8:28 pm

В 2000х для мелких экранов телефонов писались разные небольших утилиты на J2ME:

Изображение Изображение Изображение Изображение Изображение Изображение Изображение Изображение

Часть из них лежат в этой теме: http://forum.blackstrip.ru/viewtopic.php?t=614

Когда стали выходить телефоны с экраном побольше - в какие-то пришлось добавлять маломальское масштабирование, а какие-то забросить, т.к. вспомогательные функции, встроенные в телефон, да и выпускающиеся в то время новые мидлеты с лихвой перекрывали по возможностям эти поделки ранней явы)

Microemu позволит превратить J2ME-миниутилиту в ее андроид-версию.

Таким образом, можно делать разные мини-проги, которые сразу будут работать на андроиде, и на j2me-телефонах для цифрового детокса и любителей древностей. Понятно что это будут именно мини-проги чтобы они шли на всём сразу.

Каким должен быть этот мидлет чтобы пойти и на любой яве, и на любом андроиде сразу

По результатам тестов на крупных и мелких телефонах можно собрать тот минимум параметров, которым должна удовлетворять ява-программа чтобы работать много где: viewtopic.php?f=4&t=972&p=3633#p3633

Память

Вопрос с памятью (ява-хипом) можно решить, пытаясь уместить требования утилиты/игры в несколько десятков килобайт. Ну у Siemens SL45i и C55, как самых слабых телефонов черно-белых, было около 150 килобайт хипа.

Управление

Вопрос с управлением на разных моделях разных марок j2me-телефонов тоже можно решить, например, используя для управления стандартные коды клавиш. Или использовать getGameAction(keyCode) чтобы управлять и джойстиком по клавишам LEFT,RIGHT,UP,DOWN,FIRE (какие это клавиши на физическом устройстве - известно только самому телефону, на котором вызвана эта функция getGameAction). А можно вообще добавить в мидлет мини-назначатель клавиш, но это усложнит его. Лучше всего, наверное, использовать стандартные клавиши с подписями/дублирующими экранными кнопками типа "5 - начать", "0 - выход".

Экран

Получается, наша мини-прога запускается на экране начиная со 101x64 пикселя (Siemens C55) и заканчивая андроидовскими 1500x2200 пикселей и больше. Нужно ввести универсальное масштабирование всего - шрифтов, графики и т.д.

Бывает еще, например, Nokia 3510i с поддержкой явы, у нее цветной экран 96x65, это даже меньше сименсов по ширине, но высота примерно такая же Т.е. минимальная высота экрана у мобильников с явой - все равно 64 пикселя, вроде как.

Т.к. прога будет запускаться и на андроидах, и на j2me-нокиях с гироскопом типа Nokia 5530 - то предполагаем что экран может вращаться. И после поворота высота экрана может стать шириной, а ширина высотой.

Шрифт можно использовать мелкий, но масштабировать его не как сейчас "шрифт окон" в PaintCAD Mobile рисуется просто большими пикселями квадратными, а каким-то сглаживающим алгоритмом типа advMame x2, x3. Доращивать его на старте программы до необходимого размера чтобы по минимальному размеру (ширине/высоте) экрана влезало заранее условленное нужное количество строк.

Если минимальная высота экрана 64 пикселя (представим что Siemens C55 повернул экран воображаемым гироскопом, которого в нем нет), и хочется чтобы влезало 10 строк по высоте, то высота буквы шрифта должна быть от 64/10 = 6 пикселей и далее растимая масштабированием до бОльших высот.

По ширине экрана для комфортного отображения, хорошо бы, влезало 15-20 символов. Тогда ширина буквы будет от 64/15 = 4 пикселя. А символы M, W, @ придется сделать пошире, 6-7 пикселей чтоб читались.

Т.е. должен быть микрошрифт с буквами, в среднем, 6x4 пикселя, масштабируемый до гигантских размеров и рисующийся красиво на больших размерах. Интересно, возможно ли это)

Можно еще использовать векторный шрифт из линий и эллипсов, записанный, например, прямо в код или в отдельный файл координатами и типами фигур. С ростом разрешения линии будут утолщаться, а фигуры масштабироваться.

Для графики тоже использовать не "мыло" линейной интерполяции, а какой-то умный пиксельный алгоритм.

Мультимедиа

Если захочется использовать в таком приложении музыку и звуки - используем возможности из j2me. Надо будет только посмотреть насколько хорошо они поддерживаются в microemu.

3D

В телефонах без M3G-технологий простенькое 3D можно отрисовать на экране и по паре простых формул, проецирующих точку трехмерного пространства на двумерный экран. Если выкинуть текстуры, а использовать монотонно раскрашенные полигоны, и отрисовывать их от дальнего к ближнему, то что-то получится похожее на 3D. Вопрос какой будет FPS на Siemens C55, наверное, низкий +) Но 3D - это, кстати, универсальный масштабирующийся растр, т.к. рисуются треугольники, то они и на 101x64, и на 4K выглядят одинаково как треугольники с ровными линиями-границами толщиной 1 пиксель, квадратных пикселей там никогда не появится. Придумать бы что-то подобное масштабирующееся и для 2D растра.

Итог

Это должен быть целый движок, содержащий масштабирование шрифтов и графики под любой растр от 64x64 и выше, влезающий в 150 килобайт хипа, управляемый стандартными физическими клавишами телефона и с сенсорного экрана, при желании использующий музыку, звуки и софтверное медленное 3D.

Аватара пользователя
blackstrip
Админ
Сообщения: 1349
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Программирование сразу под J2ME и Android

Сообщение blackstrip » Пт авг 21, 2026 6:50 pm

Первая мини-утилита, которую хотелось бы сделать - это небольшой бенчмарк, оценивающий скорость работы явы в стандартных режимах.
Бенчмарки, конечно, уже есть какие-то в мире. Но что они показывают - загадка =) И насколько это линейно относится к скорости работы самого телефона - тоже загадка. В самодельном бенчмарке все будет понятнее.
Один режим - математика. Например, складываем, вычитаем, умножаем и делим два числа (можно два случайных положительных ненулевых числа, каждый раз создаваемых в новой итерации заново, например, от 10 до 100). И делаем это 10 секунд, подсчиывая сколько раз это получилось сделать. Потом выводим результат. Если один телефон работает с математикой в 2 раза быстрее чем другой - то и результат будет ровно в 2 раза больше.

Второй режим - 2D примитивы. Делаем белую картинку 64x64 пикселя, и по очереди закрашиваем точки с белого на черный, потом, как пройдем весь рисунок, то красим с черного на белый. Считаем за 10 секунд сколько точек закрасили. Если телефон рисует примитивы в 2 раза быстрее чем другой - то и результат будет в 2 раза больше.

Третий режим - 2D вывод картинок. Делаем белую картинку 64x64 пикселя. Делаем вторую картинку 32х32 пикселя с каким-нибудь стандартным наполнением (черный круг на белом фоне, к примеру) и вставляем ее по очереди во все места без срезания (получается от 0 до 33 по X, и от 0 до 33 по Y). Считаем за 10 секунд сколько картинок вставили. Если телефон вставляет картинки в 2 раза быстрее - то и результат будет в 2 раза больше.

В итоге запуск - ждем 30 секунд, получаем 3 числа: математика, 2D примитивы, 2D картинки.

Тогда можно будет сравнить Siemens C55 и современный любой андроид, увидев во сколько миллионов раз он быстрее в обычной математике и простом рисовании)

Еще, наверное, если на телефоне несколько процессов запущены включая разные фоновые, системные и т.п., то наверняка один важный системный процесс может залагивать другие, менее важные процессы (включая наш с идущим тестом). Тогда в течение 10 секунд теста нужно каждую секунду замерять промежуточный результат и запоминать. И в конце кроме числа выдавать график из 10 точек, где будет виден результат за каждую из секунд и максимальный (или средний, может) из них как финальный. Тогда в конце теста на экране будут 3 графика хода теста и 3 финальных числа результатов. Если график будет болтающийся (то быстро считал/рисовал телефон, то медленно), то значит тест плохо прошел, кто-то ему мешал, и хорошо бы запустить его еще раз чтобы получить неболтающиеся графики и более точные результаты.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость