forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Расширение MP (http://forum.boolean.name/showthread.php?t=7526)

odd 29.12.2008 01:35

Расширение MP
 
У меня тут возникла интересная идея небольшого расширения MIDlet Pascal.
1. Короче, нужно написать программу, которая будет распаковывать JAR файл и добавлять туда всё содержимое папки res2 (вместе с подкаталогами) и запаковывать всё это назад. Сама программа должна вызываться как эмулятор, т.е. с помощью нажатия кнопки "Скомпилировать и запустить". А потом отлаживать полученную программу можно кнопкой "Запустить" (конечно, нужно перед этим будет поменять эмулятор).
2. Вторая идея. Программа практически аналогичная, но уже будет выполнять антиантивирусные функции, т.е. заменять классы S.class, FW.class, FS.class и др. на патченые.
Для программы вовсе не нужен интерфейс. Все параметры передаются через командную строку. Если исхитриться, можно такое написать даже с помощью BAT файла. Ну, что, есть тут мастера кодинга на других языках кроме MP? Или мне самому написать?

ViNT 29.12.2008 01:50

Ответ: Расширение MP
 
Могу натыкать на Delphi, можно без интерфейса, можно с окошком типа "скопировано то-то туда-то", как лучше. Под ZIP/UNZIP компонента есть.
------------------------
В общем-то, даже возиться с распаковкой\упаковкой не придется - у компоненты есть один интересный метод - можно натравить его на нужную папку, и он сам добавит все содержимое папки в архив вместе с подкаталогами.

Skythrone 29.12.2008 18:55

Ответ: Расширение MP
 
Проще всего сделать через .bat-файл и 7zip.
Запускать так: go.bat название_мидлета.jar

Соответственно, в текущей папке должны лежать "правильные" классы S.class и т.п.

PHP код:

@rem --------------------------------------------- Обновление архива мидлета
7z d 
%1 FW.class S.class SM.class
7z u -mx9 %1 FW.class S.class SM.class 

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

Всё это делается в обычном bat-файле и при необходимости ещё немного с использованием скриптов.

ViNT 30.12.2008 01:41

Ответ: Расширение MP
 
В общем, предлагаю такой вариант:
Пишем программу на Delphi которая:
-при запуске с параметром типа -jar project.jar выполняет с указанным файлом действия, предусмотренные конфигурацией, хранящейся в папке проекта(о конфигурации ниже); если присутствует параметр -run:true, проект запускается после модификации;
-при запуске с параметром -setup открывается окно конфигурации, в котором можно указать:
-копировать дополнительные ресурсы или нет;
-заменить ли классы мидлета пропатченными;
-какие параметры следует изменить/добавить в MANIFEST.MF и JAD;
-какую коммандную строку эмулятора использовать при запуске;
-возможно еще что-то, предлагайте.
Конфигурация будет сохраняться в INI-файле в папке проекта.

При установке программа будет создавать 3 конфигурации эмулятора:
-для модификации мидлета;
-для модификации и запуска мидлета;
-для изменения конфигурации;
(концы в реестре уже нашел, как добавлять эмуляторы разобрался)

Реализовать все это(качественно) смогу в течение нескольких дней.

ViNT 08.01.2009 01:05

Ответ: Расширение MP
 
Вопрос к автору идеи: нужно ли еще что-то добавить к предложенной концепции?
З.Ы. Программа в общем практически готова, осталось доделать модуль конфигурации и все проверить.

ViNT 10.01.2009 02:08

Ответ: Расширение MP
 
Вложений: 2
Итак, тестовый вариант программы готов.
Реализовано:
-Добавление дополнительных ресурсов в проект(в т.ч. и папок)
-Замена классов
-Добавление и изменение параметров в MANIFEST.MF
-После модификации генерируется новый JAD-файл
-Программа для автоматической установки "эмуляторов", запускающих программу в разных режимах

Пока тестовая верисия, простым юзерам качать не советую

Установка:
Распаковать архив в любую папку, например, в папку MP.
Запустить AddEmuls.exe, если появится сообщение "Конфигурация эмуляторов записана успешно", значит все нормально.
В MP после этого должны появиться 3 новых эмулятора:
MPExt - Модификация - выполнить модификацию
MPExt - Конфигурация - вызов модуля конфигурации проекта
MPExt - Модификация и запуск - выполнить модификацию и запустить мидлет

Далее:
В папку Patched скопировать классы, которые следует заменить.
Создать в папке проекта папку Res2 и скопировать в нее дополнительные ресурсы.
Открыть проект, запустить эмулятор "MPExt - Конфигурация"
В окне конфигурации:
Указать, нужно ли заменять классы и добавлять ресурсы
Указать коммандную строку эмулятора (как в MP)
Ввести параметры, которые следует заменить/добавить в MANIFEST.MF
Установить флажок "Модификация MANIFEST.MF" (если нудно выполнить модификацию).
OK - сохранение конфигурации.
Далее, с помощью эмуляторов
MPExt - Модификация
MPExt - Модификация и запуск

можно выполнить модификацию мидлета и его запуск.

Про MP_Ext_RunFix читать в посте #27.

Обо всех найденных ошибках просьба сообщить.

oposum_2000 13.01.2009 14:57

Re: Расширение MP
 
Privet,

U menea vopros po libe Array2D ... vozmojnoli Dim(x,y) ne s type integer a custom type... ( ex : masiv:=Dim(10,20) of Hlimits; or masiv:=Dim(10,20,Hlimits); )


type Hlimits = record
x,y,dx,dy:integer;
end;


bolishoe spasibo,

oposum.

Serg153 18.01.2009 14:46

Ответ: Расширение MP
 
Возможно ли с помощью какой либо функции определить, что пользователь Закрывает мидлет...
либо например в телефоне откл энергия... т.е. узнать принудительно ли закрывается программа?

abcdef 19.01.2009 00:15

Ответ: Расширение MP
 
пусть программка пишет что-нить в RMS в самом конце выключения, при включении проверяет и стирает эту запись. А что происходит выключение прога не узнает, есть только метод вызываемый при сворачивании программы

Piligrim 19.01.2009 17:31

Ответ: Расширение MP
 
С учетом возможности подмены стандартных классов, можно добавить обработку destroyApp и определять реакцию приложения на закрытие, аналогично можно поступить и с pauseApp.

ViNT 19.01.2009 17:49

Ответ: Расширение MP
 
А есть ли у кого-нибудь каке-либо мысли по поводу самой программы?
Оду ошибку я уже нашел и пофиксил(добавлялись все классы из папки патча, а не только те, которые есть в архиве). Жду новых предложений и замечаний.

odd 19.01.2009 18:58

Ответ: Расширение MP
 
Спасибо на этом. Пока ничего больше не нужно.

odd 19.01.2009 19:34

Ответ: Re: Расширение MP
 
Цитата:

Сообщение от oposum_2000 (Сообщение 94620)
Privet,
U menea vopros po libe Array2D ... vozmojnoli Dim(x,y) ne s type integer a custom type... ( ex : masiv:=Dim(10,20) of Hlimits; or masiv:=Dim(10,20,Hlimits); )
type Hlimits = record
x,y,dx,dy:integer;
end;
bolishoe spasibo,
oposum.

И да и нет. В либе можно хранить ТОЛЬКО int, но в твоём случае можно сделать маленькое исключение. При создании таблицы размер нужно брать в 4 раза больший, чем твоё количество Hlimits'ов, примерно так: Dim(1, 400); - для массива на 100 элементов. Для записи одного Hlimits в массив используем процедуру примерно такую:

PHP код:

Procedure Put_hl(xintegeryintegerdxintegerdyintegeraddrinteger);
begin
    PutInt
(1addr 4x); PutInt(1addr 1y);
    
PutInt(1addr 2dx); PutInt(1addr 3dy);
end

Для чтения процедура аналогичная (нужно будет только выше объявить временные переменные xx, yy, ddx, ddy типа integer):
PHP код:

Procedure Get_hl(addrinteger);
begin
    xx
:=GetInt(1addr 4); yy:=GetInt(1addr 1);
    
ddx:=GetInt(1addr 2); ddy:=GetInt(1addr 3);
end


oposum_2000 20.01.2009 16:43

Re: Ответ: Re: Расширение MP
 
spasibo :rolleyes: za cod dlea Array2D. jalko chto toliko int sohraneaiet.

krome hlimits u menea i drugie tipy dannyh i po slojnei. Nu eto vse bylo mojno sdelati v MP toliko nado bylo znati zaranne razmer dannyh. V Array2D etovo ne nujno .... razmer mojno staviti pri run-time. S pereadesatiei budet slojnovato esli text i boolean nado .... hmmm posmotrim .

eshe raz spasibo!

ViNT 21.01.2009 01:26

Ответ: Расширение MP
 
Выкладываю подправленную версию программы.
Теперь в архиве обновляются только те классы, которые прописаны в конфигурации.
Для того, чтобы класс был заменен пропатченным, его нужно добавить в список в окне конфигурации.
Также можно выбрать использование классов из папки Patched в директории проекта или из стандартного набора (из папки программы).
Также добавил возможность выбора уровня компрессии ресурсов из папки Res2.
Программу обновил в том же сообщении.

Piligrim 21.01.2009 11:20

Ответ: Расширение MP
 
А где брать AddEmuls.exe?

ViNT 21.01.2009 13:07

Ответ: Расширение MP
 
Сори, залил не тот архив, теперь все должно быть на месте.

temned 21.01.2009 15:57

Ответ: Расширение MP
 
Спасибо vint

Piligrim 30.01.2009 23:39

Ответ: Расширение MP
 
У меня AddEmuls вылетает с эксепшеном. Конфигурации не создает.
WinXP SP2

ViNT 31.01.2009 01:45

Ответ: Расширение MP
 
Странно, буду разбираться.
Как вариант, надо проверить, есть ли в реестре раздел
HKEY_CURRENT_USER\Software\MIDletPascal2\MIDletPas cal\EMULATOR.
Там MP хранит конфигурацию эмуляторов, с этим разделом и работает программа.

Piligrim 31.01.2009 13:33

Ответ: Расширение MP
 
Вручную создал все нужное в реестре. Конфигурация заработала.
По запуску: MPExt получает %JAR%, а эмулятору WTK нужен %JAD%, а он запускается из MPExt и похоже последний не понимает этого. Т.е. файлы он патчит, ресурсы добавляет и т.д., а вот сам эмулятор не запускается.
Чертовщина какая-то :(

ViNT 01.02.2009 00:32

Ответ: Расширение MP
 
Так... Не совсем понял - эмулятор не запускается?
Какая коммандная строка используется?
У меня эмулятор WTK нормально запускался по строке %JAD%.
По поводу добавления эмуляторов - включу автоматическое создание раздела.

Piligrim 01.02.2009 00:38

Ответ: Расширение MP
 
C:\Program Files\NetBeans 6.5\mobility8\WTK2.5.2\bin\emulator.exe -Xdescriptor:%JAD%
а запуск эмулятора - D:\Java\MIDletPascal\MPExt -%JAR% -RUN
Окно формы моргает и сразу пропадает. В системе стоит Outpost, но и если его выгрузить, все остается по прежнему.

ViNT 01.02.2009 17:59

Ответ: Расширение MP
 
Если эмулятор запускается, то все нормально - интерфейса у программы нет, только окно настройки, в режиме модификации окно и должно пропадать.

Исправил AddEmuls.exe - теперь в случае отсутствия раздела программа создает его сама.

Doctor Drive 16.03.2009 20:38

Ответ: Расширение MP
 
Цитата:

Сообщение от ViNT (Сообщение 96587)
Если эмулятор запускается, то все нормально - интерфейса у программы нет, только окно настройки, в режиме модификации окно и должно пропадать.

Исправил AddEmuls.exe - теперь в случае отсутствия раздела программа создает его сама.

Хз, но у меня так и не работает...

Piligrim 16.03.2009 23:36

Ответ: Расширение MP
 
У меня проблема решилась использованием другой функции для вызова эмулятора. Я так и не определился кто блокирует вызов доктор веб или outpost, сейчас все окей.

ViNT 17.03.2009 00:29

Ответ: Расширение MP
 
Пока не знаю, что с этим делать - ShelExecute работает не у всех, а WinExec не запускает эмулятор посредством выполнения JAD файла (как, например эмуль из WTK, ассоциируемый с JAD'ами). Пока решение такое: заменяем экзешник из архива MP_Ext_RunFix из поста #6, вместе с ним распаковываем Config.ini. Дальше пробуем запускать как есть (через ShellAPI), если не идет - меняем в Config.ini значение ShellRun в секции [Emulator] на 0 и пробуем запускать так.

@llien 19.03.2009 13:56

Ответ: Расширение MP
 
а если создавать батниками?

Richik 17.05.2009 13:18

Ответ: Расширение MP
 
Вложений: 1
Что-то я не смог разобраться, как с этим работать.
Прошу прощения за дерзость у ViNT'а, но выкладываю свой компрессор.

Команды запуска:
В MIDletPascal необходимо написать так
"Диск:\Путь\AddRes.exe" %JAR%

В самом компрессоре команда выглядит так:
"Путь до эмулятора" -jar "Путь до Jar-файла –r

Не знаю как в WTK, но с MidpX работает

Хочу заметить, что MIDletPascal не воспринимает адреса содержащие "русские имена" (путь в содержании которого имеются русские буквы). Например если у вас AddRes лежит папке"Рабочий стол", то МР не запускает его (Долго не мог понять почему у меня не запускается прога из МР, пока не скопировал в другое место)

Метод работы:
1. Скопируйте AddRes в любую папку (в соответствии описания выше)
2. Запустить приложение (двойным щелчком) и укажите путь до эмулятора
3. в MIDletPascal, в настройках эмулятора, укажите путь до AddRes.exe и добавьте команду в конец строки %JAR%
Должно быть примерно так: Диск:\Путь\AddRes.exe %JAR%
4. Все ресырсы необходимо поместить в папку "res" Вашего проэкта.
По завершению работы компрессора, готовый Jar-файл появляется в корневой папки проекта.

Обработка JAD-файла в ближайшей перспективе..

Richik 18.05.2009 22:16

Ответ: Расширение MP
 
Вложений: 1
Вторая версия компрессора, дописал создание и запуск JAD-файлов

Даже при работе через JAD, в MIDletPascal необходимо писать туже команду запуска:
"Диск:\Путь\AddRes.exe" %JAR%

demon112 19.05.2009 08:24

Ответ: Расширение MP
 
У мя на wtk эмулятор не запускается.. компилятор компилит и всё.... или он с wtk не пашет? какую надо формулу чтавить? ещё, сделай чтб сохранялась в папку bin, а не в корневой коталог если можно...

Richik 19.05.2009 10:49

Ответ: Расширение MP
 
В bin лежит оригинал, не кто не когда не заменяет оригинальный файл, это признак плохого тона, но можно сохранять с другим именем, если критично, сделаю..

На счет формулы в wtk не знаю, но у меня с JadManager работает..
Делаю так:
В адресе написано:
C:\Program Files\Kwyshell\MidpX\JadInvoker\JadManager.exe
Формула:
%JAD%

А с JAR вот такт
Адрес:
C:\Program Files\Kwyshell\MidpX\Midp2Exe\Midp2Exe.exe
Формула:
-jar %JAR% –r

%JAD% и %JAR% пишите только большими буквами, как показано на примере.

Как видите формулы запуска и эмуляторы разные для JAR и JAD файлов. Как сделать в wtk, не знаю, нужно пробовать и искать. У меня но был где-то, но я им не пользуюсь, так как не знаю Яву, и времени особо нет учить ее.

Вопрос, а в WTK, в папке проекта, есть папка "BIN"?


Эмуляторы разные так как JAR эмулятор не поддерживает запуск JAD-файлов, а другой, наоборот.
Вот что говорили на счет WTK ранее в этой теме: а эмулятору WTK нужен %JAD% - 21 пост

demon112 19.05.2009 12:47

Ответ: Расширение MP
 
Папка bin есть, ему jad файл нужен... пишу %JAD% не пахает, может быть путь невернный у мя( я не знаю какой имено экзешник от ВТК... а почему оригинал то не заменяют? всё проканает) сделай плис чтоб заменяло)

Richik 19.05.2009 18:13

Ответ: Расширение MP
 
Сделаю переключатель "Заменять оригиналы".
Чуть позже выложу..

Попробую глянуть что и как там в WTK..

Richik 19.05.2009 23:11

Ответ: Расширение MP
 
Вложений: 1
demon112,
Что-то я не нашел где в WTK можно изменить эмулятор..
Попробуйте вот так:
C:\WTK22\bin\emulatorw.exe
-gui -Xdescriptor:"%JAD%"

Новый релиз компрессора AddRes v 1.0.0.3
Добавлена возможность замены оригинальных JAD и JAR файлов

demon112 20.05.2009 08:19

Ответ: Расширение MP
 
-gui -Xdescriptor:%JAD% - без кавычек - работает.. Пасиб...:super:

Richik 20.05.2009 11:16

Ответ: Расширение MP
 
а в wtk путь до AddRes, вы пишите так: "Диск:\Путь\AddRes.exe" %JAR%?
мне просто интересно)

demon112 20.05.2009 11:50

Ответ: Расширение MP
 
а в wtk то путь зачем писать???

Richik 20.05.2009 12:22

Ответ: Расширение MP
 
Вы пишите в MIDletPascal и пользуетесь эмулятором от WTK?

demon112 20.05.2009 14:52

Ответ: Расширение MP
 
Да, а что?

Richik 20.05.2009 15:20

Ответ: Расширение MP
 
Да не)

demon112 20.05.2009 15:57

Ответ: Расширение MP
 
Определись - да или не))

odd 25.05.2009 22:49

Ответ: Расширение MP
 
Вложений: 1
Запаковщик kZip лучше запаковывает чем стандартный Zip.
Может встроить его в наше дополнение к MP?

Richik 25.05.2009 22:58

Ответ: Расширение MP
 
kZip - Это стороннее консольное приложение. Думаю не стоит чересчур усложнять утилиту различными "тонкими" настройками.

для компресса использовался компонент ZipForge, среда разработки Borland Delphi 7

ViNT 25.05.2009 23:45

Ответ: Расширение MP
 
Цитата:

Сообщение от odd (Сообщение 105856)
Запаковщик kZip лучше запаковывает чем стандартный Zip.
Может встроить его в наше дополнение к MP?

В принципе можно.
У меня с ZipForge были некторые проблемы, при запаковке классов с большим сжатием они не читались на некторых телефонах, и мидлет не запускался.


Часовой пояс GMT +4, время: 10:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot