Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki:4.-cliente:4.6.-modulos:e.-creacion-de-plugins-xone:start [2019/11/07 16:38]
ary
wiki:4.-cliente:4.6.-modulos:e.-creacion-de-plugins-xone:start [2019/11/07 16:48] (actual)
ary
Línea 1: Línea 1:
-<note important>DEPRECATE</note>//+<note important>DEPRECATE</note>
  
-====== Extender el framework de Android mediante el sistema de plugins ======+===== Extender el framework de Android mediante el sistema de plugins =====
 \\ \\
 En Android, gracias a la técnica de programación Java conocida como //reflection//, es posible cargar código nativo Java y C/C++ dinámicamente en tiempo de ejecución. En Android, gracias a la técnica de programación Java conocida como //reflection//, es posible cargar código nativo Java y C/C++ dinámicamente en tiempo de ejecución.
Línea 11: Línea 11:
  
  
-===== Requisitos =====+==== Requisitos ====
 <WRAP center round important 90%> <WRAP center round important 90%>
   * Se asume que se tienen sólidos conocimientos de programación en Android.   * Se asume que se tienen sólidos conocimientos de programación en Android.
Línea 19: Línea 19:
 </WRAP> </WRAP>
  
-===== Notas =====+==== Notas ====
 \\ \\
 <WRAP center round important 90%> <WRAP center round important 90%>
Línea 28: Línea 28:
 </WRAP> </WRAP>
  
-===== Pasos previos =====+==== Pasos previos ====
  
 Comenzamos creando un nuevo proyecto de Android en el Eclipse. Le damos un nombre interno, seleccionamos un target, añadimos iconos, no es necesario que creemos ninguna actividad. Comenzamos creando un nuevo proyecto de Android en el Eclipse. Le damos un nombre interno, seleccionamos un target, añadimos iconos, no es necesario que creemos ninguna actividad.
Línea 41: Línea 41:
 Ya casi estamos listos. Ahora, se puede interactuar con el framework de dos formas. Una es mediante código VBScript, y la otra es creando un prop de type="IMG" que incrustará el objeto View de nuestro plugin. La primera forma es la más sencilla y comenzaremos por ahí. Ya casi estamos listos. Ahora, se puede interactuar con el framework de dos formas. Una es mediante código VBScript, y la otra es creando un prop de type="IMG" que incrustará el objeto View de nuestro plugin. La primera forma es la más sencilla y comenzaremos por ahí.
  
-====== Cargando el plugin mediante VBScript ====== +===== Cargando el plugin mediante VBScript ===== 
-===== Código Java =====+==== Código Java ====
 \\ \\
 Comenzamos creando en el plugin una nueva clase <nowiki>testclassscripting</nowiki>.java que extienda a <nowiki>:iruntimeobject</nowiki>, y que siga este esquema. Comenzamos creando en el plugin una nueva clase <nowiki>testclassscripting</nowiki>.java que extienda a <nowiki>:iruntimeobject</nowiki>, y que siga este esquema.
Línea 186: Línea 186:
 |**Invoke**| Este método será invocado por el framework cada vez que se invoque un método del objeto plugin que hemos creado. Nos devuelve el nombre de la función invocada. Tal y como se muestra en el ejemplo podemos usarlo para saber qué método interno invocar. Se deben llamar igual tanto en el <nowiki>xonevbstypeinfoholder</nowiki> como en nuestro script, y por convención, también en los métodos internos.| |**Invoke**| Este método será invocado por el framework cada vez que se invoque un método del objeto plugin que hemos creado. Nos devuelve el nombre de la función invocada. Tal y como se muestra en el ejemplo podemos usarlo para saber qué método interno invocar. Se deben llamar igual tanto en el <nowiki>xonevbstypeinfoholder</nowiki> como en nuestro script, y por convención, también en los métodos internos.|
  
-===== Código VBScript =====+==== Código VBScript ====
 \\ \\
 Ahora, en nuestra aplicación XOne, ejecutamos este script. Ahora, en nuestra aplicación XOne, ejecutamos este script.
Línea 199: Línea 199:
 \\ \\
 Como podemos ver, hemos especificado al <nowiki>createobject</nowiki> **el nombre interno de nuestro paquete plugin y el nombre completo cualificado de la clase que vamos a cargar.** Como podemos ver, hemos especificado al <nowiki>createobject</nowiki> **el nombre interno de nuestro paquete plugin y el nombre completo cualificado de la clase que vamos a cargar.**
-====== Cargando el plugin mediante prop ====== +===== Cargando el plugin mediante prop ===== 
-===== Código Java =====+==== Código Java ====
 Para esta forma de plugin, la estructura de la clase debe seguir más o menos este esquema. Creamos la siguiente clase [[wiki:4.-cliente:404.-modulos-plugins:401.13.-creacion_de_plugins_xone:testclass]].java para el ejemplo. Para esta forma de plugin, la estructura de la clase debe seguir más o menos este esquema. Creamos la siguiente clase [[wiki:4.-cliente:404.-modulos-plugins:401.13.-creacion_de_plugins_xone:testclass]].java para el ejemplo.
 <code java> <code java>
Línea 327: Línea 327:
 } }
 </code> </code>
-===== Código VBScript =====+==== Código VBScript ====
 <code vb><prop name="MAP_TESTPLUGIN" classid="com.xone.testplugin:com.xone.pluginpackage.TestClass" title="Test Plugin" labelwidth="0" type="IMG" visible="1" group="1" width="300" height="300" /></code> <code vb><prop name="MAP_TESTPLUGIN" classid="com.xone.testplugin:com.xone.pluginpackage.TestClass" title="Test Plugin" labelwidth="0" type="IMG" visible="1" group="1" width="300" height="300" /></code>
  
-====== Otras notas ======+===== Otras notas =====
  
-===== Recursos =====+==== Recursos ====
 A la hora de desarrollar el plugin, podemos cometer el error de usar los recursos de nuestro paquete directamente, estilo R.string.loquesea, sin tener en cuenta que estamos en una clase reflejada y que los recursos locales son los del framework, no nuestro plugin. Esto es muy habitual en la programación Android y no es posible usarlo directamente con los plugin. A la hora de desarrollar el plugin, podemos cometer el error de usar los recursos de nuestro paquete directamente, estilo R.string.loquesea, sin tener en cuenta que estamos en una clase reflejada y que los recursos locales son los del framework, no nuestro plugin. Esto es muy habitual en la programación Android y no es posible usarlo directamente con los plugin.