Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Завернуть jar файл 
:(
    Опции темы
Randomm
Дата 21.11.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



Здравствуйте
Хотелось бы узнать у опытных людей, возможно ли осуществить такое:
Для готового приложения для телефона в виде .jar файла нужно сделать так, чтобы при первом его запуске на телефоне нужно было его "активировать" - то есть прочитать правила и согласиться с ними или отправить смс или что-то ещё. Возможно ли создать такую обёртку для произвольного приложения и так же оформить её jar файлом?
PM MAIL   Вверх
Green_DiCk
Дата 21.11.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.11.2006

Репутация: нет
Всего: нет



Если есть исходники "произвольного приложения" то ноу проблем. Пишешь свой "защитный" класс, потом в методе startApp() делаешь что-нибудь вроде:

Код

public void startApp ()
{
        ProtectClass pc = new ProtectClass();
        if (pc.activated() == false) {   // Если приложение неактивировано 
            boolean termsAccepted = pc.showActivationWindow();   // Показываем окно с условиями
            if (termsAccepted) {  // Если юзер принял условия, то 
                 pc.activateApp();  // Активируем приложение
                 launch();   // Запуск основной логики приложения
            } else {
                 exit();     // Выход
            }
        } else {
             launch();
        }
}


Проверить активировано приложение или нет можно или отправив запрос на сервер (в запросе должны быть уникальные для данной трубки данные) или проверив RMS на наличие соотв. записи.
PM MAIL   Вверх
Randomm
Дата 21.11.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



Green_DiCk, спасибо. А если исходников нет?
Можно ли как-то запаковать нужный jar и запускать его из оболочки?
PM MAIL   Вверх
Green_DiCk
Дата 22.11.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.11.2006

Репутация: нет
Всего: нет



Если нет исходников, то можно попробовать декомпиляцию - декомпилировать главный класс мидлета, изменить метод startApp по описанной выше схеме и скомпилировать заново. Правда я декомпиляцией никогда не занимался, поэтому не знаю - может быть все не так просто. Хотя явных препятствий такому способу я тоже не вижу.
PM MAIL   Вверх
math64
Дата 23.11.2009, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Можно добавить свой мидлет, производный от уже существующего. В его startApp () вставить предложенный код, вместо launch() - super.startApp (). Из манифеста и jad убрать исходый мидлет и вместо него добавить свой. Иногда так может не получиться, да и взломать просто - нужно найти класс оригинального мидлета.
PM   Вверх
eugine_s
Дата 23.11.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



math64, согласен. 
Я так и делал. 
Цитата(math64 @  23.11.2009,  08:49 Найти цитируемый пост)
Иногда так может не получиться

Такое может не получится если:
1) Класс унаследованный от MIDlet объявлен как final. Вопрос решался изменением одного байта в .class файле. Вот тут мне советуют как можно это исправить.
2) Класс унаследованный от MIDlet не находится в каком-либо пакете (а твоя обвертка находится в пакете). Лечится тем что твоя обвертка делается без пакета. 

Я startApp не переопределял, а в конструкторе запускал отдельный поток, который и делал все что нужно. 




PM MAIL   Вверх
podzamkom
Дата 23.11.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.10.2009
Где: Москва

Репутация: нет
Всего: нет



        Позвольте напомнить еще один вариант - создание из файла мидлета *.jar защищенного файла с расширением *.dcf при помощи программы DRM упаковщика, например DRM Packager. Программа создает защищенный файл  *.dcf и файл прав  *.dd , которые (права) пользователь получит через интернет с сервера указанного в защищенном файле. Вся процедура автоматизирована и телефоны (современные) поддерживают этот протокол.

Подробнее не могу сказать, но на форуме есть ветка с одноименным названием.

Если кто может к этому что-либо добавить, милости просим!
PM MAIL   Вверх
math64
Дата 24.11.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Цитата(eugine_s @  23.11.2009,  14:05 Найти цитируемый пост)
Такое может не получится если:1) Класс унаследованный от MIDlet объявлен как final. Вопрос решался изменением одного байта в .class файле. Вот тут мне советуют как можно это исправить.2) Класс унаследованный от MIDlet не находится в каком-либо пакете (а твоя обвертка находится в пакете). Лечится тем что твоя обвертка делается без пакета. Я startApp не переопределял, а в конструкторе запускал отдельный поток, который и делал все что нужно. 

Про эти причины я не думал, а вот Вы запускаете в конструкторе отдельный поток, а ведь также может поступить базовый класс.
А его поток запустится первым, в Вашем конструкторе первым делом должен быть вызван конструктор базового класса. Что делает этот поток, Вы не знаете, и он может конфликтовать в Вашим.
PM   Вверх
eugine_s
Дата 24.11.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(math64 @  24.11.2009,  11:23 Найти цитируемый пост)
 а вот Вы запускаете в конструкторе отдельный поток,

Собственно, про реализацию этого момента забыл упомянуть. 
Конечно же, муть может какая-то получиться, если обвертку еще от Runnable наследовать, поэтому сделал это через внутренний класс.
Что-то типа вот такого: 
Код

public class DemoWrapper extends <MIDLET> {

public DemoWrapper() {
    (new DemoWrapperRunner(this)).start();
}

private class DemoWrapperRunner implements Runnable {

public DemoWrapperRunner(Midlet midlet) { 
}


public void run() {
}
}

}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.