problemas para firmar el midlet
Hola,
Aunque se que algunos temas parecidos se han tratado en este foro, sigo sin poder resolverlo asi que les comento la version mas simplificada de mi problema:
1- Tengo un midlet que funciona perfectamente sin hablitar ningun permiso especial y sin firmar. Esta desarrollado en NetBeans que es quien genera el .jad
2- Usando Motorola IDEN SDK intento firmar el midlet como OPA. Uso para ello el IMEI que esta escrito en el telefono en el que lo voy a instalar que es el mismo que me da el menu de mantenimiento del telefono.
3- Cuando cargo el midlet firmado no llega a instalarse y da un error de Authentication Error.
A la pregunta de para que quiero firmar el midlet la respuesta es que quiero usar la API de CustomerCare que al menos en un midlet sin firmar no me devuelve los valores correctos de IMEI y numero de serie. ( mi verdadero objetivo es realmente ese: leer el IMEI y el numero de serie desde el midlet, si alguien sabe como resolver eso sin firmar el midlet, mejor !!!)
Saludos y desde ya gracias.
Francisco
- Por favor, se logue ou se registre para poder enviar comentários
- 4387 leituras
Yo simplemente
al momento de crear el jar/jad
puse el Security Domain como manufactura
con eso nunca he tenido problemas
al usar socket o datagramas...
ni con los APIs de motorla
- Por favor, se logue ou se registre para poder enviar comentários
Hola Flarramendi,
Al firmar el MIDlet, debes usar 14 dígitos del IMEI. Por alguna razón, Motorola escribe el IMEI físico en el equipo con 15 dígitos (el último siempre es un cero), pero el SDK sólo requiere catorce.
Si le eliminas el último cero, te funcionará.
Lo otro que puedes hacer para ahorrarte el quitarle la batería al equipo y todo lo demás es la siguiente secuencia desde el menú principal del equipo:
# * Menu Derecha
Al ingresar al Modo de Rastreo, si te desplazas hacia abajo vas a ver una opción, IMEI/SIM ID/NS -- de ahí puedes obtener el IMEI del equipo (y este te lo da con 14 dígitos).
Para leer esos valores programáticamente en una aplicación Java, tienes que usar la API CustomerCare, la cual requiere una firma digital. Si quieres tener una firma permanente (es decir, una que funcione en todos los equipos), tendríamos que conversar para obtener una firma para tu aplicación dependiendo de lo que quieras estar haciendo con ella.
Saludos,
Juan Felipe
- Por favor, se logue ou se registre para poder enviar comentários
Gracias a todos por las respuestas.
Les comento que sigo con problemas y paso a enumerar algunas pruebas que he hecho:
1- Para descartar posibles problemas en mi midlet use la Hello Midlet que hace automaticamente el NetBeans 5.5.1. Esta midlet sin firmar funciona en el telefono.
2- Firmo la midlet sin agregar ningun codigo. Sigue funcionando bien.
3- Pongo al inicion del startApp() la linea:
CustomerCare.getClientInfo( CustomerCare.IMEI);
Sin firmar la midlet parece funcionar bien pero si hago un System.out.println de la string que devuelve veo que no coincide con el IMEI del telefono.
4- Firmo esta midlet sin agregar ningun permiso a ninguna API y la midlet arranca en el telfono pero da una Security Exception en el standard output(puerto serie) y la correspondiente Unhandled Exception en el telefono.
5- Agrego el permiso para esta API en el jad, vuelvo a firmar. La midlet no se llega a instalar y el telefono me muestra Authorization Error.
Hice algunas pruebas mas de formato del jad y obfuscando y no obfuscando sin ningun resultado.
Alguna sugerencia?
Alguien me puede indicar como hacer una midlet lo mas simple posible, que use las API del CustomerCare y que funcione?
Alguien lo ha hecho?
Saludos y nuevamente mil gracias por las respuestas.
Francisco
- Por favor, se logue ou se registre para poder enviar comentários
Hola Francisco,
Asegúrate de hacer lo siguiente:
- poner en el JAD,
MIDlet-Permissions: com.mot.iden.customercare.CustomerCare.UnitInfo - firmar el MIDlet en dominio OPA (Operador) en el SDK usando el IMEI de 14 dígitos
- borrar cualquier vestigio de alguna instalación anterior del MIDlet en el equipo
- reinstalar la aplicación en el equipo
Si eso no te da resultado, asegúrate que tienes la versión más reciente del firmware del equipo (también lo obtienes en el menú trace, llegas a él oprimiendo #*Menu-Derecha ) y si no, actualiza el firmware descargando la versión más reciente desde el sitio de actualización de software de Motorola.
Saludos,
Juan Felipe
- Por favor, se logue ou se registre para poder enviar comentários
Hola Juan Felipe,
Ante todo queria disculparme porque no habia podido seguir con este asunto.
Bueno, siguiendo tus indicaciones consegui firmar con exito una MIDlet de prueba.
Basicamente mi error consistia en que en el jad, en los MIDlet-Permissions, escribia:
MIDlet-Permissions: com.mot.iden.customercare.CustomerCare
En lugar de el correcto:
MIDlet-Permissions: com.mot.iden.customercare.CustomerCare.UnitInfo
De esta manera pude hacer una simple MIDlet que lee el IMEI del telefono y lo muestra correctamente por el puerto serie.
Saludos y muchisimas gracias,
Francisco Larramendi
- Por favor, se logue ou se registre para poder enviar comentários
Hola gente,
Tengo un problema 'similar' al de mencionado aqui, resulta que tengo una aplicación que corre en background y es ejecutada remotamente, el hecho es que al ejecutarlo aparece la pantalla de Aplicaciones suspendidas, y ví en otro foro que esto se puede evitar firmando la aplicación, estoy usando un i265 con un emulador de dispositivo i355 (la aplicación me funciona correctamete).
Al firmar la aplición no tengo problema pero cuando la instalo aparece el mensaje "Error Autorización", incluso modifique el jad manualmente colocando:
MIDlet-Permissions: javax.microedition.io.PushRegistry, javax.microedition.midlet.MIDlet.platformRequest.*
y luego firmarlo,
la llamada para el inicio remoto la hago en el jad así:
MIDlet-Push-1: socket://:1003,hello2.SimpleBGMidlet2,*
seguí todos los pasos que aquí mencionan, generé un ejemplo mínimo, el mismo lo puedo firmar pero cuando le agrego la api PushRegistry me sucede esto.
¿De qué manera puedo hacer efectiva la firma?
desde ya gracias!
- Por favor, se logue ou se registre para poder enviar comentários
Hola ittisa,
Revisa lo siguiente:
- asegurar que estás usando el IMEI correcto del equipo (el que ves en la pantalla del Trace mode, al cual accedes usando # * Menú-Flecha derecha). El IMEI que está escrito en la etiqueta bajo la batería tiene un dígito de más;
- asegurar que estás listando para el i265 sólo las APIs protegidas que estás usando, y nada más;
- no modificar el JAD manualmente para las políticas de seguridad, usar el Manifest/JAD editor del SDK de iDEN. El equipo es muy quisquilloso en relación al formato que tiene MIDlet-Permissions: los valores no pueden tener espacios entre la coma y el valor que le sigue, por ejemplo. Te puedes evitar muchas horas de frustración usando el SDK para hacer esa modificación manualmente.
Saludos,
Juan Felipe
- Por favor, se logue ou se registre para poder enviar comentários
Finalmente, con ayuda de Nextel Argentina, he podido firmar la aplicación pero... NO incluyendo la api javax.microedition.midlet.MIDlet.platformRequest.*
que es lo que necesitaría para que la aplicación al ejecutarse por socket o alarma no muestre el display de aplicaciones suspendidas (de acuerdo al tema http://programa.nii.com/es/node/288)
Viendo las recomendacione en http://programa.nii.com/es/tecnologias/javame/securitydomains entiendo que lo siguiente es lo que tengo que aplicar:
Invocación automática de aplicaciones (Application Auto Invocation) [javax.microedition.io.PushRegistry, javax.microedition.midlet.MIDlet.platformRequest.*]
el Jad lo creo con los siguientes permisos:
MIDlet-Permissions: javax.microedition.io.PushRegistry, javax.microedition.midlet.MIDlet.platformRequest.*, javax.microedition.io.Connector.serversocket
la firma la hace correctamente y cuando inicio la instalación en el equipo me da "Error de Java"
¿Cuál es la forma correcta de hacer esta implementación y/o firma?
Gracias.
equipo: i265; tipo firma: OPA; entorno: Iden SDK i830
- Por favor, se logue ou se registre para poder enviar comentários
Hola ittisa,
¿Qué exactamente tienes en el campo MIDlet-Permissions: del JAD?
¿Cómo estás agregando valores a ese campo? ¿Lo estás haciendo con el SDK iDEN?
Saludos,
Juan Felipe
- Por favor, se logue ou se registre para poder enviar comentários

Joined: 2008-05-26