scieee Science in your language
[es] (orig)

VNC++, control remoto desde Android

Abstract

Hoy en día hay una gran cantidad de aplicaciones basadas en VNC para Android. Sin embargo, ninguna de estas aplicaciones son Free Software y se implementan utilizando el NDK. El objetivo de este proyecto es utilizar el potencial NDK para hacer una aplicación basada en VNC y tratar de obtener un mejor rendimiento que el resto de las aplicaciones implementadas utilizando solo el SDK y todo el código fuente será Free Software. El protocolo para comunicarse con un servidor VNC se llama RFB. Para la implementación de este protocolo en este proyecto se ha utilizado la librería libVNCServer. Esta librería facilita el control de RFB. Sin libVNCServer habría sido más difícil hacer nuestra propia librería para gestionar el protocolo. JNI se utiliza como framework para comunicar el código nativo con Java. Las tecnologías, así como el proceso utilizado para construir este software se explicará a lo largo de esta memoria.

Read accessible full text

VNC++, control remoto desde Android

Author: Crespo Salazar, Óscar; Jimeno Garrachón, Gorka; Valero Martín, Luis
Year: 2014
Source: https://docta.ucm.es/bitstreams/86f8d079-989a-4e82-93df-2209836ac31f/download
VNC++, con ol emo o desde And oid
TRABAJO FIN DE GRADO
CURSO 2012-2013
´
Osca C espo Salaza
Go ka Jimeno Ga ach´on
Luis Vale o Ma ´ın
Di ec o
An onio Sa asa Cabezuelo
Depa amen o de Sis emas In o m´a icos y Compu aci´on
Facul ad de In o m´a ica
Uni e sidad Complu ense de Mad id
Mad id, Junio de 2013
iii
Licencias
c
2013 All Righ s Rese ed.
Es a ob a es ´a bajo una Licencia C ea i e Commons A ibuci´on-Compa i Igual 3.0
Unpo ed.
Ag adecimien os
Ag adecemos a Johannew Shindelin po la comple a lib e ´ıa pa a VNC que c e´o y
adem´as dis ibui la de o ma lib e. Y po supues o po su ines imable y desin e esada
ayuda en el Mailing-lis de la p opia lib e ´ıa, an o de ´el como de Ch is ian Beie .
Tambi´en ag adece a la web s acko e low h p://s acko e low.com/, conc e a-
men e la secci´on de And oid, po su ce e a ayuda con esas ine i ables dudas que su gen
al desa olla c´odigo desde ce o.
Tambi´en, como no, ag adece a los desa ollado es de Google, que a a ´es de su
web h p://de elope .and oid.com/index.h ml y cie os ejemplos cla e, han pe mi i-
do culmina es e p oyec o.
Menci´on especial pa a Axel Amigo, buen amigo nues o, que nos ayud´o poniendo oz
al ´ıdeo explica i o del p oyec o, a Ra´ul C espo, po hace el mon aje que an o nos ha
sa is echo a odos, y po supues o, a Se gio Ba asa po el an ´as ico logo ealizado pa a
la aplicaci´on.
Po ´ul imo ag adece a An onio Sa asa Cabezuelo, di ec o del p oyec o, po la con-
ianza deposi ada en noso os y su ines imable ayuda du an e odo el p oceso. Tambi´en
ag adecemos a odos los p o eso es de la Facul ad de In o m´a ica de la Uni e sidad Com-
plu ense de Mad id po p opo ciona nos du an e odos es os a˜nos los conocimien os nece-
sa ios pa a el desa ollo de es e p oyec o.

ii
Abs ac
Nowadays he e a e a lo o VNC based applica ions o And oid. None heless, none
o hese applica ions a e F ee So wa e and a e implemen ed using he NDK. The poin
o his p ojec is o use he NDK po en ial o make a VNC based applica ion and y o
ob ain a be e pe o mance han he o he applica ions implemen ed using only he SDK
and all he sou ce code will be F ee So wa e.
The p o ocol o comunica e wi h a VNC se e is called RFB. To implemen ing his
p o ocol in his p ojec has been used he libVNCSe e lib a y. This lib a y acili a es
he con ol o RFB. Wi hou libVNCSe e i would be mo e di icul o make ou own
lib a y o manage he p o ocol. JNI is used as he amewo k o comunica e he na i e
code wi h Ja a. The echnologies, as well as he p ocess used o buil his so wa e is going
o be explained along his epo .
Keywo ds
VNC, And oid, C++, C, NDK, SDK, JNI, RFB.
ix
Resumen
Hoy en d´ıa hay una g an can idad de aplicaciones basadas en VNC pa a And oid. Sin
emba go, ninguna de es as aplicaciones son F ee So wa e y se implemen an u ilizando el
NDK. El obje i o de es e p oyec o es u iliza el po encial NDK pa a hace una aplicaci´on
basada en VNC y a a de ob ene un mejo endimien o que el es o de las aplicaciones
implemen adas u ilizando s´olo el SDK y odo el c´odigo uen e se ´a F ee So wa e.
El p o ocolo pa a comunica se con un se ido VNC se llama RFB. Pa a la implemen-
aci´on de es e p o ocolo en es e p oyec o se ha u ilizado la lib e ´ıa libVNCSe e . Es a
lib e ´ıa acili a el con ol de RFB. Sin libVNCSe e hab ´ıa sido m´as di ´ıcil hace nues a
p opia lib e ´ıa pa a ges iona el p o ocolo. JNI se u iliza como amewo k pa a comunica
el c´odigo na i o con Ja a. Las ecnolog´ıas, as´ı como el p oceso u ilizado pa a cons ui
es e so wa e se explica ´a a lo la go de es a memo ia.
Palab as cla e
VNC, And oid, C++, C, NDK, SDK, JNI, RFB.
2

Cap´ı ulo 1
In oducci´on
El desa ollo de las edes de elecomunicaciones ha pe mi ido que p og esi amen e el
con ol emo o de un o denado pase de me as e minales de ex o a los esc i o ios emo os
de hoy en d´ıa. La ecnolog´ıa de esc i o io emo o pe mi e la cen alizaci´on de aplicacio-
nes que no malmen e se ejecu a ´ıan en el en o no de usua io. G acias a es a ecnolog´ıa el
en o no de usua io (clien e) se con ie e en una simple e minal de en ada/salida. Todos
los e en os de pulsaci´on de eclas y mo imien os del a ´on se ansmi en desde el clien e
a un se ido donde la aplicaci´on los p ocesa como si se a asen de e en os locales. La
imagen de la pan alla se de uel e al clien e y de es a mane a se puede con ola desde el
e minal clien e la m´aquina donde se encuen a la aplicaci´on se ido .
Es e p oyec o se cen a ´unicamen e en la ealizaci´on de una aplicaci´on clien e pa a
And oid. De al mane a que la aplicaci´on se ido no es ´a desa ollada en es e p oyec o.
Aunque m´as adelan e se p o undiza ´a en cuales son los obje i os conc e os de es e p o-
yec o, con iene acla a que el obje i o e a desa olla un clien e VNC pa a And oid, que
u iliza ´a el NDK y que ue a de so wa e lib e, ya que en la ac ualidad no exis e ninguno
que cumpla es os dos equisi os.
Exis en di e en es p o ocolos de comunicaci´on en e la aplicaci´on clien e y la aplicaci´on
se ido . Es e p oyec o se ha desa ollado u ilizando el p o ocolo de comunicaci´on Remo e
F ame Bu e (RFB), u ilizado po odos los clien es y se ido es VNC. De es a mane a la
aplicaci´on se ´a compa ible con cualquie se ido VNC ins alado en cualquie e minal.
An es de p o undiza m´as en c´omo se han a on ado los obje i os del p oyec o con-
iene es ablece cie os conocimien os b´asicos ela i os al dominio de es as aplicaciones.
Comenza emos explicando algunos concep os que se han u ilizado an es, ales como VNC,
RFB, And oid, e c.
1.1. Concep os
1.1.1. Esc i o io emo o
Un esc i o io emo o es una ecnolog´ıa que pe mi e a un usua io con ola desde un
e minal g ´a ico (clien e) o o e minal g ´a ico (se ido ). X-Window ue el p ime esc i o-
io emo o desa ollado po el Massachuse s Ins i u e o Technology (MIT) en la d´ecada
de los ochen a [1].
3
4Cap´
ı ulo 1. In oducci´
on
1.1.2. VNC
VNC son las siglas en ingl´es de Vi ual Ne wo k Compu ing [2]. Es un sis ema de
esc i o io emo o que u iliza el p o ocolo Remo e F ame Bu e (RFB) pa a con ola
emo amen e o a m´aquina. Es ´a basado en una a qui ec u a clien e-se ido , donde la
m´aquina con la aplicaci´on clien e es la que con ola a la m´aquina con la aplicaci´on se -
ido . VNC ansmi e los e en os de a ´on y eclado desde el clien e al se ido y ´es e
de uel e las ac ualizaciones de pan alla en la o a di ecci´on a a ´es de una ed de comu-
nicaciones.
VNC es independien e del sis ema ope a i o, es deci , un clien e VNC ejecu ado en
una m´aquina Windows pod ´ıa con ola un se ido ejecu ado en una m´aquina Linux.
En de ini i a, se pod ´ıa con ola cualquie sis ema ope a i o desde cualquie sis ema
ope a i o siemp e que ambos sean compa ibles con VNC.
1.1.3. RFB
RFB son las siglas en ingl´es de Remo e F ame Bu e . Es un p o ocolo de comunicaci´on
pa a el acceso emo o a in e aces g ´a icas de usua io. Como abaja a ni el de amebu e
es aplicable a odos los sis emas de en anas (X11, Windows, Macin osh). RFB es el
p o ocolo usado en VNC [3].
1.1.4. And oid
And oid es un sis ema ope a i o basado en Linux, dise˜nado p incipalmen e pa a Sma p-
hones y Table s. Inicialmen e ue desa ollado po And oid Inc, pe o inalmen e Google lo
comp ´o en 2005. Fue p esen ado en 2007 jun o con la undaci´on Open Handse Alliance y
el p ime m´o il con sis ema ope a i o And oid sali´o al me cado en 2008.
La mayo ´ıa del c´odigo de And oid es ´a libe ado bajo una licencia Apache, licencia
lib e y de c´odigo abie o. No obs an e no es ´a libe ado comple amen e, po lo an o no
se puede deci que And oid sea un sis ema ope a i o lib e. Uno de sus pun os ue es
es la acilidad pa a desa olla aplicaciones g acias a las he amien as que p opo ciona
Google. Es as aplicaciones no malmen e es ´an esc i as en Ja a y se desa ollan u ilizando
el And oid SDK, pe o ambi´en se pueden cons ui aplicaciones esc i as en C/C++ usando
el And oid NDK [4].
1.1.5. And oid SDK
SDK son las siglas en ingl´es de So wa e De elopmen Ki . El SDK p opo cina las APIs
y he amien as de desa ollo necesa ias pa a cons ui , es ea y depu a aplicaciones pa a
And oid [5].
1.1.6. And oid NDK
NDK son las siglas en ingl´es de Na i e De elopmen Ki . El NDK es un conjun o de
he amien as que pe mi en desa olla pa e de la aplicaci´on pa a And oid con lenguajes
de c´odigo na i o como C o C++ [6].
1.1. Concep os 5
1.1.7. JNI
JNI son las siglas en ingl´es de Ja a Na i e In e ace. Es un amewo k de p og amaci´on
que pe mi e a c´odigo Ja a llama y se llamado desde apliaciones na i as y lib e ias esc i as
en o o lenguajes como pueden se C, C++ o ensamblado [7]. JNI p opo ciona odo lo
necesa io pa a que la comunicaci´on en e el SDK y el NDK sea posible. G acias a ´el es
posible cons ui aplicaciones en And oid u ilizando c´odigo na i o.
1.1.8. Tigh encoding
Tigh es un ipo de codi icaci´on m´as compac ada, es muy e icien e y es ´a op imizado
pa a conexiones con poco ancho de banda. Tigh incluye an o la e iciencia de comp esi´on
sin p´e didas, como opcionales o mas de comp esi´on con pe didas pa a JPEG [8].
1.1.9. ZRLE encoding
ZRLE, es un ipo de codi icaci´on compac a y e icien e. Es ´a op imizado pa a conexiones
con poco ancho de banda y u iliza la lib e ´ıa ZLib pa a comp imi los da os.
1.1.10. Gi
Es un so wa e de con ol de e siones dise˜nado po Linux o als[9][10]. Se cen a en
la elocidad y la e iciencia. Inicialmen e ue cons uido pa a el desa ollo del Ke nel de
Linux pe o desde en onces cada ez m´as p oyec os lo han ido adop ando.
1.1.11. Wi eSha k
Wi eSha k es un so wa e analizado de p o ocolo de ed (sni e ) licenciado bajo
GPL 2 [11]. Es uno de los sni e m´as impo an es y comple os, en ´el con ibuyen ex-
pe os en edes de odo el mundo.
1.1.12. F ee So wa e
F ee So wa e del ingl´es so wa e lib e. Es el so wa e que pe mi e al usua io compa i ,
es udia y modi ica [12]. Todo so wa e lib e debe ga an iza las libe ades de usa el
p og ama con cualquie p op´osi o, es udia y modi ica el p og ama, dis ibui copias del
p og ama y, po ´ul imo, la libe ad de hace p´ublicas las modi icaciones que se hayan
ealizado.
1.1.13. GPL
GPL son las siglas en ingl´es de Gene al Public License [13]. Es una licencia de c´odigo
lib e edac ada po la F ee So wa e Funda ion. El c´odigo bajo es a licencia es c´odigo lib e
ya que es a licencia ga an iza las cua o libe ades de ´es e, que son: usa el p og ama con
cualquie p op´osi o, es udia y modi ica el p og ama, dis ibui copias del p og ama y
po ´ul imo la libe ad de hace p´ublicas las modi icaciones que se hayan ealizado.
6Cap´
ı ulo 1. In oducci´
on
1.2. Mo i aciones
La mo i aci´on p incipal pa a la ealizaci´on de es e p oyec o e a el desa ollo de algo
nue o. As´ı, jun o con nues o in e ´es po el desa ollo de aplicaciones And oid usando
c´odigo na i o, nos dimos cuen a de que no exis ´ıa ninguna aplicaci´on de esc i o io emo o
que usase es a ecnolog´ıa. La ealizaci´on de es e p oyec o supon´ıa un desa ´ıo de ca a a la
in e conexi´on en e el c´odigo en C++ y Ja a ya que pa a ello ue necesa io ap ende a
hace compilaciones c uzadas, a pa e de ambi´en ap ende a u iliza JNI.
1.3. Obje i os
Los obje i os de es e p oyec o son p incipalmen e dos, el desa ollo de una aplicaci´on
de esc i o io emo o pa a And oid usando el NDK y que dicha aplicaci´on en su o alidad
sea so wa e lib e.
El obje i o de ealiza la aplicaci´on no e a s´olo el hecho de cons ui una aplicaci´on
que uncionase co ec amen e. La aplicaci´on en´ıa que se usable y e icien e. Es o ´ul imo
lo hemos log ado, ya que g acias al uso de c´odigo na i o se ha conseguido que la aplica-
ci´on, no s´olo sea e icien e si no que iene ni eles de e iciencia compa ables con los de la
aplicaci´on o icial de los c eado es del p o ocolo. En cuan o a la usabilidad, la aplicaci´on
p opo ciona muchas opciones como, po ejemplo, es ablece conexiones ci adas y en ia
combinaciones de eclas.
En cuan o al so wa e lib e, odo el c´odigo ha sido licenciado bajo una licencia GPL
e si´on 3, po lo an o el so wa e de la aplicaci´on ga an iza las cua o libe ades que odo
so wa e debe ene pa a se conside ado como al.
Conside amos impo an e y po eso es ´a en es a secci´on de obje i os, el ca ´ac e lib e
del so wa e, ya que el so wa e lib e supone un a ance muy impo an e con espec o al
mundo del so wa e p i a i o, c eando una comunidad de usua ios y p og amado es que
in e ac ´uan en e s´ı mejo ando el desa ollo del so wa e.
Cap´ı ulo 2
Es ado del a e
Como e e encias ac uales pa a ealiza es e p oyec o, y ob ene ideas de aplicaciones
en ocadas en el mismo campo, se han u ilizado los siguien es clien es pa a And oid:
2.1. VNC Viewe (RealVNC)
VNC Viewe (RealVNC)[14] pe enecien e a la compa˜n´ıa RealVNC. Inicialmen e VNC
su gi´o en el Oli e i & O acle Resea ch Lab (ORL3), siendo desa ollado po T is an
Richa dson (in en o ), Andy Ha e (di ec o del p oyec o), Quen in S an o d-F ase y
James Wea he all. Unos a˜nos despu´es, a ios de es os desa ollado es c ea ´ıan RealVNC
con la idea de segui con es e p oyec o so wa e. Al no se una aplicaci´on de c´odigo abie o,
es di ´ıcil sabe el ipo de implemen aci´on que lle a a cabo.
Posee una in e az g ´a ica muy usable y un endimien o ´op imo. Pa a el con ol del
o denado u iliza la pan alla a modo de ouchpad, es o es, el mo imien os en la pan alla
son los mo imien os que ha ´a el a ´on. Es o p opo ciona un manejo len o pe o ex ema-
damen e p eciso.
Po o o lado RealVNC no almacena las cons ase˜nas sino que p egun a al usua io po
ella cuando conec a a un se ido que la equie a.
Ha sido una de las aplicaciones de e e encia, an o po su in e az como po su ´op imo
endimien o. Como ya se ha dicho con an e io idad es de c´odigo ce ado, as´ı que ue
imposible abaja sob e ella.
7

8Cap´
ı ulo 2. Es ado del a e
2.2. And oid- nc- iewe (And oidVNC)
And oid- nc- iewe (And oidVNC)[16] es un p og ama lib e y de c´odigo abie o de
con ol emo o pa a disposi i os And oid. Es un p oyec o desa ollado a pa i de una
ama inicial de o a aplicaci´on llamada igh VNC. Es a bajo licencia GPL 2 y iene un
eposi o io ac i o en google h p://code.google.com/p/and oid- nc- iewe /.
Posee una in e az g ´a ica pob e y una ges i´on de conexiones poco cla a. Pa a el con-
ol emo o del o denado o ece una amplio abanico de posibilidades cub iendo cualquie
posibilidad al espec o.
En el apa ado de la segu idad And oidVNC almcena las con ase˜nas en la Base de
Da os sin ci a siendo ulne able a a aques,
Al se una aplicaci´on de so wa e lib e hemos podio e y ap ende mucho de su c´odigo
y ha sido una de las aplicaciones de e e encia ya que o ece un endimien o muy bueno.
Nos ue imposible abaja sob e ´el ya que es ´a cons uida o almen e sob e SDK y nues o
obje i o es u iliza la po encia del NDK.
2.3. Mul iVNC
Mul iVNC[15] es un p oyec o de so wa e lib e bajo licencia GPL 2, basado en and oid-
nc- iewe y desa ollado po Ch is ian Beie . Incluye sopo e pa a a ias codi icaciones,
as´ı como el uso de Ze ocon (Ze o Con igu a ion Ne wo king) pa a ayuda a c ea de o ma
au om´a ica una ed IP sin necesidad de con igu aciones o se ido es especiales.
Al igual que And oidVNC posee una in e az pob e y, aunque mejo , una ges i´on de
conexiones no demasiado cla o. Pa a la ep esen aci´on u iliza acele aci´on po ha dwa e
median e GPU. Respec o al con ol u iliza un sis ema simila a RealVNC.
En el aspec o de las con ase˜na p esen a un uncionamien o semejan e a And oidVNC.
Es a aplicaci´on ha enido una ele ancia meno en el p oyec o ya que no nos con enc´ıa
su endimien o en m´o iles de baja gama, se ha usado pa a obse a como esol ´ıan cie os
aspec os y como compa a i a de endimien o.
Cap´ı ulo 3
En o no de desa ollo y banco de
p uebas
3.1. En o no de desa ollo
Todo el p oyec o ha sido desa ollado bajo el Sis ema ope a i o Linux Min Debian
Edi ion 64 bi s, bajo las opciones de esc i o io an o Ma e como X ce.
La p incipal he amien a de desa ollo u ilizada ha sido Eclipse Juno, con los en o -
nos de desa ollo in eg ados an o pa a C/C++ como pa a Ja a, ya que el p oyec o ha
necesi ado de es os lenguajes.
JDK: e si´on 1.6 64 bi s.
SDK: e si´on and oid-sdk- 21.1-linux.
NDK: e si´on ac ual and oid-ndk- 8d, aunque a lo la go del p oyec o ue necesa io
ac ualiza a es a e si´on m´as ecien e.
And oid: e si´on m´ınima de desa ollo And oid 4.0 (API 14). Aunque en un inicio se
op ´o po desa olla pa a And oid 2.3.3 (API 10) po ene mayo cuo a de me cado,
nos dimos cuen a al i desa ollando que la 4.0 nos da ´ıa mayo es bene icios u u os.
Gi : sis ema de con ol de e siones pa a el abajo en equipo.
Egi : plugin de Eclipse usado pa a in e ac ua con el eposi o io p´ublico del p oyec o
en e los dis in os in eg an es.
Doxygen: plugin que gene a la documen aci´on del c´odigo inal, ya que conside amos
m´as comple o que el ja adoc de se ie.
ADT: And oid De elope s Tools e si´on 22.0.1, plugin de Eclipse pa a el desa ollo
de aplicaciones And oid.
LaTeX: he amien a usada pa a la composici´on del ex o de la memo ia.
G acias es as he amien as hemos podido abaja sob e un en o no uni icado, ya que
eclipse daba odas las posibilidades sin sali de ´el. Po un lado pe mi ´ıa esc ibi el c´odigo
en Ja a y C/C++ desde la misma he amien a, as´ı mismo, pe mi ´ıa el desa ollo sob e
And oid g acias al plugin ADT y la ges i´on del c´odigo median e Gi de una o ma sencilla
g acias a Egi .
9
10 Cap´
ı ulo 3. En o no de desa ollo y banco de p uebas
3.2. Banco de p uebas
Las p uebas de depu aci´on de la aplicaci´on se han ealizado en dos e minales m´o iles
con dis in as esoluciones y especi icaciones gene ales pa a obse a el impac o an o en
e minales de gama media/baja, como e minales de al a gama.
Samsung Galaxy S3 con And oid 4.2.2 Jelly Bean.
Samsung Galaxy Mini 2 con And oid 4.1.2 Jelly Bean.
Como se ido es VNC se han usado:
x11 nc, con codi icaci´on SSL y sin ella.
RealVNC, con cla e y sin ella.
Cap´ı ulo 4
Tecnolog´ıas allidas
En es e apa ado se desc ibi ´an algunas de las ecnolog´ıas que se pensa on usa en un
p incipio y que po un mo i o u o o al inal se desecha on.
4.1. Simple Di ec Media Laye
Simple Di ec Media Laye [17][18], o m´as com´unmen e conocida po sus siglas SDL, es
una lib e ´ıa desa ollada en C y licenciada y dis ibuida bajo licencia LGPL, p opo ciona
una se ie de unciones pa a la ges i´on de dibujos e im´agenes en dos dimensiones. Esc i a
o iginalmen e po Sam La inga.
Du an e el p oceso de desa ollo del p oyec o, una de las ecnolog´ıas po las que se
op a on ue SDL, dada las acilidades y po encia que o ec´ıa pa a el a amien o y ende-
izado de la imagen. Sin emba go, du an e la inclusi´on del mismo en el p oyec o su gie on
dos p oblemas que nos decidie on a abandona lo.
El p ime mo i o ue que la ´unica e si´on con inuada y con sopo e pa a And oid e a
SDL 2.0, la cual se encon aba en ase de desa ollo y las unciones p incipales pod´ıan
cambia en mi ad del desa ollo. Exis ´ıa una e si´on no o icial y descon inuada de la mis-
ma, que e a SDL 1.2, pe o en e los e o es conocidos es aban el uso del modo ´ıdeo, que
e a esencial en el p oyec o, y dado que es aba descon inuado, nunca se hubie a a eglado.
Po o o lado, el endimien o ob enido, una ez acoplado al p oyec o, ue muy pob e,
llegando al caso de que el se ido expulsaba la conexi´on. Adem´as dado el uncionamien o
de SDL, se dibujaba s´olo la pa e que se e´ıa de la pan alla, la usabilidad al mo e se po
la misma, eniendo que edibuja con inuamen e la imagen, hizo in iable su uso.
11
18 Cap´
ı ulo 5. Tecnolog´
ıas usadas
Reco ido del ec o : Aunque la ep esen aci´on de la in o maci´on es un ec o
lineal, en ealidad el eco ido del mismo se ealiza como si de un ec o bidimensio-
nal se a ase. De al o ma que pa a pasa de una ila a o a se ha ´ıa:
Anchu a*bpp
En cualquie caso, nos encon a ´ıamos con un eco ido del o den O(n2) (cos e
cuad ´a ico).
Pa a ecoge la in o maci´on de la imagen, se eco e el ec ´angulo que ha su ido
cambios y se copia di ec amen e en el ec o inal. Pa a hace la copia se usa la unci´on
de C memcpy, dada su e iciencia copiando bloques de by es.
5.2.3. Can as pa a la ep esen aci´on
Pa a la ep esen aci´on de la imagen se ha usado Can as pa a And oid, usando sus
unciones de dibujado de Bi map. Los dos m´e odos de Can as usados pa a dibuja el
bi map son:
d awBi map ( i n [ ] c olo s , i n o s e , i n s i de ,
in x , in y , in wid h , in heigh ,
boolean hasAlpha , Pain pain )
Median e es e m´e odo es posible dibuja un bi map a pa i de su in o maci´on de
p´ıxeles, almacenada en colo s, se usa pa a ep esen a los da os de la imagen seg´un se
modi ican.
d awBi map ( Bi map bi map , Rec s c , Rec F ds , Pain pain )
Median e ´es e dibujamos un bi map, pas´andole el bi map ya c eado como pa ´ame o.
Cada uno de los m´e odos an e io es es usado en dos si uaciones y con ex o dis in os, es
necesa io usa ambos, como e emos m´as adelan e, pa a una ´op ima ep esen aci´on. Los
dos con ex os dis in os a los que hace en e la aplicaci´on son:
Es ado no mal: sucede siemp e que hay una ac ualizaci´on en la imagen y siemp e
y cuando el usua io no se es ´e desplazando po la pan alla o haciendo zoom. En es e
caso la imagen se ep esen a ´a median e su ec o de p´ıxeles.
El usua io se mue e po la imagen o hace zoom: cuando el usua io se desplaza
a a ´es de la imagen o hace zoom, es necesa io c ea un bi map con la in o maci´on
ac ual de la imagen, ya que en caso con a io, ob end ´ıamos un p´esimo endimien o
po dos mo i os:
•Si us´asemos la ep esen aci´on a pa i de su in o maci´on de p´ıxeles, en cada
p og esi´on po la imagen ha ´ıa al a edibuja la imagen, consiguiendo un mo-
imien o o zoom len o.
•Como es a ´ıamos con inuamen e edibujando la imagen, y adem´as, en cada
ep esen aci´on And oid c ea ´ıa un bi map empo al, p o oca ´ıamos un al o
consumo de CPU.

5.2. Aplicaci´
on 19
De al o ma, al c ea un bi map, el mo imien o po la imagen es luido. El ´unico
pun o a conside a es la op imizaci´on de cuando c ea y des ui es e bi map, ya que
la c eaci´on de bi maps es un p oceso pesado y que equie e de muchos ecu sos.
As´ı pues los pun os en los que se des uye o se ma ca pa a des ui el bi map son:
•Cuando el usua io haga click sob e la imagen, en es e pun o se conside a que el
usua io in en a in e ac ua con el se ido , po lo an o, es necesa io des ui
el bi map y man ene ac ualizada la imagen en odo momen o.
•En el caso de que el usua io deje de mo e se po la pan alla, al menos, du an e
medio segundo o deje de hace zoom. En es e caso es con enien e des ui la
imagen en pos de consegui una imagen ac ualizada del se ido . El mo i o po
el cual se espe a medio segundo, es con el in de no in e umpi el mo imien o
del usua io, es deci , si se des uyese el bi map en el momen o que le an a el
dedo de la pan alla, al ol e a mo e se se p oduci ´ıa una len i ud has a que
se ol iese a c ea el nue o bi map. Adem´as as´ı, op imizamos la c eaci´on de
bi map y educimos el uso de CPU.
El p oblema que encon amos en e a o as soluciones, a la ho a de ac ualiza la
imagen, es el hecho de que la pa e na i a (C++) ac ualiza los da os de la imagen di ec-
amen e en el ec o , si po el con a io, odo se hubiese desa ollado en Ja a, se pod ´ıa
habe ac ualizado la in o maci´on sob e un bi map ya c eado, de al o ma que se aho-
a ´ıa el consumo de CPU de i ado de la c eaci´on, aunque se pe de ´ıa endimien o en la
ac ualizaci´on.
20 Cap´
ı ulo 5. Tecnolog´
ıas usadas
Cap´ı ulo 6
Especi icaciones
En es e cap´ı ulo se desc ibe la cons ucci´on de la aplicaci´on. P ime o se expond ´an
las especi icaciones de equisi os an o ex e nos, como uncionales. Despu´es en el siguien e
apa ado se explica ´an los diag amas UML del c´odigo, jun o con explicaciones de odo el
lujo del p og ama.
6.1. Especi icaci´on de equisi os
Los equisi os de la aplicaci´on son:
6.1.1. In e aces ex e nos
En es a secci´on se indican los equisi os ex e nos a la aplicaci´on.
In e aces de usua io:
La in e az de uso p opo ciona odo lo necesa io pa a con ola la aplicaci´on en su
o alidad.
In e aces de ha dwa e:
Se debe dispone de un disposi i o m´o il y un o denado .
In e aces de so wa e:
La e si´on de And oid del disposi i o m´o il debe se la 4.0 o supe io .
En la m´aquina emo a se debe dispone de una aplicaci´on VNC de ipo se ido .
In e aces de comunicaci´on:
Tan o el clien e como el se ido deben dispone de una conexi´on a In e ne o es a
ambos en la misma ed local.
21
22 Cap´
ı ulo 6. Especi icaciones
6.1.2. Funciones
Los siguien es equisi os uncionales de inen las acciones que deben ene luga en el
so wa e p ocesando las en adas y gene ando las salidas.
C ea conexi´on:
P io idad: Al a.
Es abilidad: Al a.
Desc ipci´on: C ea una nue a conexi´on y la a˜nade a la lis a de conexiones.
En ada: Nomb e de la conexi´on, IP, pue o, con ase˜na y calidad de imagen.
Salida: La conexi´on se a˜nade a la lis a y se conec a.
O igen: Usua io.
Des ino: Aplicaci´on.
Necesi a: Acceso a la Base de Da os.
Acci´on: C ea una nue a conexi´on.
P econdici´on: Nomb e de conexi´on no epe ida, IP ´alida y pue o en un ango
´alido.
Pos condici´on: La conexi´on se a˜nade a la lis a de conexiones.
E ec os la e ales: N/A.
Edi a conexi´on:
P io idad: Media.
Es abilidad: Al a.
Desc ipci´on: Se edi an los da os de una de e minada conexi´on.
En ada: Nomb e de la conexi´on, IP, pue o, con ase˜na y calidad de imagen.
Salida: La conexi´on con los da os modi icados.
O igen: Usua io.
Des ino: Aplicaci´on.
Necesi a: Acceso a la Base de Da os.
Acci´on: Edi a los da os de una conexi´on.
P econdici´on: IP ´alida y pue o en un ango ´alido.
Pos condici´on: Los da os de la conexi´on se modi ican.
E ec os la e ales: N/A.
6.1. Especi icaci´
on de equisi os 23
Bo a conexi´on:
P io idad: Media.
Es abilidad: Al a.
Desc ipci´on: Se elimina una conexi´on.
En ada: E en o usua io.
Salida: La conexi´on se elimina de la aplicaci´on.
O igen: Usua io.
Des ino: Aplicaci´on.
Necesi a: Acceso a la Base de Da os.
Acci´on: Elimina una conexi´on.
P econdici´on: N/A.
Pos condici´on: La conexi´on se bo a de la aplicaci´on.
E ec os la e ales: Si la conexi´on es ´a en a o i os se bo a ´a ambi´en ah´ı.
Ve in o maci´on de la conexi´on:
P io idad: Baja.
Es abilidad: Al a.
Desc ipci´on: Mues a la in o maci´on de una conexi´on.
En ada: E en o usua io.
Salida: Los da os de la conexi´on.
O igen: Usua io.
Des ino: Usua io.
Necesi a: Acceso a la Base de Da os.
Acci´on: Mues a los da os de una conexi´on.
P econdici´on: N/A
Pos condici´on: Se mues an los da os de una conexi´on.
E ec os la e ales: N/A.

24 Cap´
ı ulo 6. Especi icaciones
A˜nadi conexi´on a a o i os:
P io idad: Baja.
Es abilidad: Al a.
Desc ipci´on: A˜nade una conexi´on a la lis a de a o i os del usua io.
En ada: E en o usua io.
Salida: La conexi´on se a˜nade a la lis a de a o i os.
O igen: Usua io.
Des ino: Aplicaci´on.
Necesi a: Acceso a la base de da os.
Acci´on: A˜nade la conexi´on a la lis a de a o i os.
P econdici´on: N/A.
Pos condici´on: La conexi´on se a˜nade a a o i os.
E ec os la e ales: N/A.
Bo a conexi´on de a o i os:
P io idad: Baja.
Es abilidad: Al a.
Desc ipci´on: Bo a una conexi´on de la lis a de a o i os.
En ada: E en o usua io.
Salida: La conexi´on se elimina de a o i os.
O igen: Usua io.
Des ino: Aplicaci´on.
Necesi a: Acceso a la base de da os.
Acci´on: Elimina una conexi´on de la lis a de a o i os.
P econdici´on: N/A.
Pos condici´on: La conexi´on se bo a de a o i os.
E ec os la e ales: N/A.
6.1. Especi icaci´
on de equisi os 25
Ve lis a de conexiones:
P io idad: Al a.
Es abilidad: Al a.
Desc ipci´on: Se mues an odas las conexiones ecien es.
En ada: E en o usua io.
Salida: La lis a de conexiones ecien es.
O igen: Usua io.
Des ino: Usua io.
Necesi a: Acceso a la base de da os.
Acci´on: Se mues an las conexiones ecien es.
P econdici´on: N/A
Pos condici´on: Se mues a la lis a de conexiones ecien es.
E ec os la e ales: N/A.
Ve lis a de conexiones a o i as:
P io idad: Baja.
Es abilidad: Al a.
Desc ipci´on: Se mues an odas las conexiones a o i as.
En ada: E en o usua io.
Salida: La lis a de conexiones a o i as.
O igen: Usua io.
Des ino: Usua io.
Necesi a: Acceso a la base de da os.
Acci´on: Se mues an las conexiones a o i as.
P econdici´on: N/A
Pos condici´on: Se mues a la lis a de conexiones a o i as.
E ec os la e ales: N/A.
26 Cap´
ı ulo 6. Especi icaciones
Ab i men´u p incipal:
P io idad: Baja.
Es abilidad: Al a.
Desc ipci´on: Se ab e el men´u p incipal.
En ada: E en o usua io.
Salida: Se mues a el men´u.
O igen: Usua io.
Des ino: Usua io.
Necesi a: N/A.
Acci´on: Se mues a el men´u p incipal.
P econdici´on: N/A
Pos condici´on: Se mues a el men´u p incipal.
E ec os la e ales: N/A
Conec a se:
P io idad: Al a.
Es abilidad: Al a.
Desc ipci´on: Se conec a al se ido especi icado en los da os de la conexi´on.
En ada: Da os de la conexi´on y e en o usua io.
Salida: Conexi´on con el se ido .
O igen: Usua io.
Des ino: Usua io.
Necesi a: N/A.
Acci´on: Se conec a con el se ido emo o.
P econdici´on: El se ido iene que ene ejecu ´andose una aplicaci´on VNC.
Pos condici´on: El clien e se conec a con el se ido .
E ec os la e ales: N/A.
6.1. Especi icaci´
on de equisi os 27
Desconec a se:
P io idad: Al a.
Es abilidad: Al a.
Desc ipci´on: Se desconec a del se ido al que se es aba conec ado.
En ada: E en o usua io o desconexi´on del se ido
Salida: Desconexi´on con el se ido .
O igen: Usua io o se ido .
Des ino: Usua io.
Necesi a: Es a conec ado.
Acci´on: Se desconec a del se ido emo o.
P econdici´on: Se debe es a conec ado pa a pode desconec a se.
Pos condici´on: El clien e se desconec a del se ido .
E ec os la e ales: N/A.
Hace click:
P io idad: Al a.
Es abilidad: Al a.
Desc ipci´on: Se en ´ıa la o den de pulsa el bo ´on izquie do del a ´on.
En ada: E en o usua io.
Salida: N/A.
O igen: Usua io.
Des ino: Aplicaci´on.
Necesi a: Es a conec ado.
Acci´on: Se en ´ıa la o den de hace click.
P econdici´on: Se debe es a conec ado.
Pos condici´on: Se en ´ıa la o den de hace click.
E ec os la e ales: N/A.
34 Cap´
ı ulo 6. Especi icaciones
es. a u eam. ncpp.con olle .Lis F agmen Tab
+ Lis F agmen Tab()
+ onC ea eView(infla e : Layou Infla e , con aine : ViewG oup, sa edIns anceS a e : Bundle) : View
+ onS a ()
+ onLis I emClick(lis View : Lis View, iew : View, posi ion : in , id : long)
+ dele eUse ()
+ edi ingUse ()
+ e eshFa o i es(use : es. a u eam. ncpp.model.sql.Connec ion)
+ ge O() : Objec
+ se O(o : Objec )
+ ge Use Lis () : A ayLis <Connec ion>
+ se Use Lis (use Lis : A ayLis <Connec ion>)
es. a u eam. ncpp.con olle .Lis F agmen TabFa
+ Lis F agmen TabFa ()
+ onC ea eView(infla e : Layou Infla e , con aine : ViewG oup, sa edIns anceS a e : Bundle) : View
+ onS a ()
+ onLis I emClick(lis View : Lis View, iew : View, posi ion : in , id : long)
+ dele eUse ()
+ edi ingUse ()
+ ge O() : Objec
+ se O(o : Objec )
+ ge Use Lis () : A ayLis <Connec ion>
+ se Use Lis (use Lis : A ayLis <Connec ion>)
es. a u eam. ncpp. iew.Adap e
+ Adap e (ac : Ac i i y, u : A ayLis <Connec ion>)
+ ge Coun () : in
+ ge I em(posi ion : in ) : Objec
+ ge I emId(posi ion : in ) : long
+ ge View(posi ion : in , con e View : View, pa en : ViewG oup) : View
+ dele eRow( ow : es. a u eam. ncpp.model.sql.Connec ion)
+ ge Lis () : A ayLis <Connec ion>
+ se Lis (lis : A ayLis <Connec ion>)
es. a u eam. ncpp. iew.DialogOp ions
+ newIns ance(lis ene : Supe Lis ene ) : DialogOp ions
+ onC ea eDialog(sa edIns anceS a e : Bundle) : Dialog
-adap e
-adap e
Diag am: lis asUML Page 1
Figu a 6.3: Diag ama Lis as de Conexiones
Las clases Lis F agmen Tab y Lis F agmen TabFa (Ve Figu a 6.3) son las enca ga-
das de mos a las lis as de conexiones y conexiones a o i as espec i amen e.
La clase SlideLis F agmen (Ve Figu a 6.4) se enca ga de cons ui el men´u la e al y
es llamada desde Can asAc i i y.
Can asAc i i y (Ve Figu a 6.4) es la enca gada de cap u a odos los e en os que se
p oduzcan en el clien e, mos a la imagen del esc i o io y comunica se con la pa e na i a.
Pa a dibuja la imagen se apoya en la clase Can asView (Ve Figu a 6.4). Pa a Comuni-
ca se con la pa e na i a se apoya en VncB idgeJNI (Ve imagen 6.5). La comunicaci´on
en e el VncB idgeJNI y el Can as Ac i i y se ealiza median e el pa ´on obse e (Ve
igu a 6.4 y 6.5).

6.2. Diag amas de clases 35
es. a u eam. ncpp.model.Obse ableCan as
+ Obse ableCan as()
+ addObse e (obse e : Obse e Can as)
+ no i yIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in )
+ no i yRed aw(x : in , y : in , wid h : in , heigh : in )
+ no i yFinish()
es. a u eam. ncpp. iew.Can asView
+ Can asView(con ex : Con ex , a s : A ibu eSe )
+ ge RealHeigh () : in
+ ge RealWid h() : in
+ ge Scale() : floa
+ se Scale(scale : floa , scaleX : floa , scaleY : floa )
+ s a D ag()
+ endD ag()
+ eD aw()
+ ini Can as(da a : in [], offse : in , s ide : in , x : in , y : in , wid h : in , heigh : in )
es. a u eam. ncpp. iew.SlideLis F agmen
+ onC ea eView(infla e : Layou Infla e , con aine : ViewG oup, sa edIns anceS a e : Bundle) : View
+ onAc i i yC ea ed(sa edIns anceS a e : Bundle)
+ onLis I emClick(lis View : Lis View, iew : View, posi ion : in , id : long)
es. a u eam. ncpp.con olle .Can asAc i i y
+ onConfigu a ionChanged(newConfig : Configu a ion)
+ onMenuI emSelec ed( ea u eId : in , i em : MenuI em) : boolean
+ onKeyDown(keyCode : in , e : KeyE en ) : boolean
+ dispa chKeyE en (e en : KeyE en ) : boolean
+ onKeyUp(keyCode : in , e : KeyE en ) : boolean
+ onTouchE en (e en : Mo ionE en ) : boolean
+ onUpMouse(e : Mo ionE en ) : boolean
+ upda eRed aw(x : in , y : in , wid h : in , heigh : in )
+ upda eIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in )
+ upda eFinish()
+ showKeyboa d()
+ sendTex Dialog() : Dialog
+ passwo dNeededDialog() : Dialog
+ c ea eSe e No FoundDialog() : Dialog
+ exi Dialog() : Dialog
+ se e In e up ConexionDialog() : Dialog
+ imeExceededDialog() : Dialog
+ comboE en sDialog() : Dialog
+ unc ionKeysDialog() : Dialog
+ openHelpDialog() : Dialog
+ cen e ImageCan as()
«in e ace»
es. a u eam. ncpp.model.Obse e Can as
+ upda eIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in )
+ upda eRed aw(x : in , y : in , wid h : in , heigh : in )
+ upda eFinish()
-obse e -can as
Diag am: Can as Page 1
Figu a 6.4: Diag ama Can as
La ep esen aci´on de la imagen se ha ealizado con can as, en la clase Can asView
(Ve Figu a 6.4). Pa a da mejo sensaci´on de luidez a la ho a de mo e se po la imagen
se u iliza un Bi map auxilia en luga de siemp e el mismo. Cuando el p og ama en a
en modo d ag, se c ea el Bi map auxilia y se inicializa con el alo ac ual de la imagen.
Si el usua io es ´a mo iendose po la imagen (modo d ag) el m´e odo onD aw de can as
mos a ´a el Bi map auxilia .
i ( ! d ag ){
can as . d awBi map ( da a , o s e , s i de , x , y , wid h , heigh , a l s e , n u ll ) ;
}
e l s e {
can as . d awBi map ( bi map , bi mapRec , bi mapRec , null ) ;
}
36 Cap´
ı ulo 6. Especi icaciones
En el momen o que el usua io deja de mo e se sal a un ime c eado en un hilo apa e,
de al mane a que du an e 0.5 segundos la imagen no se des uye (Ve secci´on 5.2.3).
La ac ualizaci´on de la imagen nos llega desde el c´odigo na i o (Ve secci´on 6.2.2).
Cuando llega una no i icaci´on desde C++ de que la imagen ha sido modi icada, el can as
se in alida y se edibuja.
Si Can asAc i i y de ec a un e en o de Sc oll (mo imien o po la pan alla), se llama
al m´e odo doSc oll. Es e m´e odo calcula cuan os p´ıxeles se ha mo ido en los ejes X e Y,
comp obando que no se salga de la imagen. Una ez calculados se llama al m´e odo de
can as sc ollTo pa a que modi ique la imagen.
i (mo eX != 0 | | mo eY != 0){
ealX = ealX + ( i n )mo eX ;
ealY = ealY + ( i n )mo eY
can as . sc oll To (( i n )( ealX ∗scale Fac o ) ,
( i n ) ( ealY ∗scaleFac o ) ) ;
}
Si Can asAc i i y de ec a un e en o de Scale (zoom), se ecalcula el ac o de escala
y dependiendo de si ha sido posi i o o nega i o se llama a, el m´e odo sc ollTo de can as
di ec amen e o a el m´e odo doSc oll.
i ( isDo ){
i ( a c o >1){
in mo eX = ( i n )( x∗scal eF ac o ) ;
in mo eY = ( i n )( y∗scal eF ac o ) ;
i (x <0){
mo eX = 0 ;
y = 0;
}
i (y <0){
mo eY = 0 ;
y = 0;
}
ealX = ( in )x ;
ealY = ( in )y ;
can as . sc ol l To (mo eX , mo eY ) ;
}e l s e i ( ac o <1 ){
in auxX = 0;
in auxY = 0;
i (x ∗scaleFac o >can as . ge RealWid h ( ) ) {
auxX = −100;
}e l s e {
auxX = −10;
}
i (y ∗scaleFac o >can as . ge RealHeigh ( ) ){
auxY = −100;
}e l s e {
auxY = −10;
}
6.2. Diag amas de clases 37
doS c oll (auxX , auxY ) ;
}
}
VncB idgeJNI es la clase que p opo cina los m´e odos pa a comunica se con la pa e
na i a. Es capaz de llama a unciones na i as ales como iniConnec , mouseE en , keyE-
en , e c., de es a mane a se es ablece la comunicaci´on de Ja a a C/C++ (Ve secci´on
5.2.2). Las no i icaciones llegan desde el c´odigo na i o a a ´es de la in e az Obse e JNI.
es. a u eam. ncpp.model.Obse ableCan as
+ Obse ableCan as()
+ addObse e (obse e : Obse e Can as)
+ no i yIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in )
+ no i yRed aw(x : in , y : in , wid h : in , heigh : in )
+ no i yFinish()
«in e ace»
es. a u eam. ncpp.model.Obse e Can as
+ upda eIniF ame(da a : in [], offse : in , x : in , y : in , wid h : in , heigh : in , ealWid h : in , ealHeigh : in )
+ upda eRed aw(x : in , y : in , wid h : in , heigh : in )
+ upda eFinish()
es. a u eam. ncpp.model.VncB idgeJNI
+ VncB idgeJNI()
+ s a Connec (hos : S ing, po : in , pass : S ing, quali y : S ing, wifi : boolean, hideMouse : boolean) : Connec ionE o
+ finishVnc()
+ upda eFinishConnec ion()
+ upda eIniF ame(wid h : in , heigh : in , bpp : in , dep h : in )
+ upda eReD aw(x : in , y : in , wid h : in , heigh : in )
+ sendMouseE en (x : in , y : in , e en : MouseE en )
+ sendKey(key : in , down : boolean)
es. a u eam. ncpp.model.Sc een
+ Sc een(wid h : in , heigh : in , bpp : in )
+ c ea eDa a()
+ ge Wid h() : in
+ se Wid h(wid h : in )
+ ge Heigh () : in
+ se Heigh (heigh : in )
+ ge Bpp() : in
+ se Bpp(bpp : in )
+ ge Da a() : in []
+ add(pos : in , alue : in )
«in e ace»
es. a u eam. ncpp.model.Obse e JNI
+ upda eFinishConnec ion()
+ upda eIniF ame(wid h : in , heigh : in , bpp : in , dep h : in )
+ upda eReD aw(x : in , y : in , wid h : in , heigh : in )
-sc een
-obse e
Diag am: model Page 1
Figu a 6.5: Diag ama Modelo
6.2.2. Pa e esc i a en C/C++
Aho a amos a desc ibi el c´odigo esc i o en C/C++. La clase Ja a VncB idgeJNI
ealiza las llamadas a la pa e na i a a a ´es de las unciones implemen adas en el iche o
Ja aB idge.cpp. Es e iche o no se mues a en el diag ama de clases pues o que no es una
clase, a´un as´ı, su ´unica unci´on es hace las llamadas p opias a la clase Vnc, en o as
palab as ac ´ua como puen e de Ja a a C++.
38 Cap´
ı ulo 6. Especi icaciones
Obse ableJNI
+ Obse ableJNI()
+ ~ Obse ableJNI()
+ addObse e (obse e : jobjec , en : JNIEn *)
+ no i yIniF ame(wid h : in , heigh : in , bpp : in , dep h : in )
+ no i yReD aw()
+ no i yFinishConnec ion()
+ finishByClien ()
+ ge Bi mapDa a()
+ ge A ayElemen s() : jin *
+ se A ayElemen s(in o : jin *)
Handle RFB
+ Handle RFB()
+ ~Handle RFB()
+ se Sc een(sc een : Clien Sc een*)
+ iniF ameBuffe (clien _sc een : bClien *)
+ upda eSc een(clien : bClien *, x : in , y : in , w : in , h : in )
+ finishConnec ion()
+ finishClien ()
+ se Pass(aux_pass : cha *)
+ ge Pass(clien : bClien *) : cha *
+ eePass()
Vnc
+ Vnc()
+ ~ Vnc()
+ iniConnec ion(hos : cha *, po : in , pass : cha *, quali y : in , comp ess : in , hide_mouse : bool) : Connec ionE o
+ closeConnec ion()
+ addObse e (obse e : jobjec , en : JNIEn *)
+ sendMouseE en (x : in , y : in , e en : MouseE en ) : bool
+ sendKeyE en (key : in , down : bool) : bool
Clien Connec ionRFB
+ Clien Connec ionRFB()
+ ~Clien Connec ionRFB()
+ iniConnec ion(hos : cha *, po : in , pass : cha *, pic u e_quali y : in , comp ess : in , hide_mouse : bool) : Connec ionE o
+ cleanRFB()
+ sendMouseE en (x : in , y : in , e en : MouseE en ) : bool
+ sendKeyE en (key : in , down : bool) : bool
+ s opConnec ion()
Clien Sc een
+ Clien Sc een()
+ ~Clien Sc een()
+ doMask(clien : bClien *)
+ iniSc een(wid h : in , heigh : in , bi sPe Pixel : in ) : in
+ upda eSc een( ameBuffe : uin 8_ *, x : in , y : in , w : in , h : in )
es. a u eam. ncpp.model.VncB idgeJNI
+ VncB idgeJNI()
+ s a Connec (hos : S ing, po : in , pass : S ing, quali y : S ing, wifi : boolean, hideMouse : boolean) : Connec ionE o
+ finishVnc()
+ upda eFinishConnec ion()
+ upda eIniF ame(wid h : in , heigh : in , bpp : in , dep h : in )
+ upda eReD aw(x : in , y : in , wid h : in , heigh : in )
+ sendMouseE en (x : in , y : in , e en : MouseE en )
+ sendKey(key : in , down : boolean)
b
1
0..1- b
sc een
1
1
sc een
11
Diag am: connec ion Page 1
Figu a 6.6: Diag ama Conexi´on
Al inicializa el c´odigo na i o se c ea la clase Vnc (Ve Figu a 6.6) y se a˜nade el ob-
se e a la clase Clien Sc een pa a que ´es e pueda ealiza las no i icaciones a Ja a. En la
cons uc o a de Vnc se c ean las clases Clien Sc een, Clien Connec ionRFB y se le pasa a
la clase Handle RFB la e e encia a Clien Sc een pa a que ´es a pueda comunica se con ella.
Vnc e asmi i ´a odas las o denes que le lleguen de Ja aB idge a Clien Connec ionRFB.
La clase Clien Connec ionRFB (Ve Figu a 6.6) es la enca gada de ges iona la cone-
xi´on en e el clien e y el se ido u ilizando el p o ocolo RFB. Pa a es ablece una conexi´on
lo p ime o que se hace es inicializa la es uc u a bClien , en es e pun o se indica cual
es el hos , el pue o, la calidad de imagen, e c. Un pun o muy impo an e de la iniciali-
zaci´on es indica cuales son las unciones que se han de llama cuando el se e mande
no i icaciones. Pa a ello nos apoyamos en la clase Handle RFB, de al mane a que, po
ejemplo, cuando llega un upda e de la imagen indicamos que iene que llama al m´e odo
upda eSc een del handle .
clien RFB= bGe Clien ( bi sPe Sample , samplesPe Pixel , by esPe Pixel ) ;
clien RFB−>se e Po = po ;
clien RFB−>se e Hos = hos ;
clien RFB−>p og amName = ”VNC++”;
6.2. Diag amas de clases 39
Handle RFB : : se Pass ( pass ) ;
clien RFB−>Ge Passwo d = Handle RFB : : ge Pass ;
clien RFB−>appDa a . q uali y Le e l = p i c u e q u a l i y ;
clien RFB−>appDa a . comp essLe el = comp ess ;
clien RFB−>appDa a . useRemo eCu so = hide mouse ;
clien RFB−>MallocF ameBu e =Handle RFB : : iniF ameBu e ;
clien RFB−>canHandleNewFBSize = TRUE;
clien RFB−>Go F ameBu e Upda e=Handle RFB : : upda eSc een ;
clien RFB−>FinishedF ameBu e Upda e= Handle RFB : : inishUpda e ;
clien RFB−>l i s e n P o = LISTEN PORT OFFSET;
clien RFB−>l i s e n 6 P o = LISTEN PORT OFFSET;
Una ez e minada la inicializaci´on de bClien se p ocede a la conexi´on con el se ido .
i ( ! b I n i C l i e n ( clien RFB ,0 ,NULL)){
e o c onn ec = NoSe e Found ;
i (DEBUG)
LOGE(”No se e ound ” ) ;
clien RFB = NULL;
}
e l s e i ( ! clien RFB−> ameBu e ){
i (DEBUG)
LOGE(”No F ame Found ” ) ;
e o c onn ec = NoF ameFound ;
cleanR b ();
}
Si odo a bien se c ea un hilo pa a maneja los e en os del p o ocolo RFB. Dicho hilo
es un bucle in ini o a la espe a de mensajes que p o engan del se ido .
while ( ! aux his −>s op connec ion ) {
mes=Wai Fo Message ( aux his −>clien RFB , imeWai ) ;
i (mes<0){
aux his−>s op connec ion = ue ;
se e Ou = ue ;
}
i (mes){
i ( ! HandleRFBSe e Message ( aux his −>clien RFB )){
aux his−>s op connec ion = ue ;
se e Ou = ue ;
}
}
}
La a iable aux his es un pun e o a Clien Connec ionRFB. Si no se ha pa ado la
conexi´on se espe a has a que llega un mensaje del se ido , la unci´on enca gada de ello
es Wai Fo Message. Despu´es la unci´on Handle RFBSe e Message es la enca gada de
comp oba cual es el mensaje que ha llegado y en unci´on de ello, llama a unas unciones
u o as de Handle RFB.
Pa a en ia los e en os del a ´on o de pulsaci´on de eclas se u ilizan las unciones
SendPoin e E en ySendKeyE en espec i amen e. Cabe des aca que pa a en ia el

40 Cap´
ı ulo 6. Especi icaciones
e en o de pulsaci´on de eclado hay que ans o ma el c´odigo de ecla que nos llega desde
Ja a pa a que el se e sea capaz de in e p e a lo co ec amen e.
bool Clien Connec ionRFB : : sendKeyE en ( in key , bool down){
bKeySym bKey = ans o mToR bKey ( key ) ;
i ( bKey != 0){
SendKeyE en ( clien RFB , bKey , down ) ;
}
}
La clase Handle RFB (Ve Figu a 6.6) es una clase comple amen e es ´a ica. Es o se
debe a que, dado que LibVNCSe e se encuen a esc i a en C y los e en os del mismo son
pun e os a unciones, si no uesen es ´a icos los m´e odos en C++ ienen de o ma impl´ıci a
el pa ´ame o his, que es una e e encia a la p opia clase. Po el con a io C no es un
lenguaje o ien ado a obje os, po ello ese pa ame o his no exis e en las llamadas. Al
decla a es ´a icos los m´e odos, el pa ´ame o his desapa ece. Sus m´e odos b´asicamen e
edi igen la llama a las unciones de Clien Sc een, po eso e a necesa io pasa la e e encia
al inicio.
Clien Sc een (Ve Figu a 6.6) se enca ga del manejo de las ac ualizaciones de la ima-
gen, as´ı como de comunica odos los cambios a Ja a. Es a comunicaci´on la hace a a ´es
de Obse ableJNI median e la he encia de sus m´e odos.
Cuando llega un e en o de inicializa la imagen desde el handle se llama al m´e odo
iniSc een. En es e m´e odo se inicializan odos los alo es de la imagen y se en ´ıa una
no i icaci´on a Ja a.
in Clien Sc een : : in iSc e e n ( cons i n wid h ,
cons i n heigh ,
cons i n bi s Pe P ixe l ) {
i (DEBUG)
LOGE(” JNI iniF ameBu e ” ) ;
his −>wid h=wid h ;
his −>heigh =heigh ;
// se pasa de b i s a by e
his −>by esPe Pixel=bi sPe Pixe l /8;
his −>dep h = bi sPe Pixel ;
// se c a l c u l a e l e s pac io o a l d el b u e
his −>s i z e = his −>heigh ∗ his −>wid h∗ his −>by esPe Pixel ;
i (DEBUG)
LOGE(”FIN JNI iniF ameBu e ” ) ;
no i yIniF ame( his−>wid h ,
his −>heigh ,
his −>by esPe Pixel ,
his −>dep h ) ;
e u n s i z e ;
}
Cuando se quie e in oca m´e odos de Ja a, pa a no i ica cambios, es necesa io colo-
ca se en el en o no de ejecuci´on ac ual, es o es, en el hilo. Pa a ello usamos la unci´on
ge En i omen . Es e m´e odo comp ueba si la a iable en , del ipo JNIEn *, se encuen a
apun ando al hilo ac ual, si no uese el caso, se coloca en ´el.
6.2. Diag amas de clases 41
oid Obse ableJNI : : ge En i omen (){
in ge En = m−>Ge En ( ( oid ∗∗)&en , JNI VERSION 1 6 ) ;
i ( ge En == JNI EDETACHED){
m−>A achCu en Th ead(&en ,NULL) ;
}
}
El m´e odo no i yIniF ame ob iene el m´e odo upda eIniF ame del en o no Ja a y lo
llama pas´andole la in o maci´on nue a. Despu´es se llama a Ge Objec Class pa a ob ene la
clase VncB idgeJNI y as´ı, pode hace llamadas a sus m´e odos. Pa a hace una llamada
a un m´e odo de Ja a, una ez enemos la clase, hay que u iliza el m´e odo Ge Me hodID
pa a ob ene el ID del m´e odo que deseamos in oca . Una ez que dispongamos de dicha
ID podemos llama lo usando CallVoidMe hod.
oid Obse ableJNI : : no i yIniF ame ( i n wid h ,
in heigh ,
in bpp ,
in dep h ){
ge En i omen ( ) ;
i (DEBUG)
LOGE(” Take me hod iniF ame ” ) ;
o b s e e c l a s s = en −>Ge Objec Class( his−>obse e objec );
// cogemos e l ID
jme hodID upda eSc een = en −>Ge Me hodID ( o b s e e c l a s s ,
”upda eIniF ame”,
”( I I I I )V” ) ;
i (DEBUG)
LOGE(” Launch me hod iniF ame ” ) ;
en −>CallVoidMe hod ( obse e objec ,
upda eSc een ,
wid h ,
heigh ,
bpp ,
dep h ) ;
i (DEBUG)
LOGE(” Finish launch me hod iniF ame ” ) ;
en −>Dele eLocalRe ( o b s e e c l a s s ) ;
}
Pa a inaliza , el m´e odo upda eSc een de Clien Sc een es el enca gado de ac ualiza
una po ci´on de la imagen. El inicio de la po ci´on a ac ualiza iene indicado po los
pa ´ame os x e y, siendo w y h la anchu a y la al u a espec i amen e de dicha po ci´on.
oid Clien Sc een : : upda eSc een ( u in 8 ∗ ameBu e ,
cons i n x ,
cons i n y ,
cons i n w,
cons i n h){
i (DEBUG)
LOGE(” JNI Upda e ” ) ;
i n p i x e l ;
42 Cap´
ı ulo 6. Especi icaciones
in pos ;
in pos co l ;
in pos a ay ;
ge Bi mapDa a ();
j i n ∗i n o = ge A ayElemen s ( ) ;
in e a l i , e a l j ;
o ( i n i =0; i <w; i++ ){
e a l i = i + x ;
pos co l = ( e a l i ∗by esPe Pixel );
o ( i n j =0; j<h ; j++){
e a l j = j + y ;
pos = (( by esPe Pixel∗wid h ) ∗ e a l j ) + pos col ;
memcpy(&pixel ,& ameBu e [ pos ] , by esPe Pixel ) ;
pos a ay = ( wid h ∗ e a l j ) + e a l i ;
i n o [ po s a ay ] = p i x e l ;
}
}
i (DEBUG)
LOGE(” JNI no i y eD aw ” ) ;
se A ayElemen s ( i n o ) ;
}
Lo que hace es e m´e odo es eco e la po ci´on que ha cambiado con los dos bucles o .
Las a iables eal i y eal j son las posiciones eales de la po ci´on den o de la imagen. Como
la imagen se ep esen a en un bu e unidimensional es necesa io calcula el desplazamien o
que se ob iene:
pos = ((by esP e P ixel)(wid h))( eal j) + (( eal i)(by esP e P ixel))
Una ez enemos la posici´on copiamos el p´ıxel con memcpy y lo gua damos en in o.
El bi map in o es una e e encia al bi map de Ja a, lo ob enemos a a ´es de los m´e odos
ge Bi mapDa a yge A ayElemen s, de al mane a que cuando se modi ican elemen os de
dicho bi map en C se es ´an modi icando en Ja a. Lo ´unico que al a po hace es ac ualiza
la in o maci´on a a ´es del m´e odo se A ayElemen s. Median e el que JNIEn libe a el
ec o del en o no de C/C++ con la unci´on ReleaseIn A ayElemen s y se ac ualiza el
ec o de Ja a.
Cap´ı ulo 7
Compa a i as
Se desc ibe la compa aci´on del esula do inal con las aplicaciones que han sido omadas
como e e encia en el p incipio del p oyec o. Como ya se indic´o en el cap´ı ulo dos, usamos
como pun o de pa ida es aplicaciones que aba can el campo del con ol emo o m´o il.
7.1. Funcionalidad
Nues o p op´osi o inicial e a mejo a cie os aspec os de es as aplicaciones ya exis en-
es, y en es e apa ado obse amos esul ados.
7.1.1. Funcionalidades des acadas compa idas con VNC++
Hace zoom.
Mues a el eclado.
Esc ibe.
En ´ıa secuencias de eclas.
Recue da conexiones p e ias.
7.1.2. Funcionalidades di e en es espec o VNC++
RealVNC: como ya se ma iz´o, es a aplicaci´on es ´a basada en so wa e p i a i o,
po lo que no disponemos de mucha in o maci´on ela i a a la implemen aci´on in e -
na de es e p oyec o. Pe o algo que nos p opusimos desde el p incipio e a c ea un
so wa e pu amen e lib e ya que pensamos que es as´ı como se llega a un p oduc o
inal con m´as opciones de desa ollo y uso u u o.
Pe mi e, a a ´es de un men´u de opciones, desac i a el modo de pan alla comple a,
as´ı como opci´on de Copy&pas e. Tambi´en es des acable la di e encia en el manejo,
en VNC Viewe al mo e el dedo po la pan alla lo que mo e emos es el cu so y no
la imagen como en nues o caso.
Mul iVNC: lib e y de c´odigo abie o, usa acele aci´on ha dwa e OpenGL pa a el
dibujado y el zoom, mien as que en nues o caso se ha op ado po el uso de Can as.
El manejo en la pan alla de Mul iVNC es igual que el de RealVNC.
43
50 Cap´
ı ulo 7. Compa a i as
Mul iVNC:
Figu a 7.8: Rendimien o 3G Mul iVNC
Como se puede obse a los alo es con una conexi´on 3G son muy pa ecidos, ello es
debido a c´omo unciona la p opia conexi´on y sus limi aciones. As´ı pues se puede conclui
que el endimien o en en o nos de 3G de las aplicaciones es equi alen e.

Cap´ı ulo 8
Conclusiones
8.1. Conclusiones
Como conclusi´on pensamos que se han alcanzado las me as p opues as en el apa ado
1.3. Todo el c´odigo ha sido licenciado bajo una licencia lib e (GPL e si´on 3), po an o el
obje i o de c ea una aplicaci´on de so wa e lib e se ha cumplido sin mayo p oblema. En
cuan o al obje i o m´as impo an e, la cons ucci´on de la aplicaci´on de esc i o io emo o en
And oid u ilizando c´odigo na i o, ambi´en se ha cumplido, ya que no s´olo se ha cons uido
una aplicaci´on con muchas uncionalidades, sino que es una aplicaci´on e icien e, capaz de
compe i con odas las dem´as aplicaciones de esc i o io emo o pa a And oid que exis en
en es e momen o. Cabe des aca una ez m´as que la g an di e encia y la az´on po la
que es e p oyec o es inno ado , es en que ninguna de las dem´as aplicaciones u ilizan
c´odigo na i o, al menos no las de so wa e lib e. La imposibilidad de sabe como es ´an
cons uidas las aplicaciones p i a i as nos impide a i ma con o al o undidad que no
exis e una aplicaci´on de esc i o io emo o pa a And oid que u ilice el NDK. No obs an e,
al no exis i una de so wa e lib e, la inno aci´on sigue es ando ah´ı, ya que hemos abajado
sob e algo que no exis e en ning´un lado y con unos esul ados conside ablemen e buenos.
8.2. T abajo Fu u o
Como posible abajo u u o se pod ´ıa a˜nadi sopo e pa a odos los idiomas, en dos
sen idos. Po una lado la aducci´on de la in e az a di e os idiomas y, po o o, sopo e
en el eclado pa a m´as idiomas.
O a cosa que se pod ´ıa in es iga m´as es la acele aci´on po ha dwa e, de es a mane a
se pod ´ıa consegui una mayo elocidad a la ho a de abaja las im´agenes y con ello se
ob end ´ıa una mejo a del endimien o global conside able.
Tambi´en pensa en po a la aplicaci´on a las dem´as pla a o mas m´o iles como Fi e ox
OS.
51
52 Cap´
ı ulo 8. Conclusiones
Bibliog a ´ıa
[1] Wikipedia Esc i o io Remo o: h p://es.wikipedia.o g/wiki/Esc i o io_
emo o
[2] Wikipedia Vi ual Ne wo k Compu ing: h p://en.wikipedia.o g/wiki/VNC
[3] Remo e F ame Bu e P o ocol: h p://www. eal nc.com/docs/ bp o o.pd
[4] Wikipedia And oid (ope a ing sys em): h p://en.wikipedia.o g/wiki/And oid_
(ope a ing_sys em)
[5] So wa e De elopmen Ki : h p://de elope .and oid.com/sdk/index.h ml
[6] Na i e De elopmen Ki : h p://de elope .and oid.com/ ools/sdk/ndk/index.
h ml
[7] Wikipedia Ja a Na i e In e ace: h p://en.wikipedia.o g/wiki/Ja a_Na i e_
In e ace
[8] Tigh VNC, Tigh encoding: h p://www. igh nc.com/decode .php
[9] Wikipedia Gi : h p://en.wikipedia.o g/wiki/Gi _(so wa e)
[10] Gi : h p://gi -scm.com/
[11] Wi eSha k: h p://www.wi esha k.o g/
[12] F ee So wa e: h p://www. s .o g/abou /wha -is- ee-so wa e
[13] Gene al Public License: h p://www.gnu.o g/licenses/gpl.h ml
[14] Wikipedia RealVNC: h p://es.wikipedia.o g/wiki/RealVNC
[15] Mul iVNC: h ps://play.google.com/s o e/apps/de ails?id=com.
cobol o ge.don mind.mul i nc&hl=es
[16] And oid- nc- iewe : h p://code.google.com/p/and oid- nc- iewe /
[17] SDL: h p://www.libsdl.o g/
[18] Wikipedia Simple Di ec Media Laye : h p://es.wikipedia.o g/wiki/Simple_
Di ec Media_Laye
[19] She lockBa : h p://ac ionba she lock.com/
[20] LibVNC: h p://lib ncse e .sou ce o ge.ne /
[21] SlidingMenu: h ps://gi hub.com/j eins ein10/SlidingMenu
53
54 BIBLIOGRAF´
IA
[22] SQLi e And oid: h p://de elope .and oid.com/ e e ence/and oid/da abase/
sqli e/package-summa y.h ml
[23] In e az Holo: h p://de elope .and oid.com/design/s yle/ hemes.h ml
Ap´endices
55

Ap´endice A
Aqu´ı se p esen a una peque˜na desc ipci´on de c´omo se usa la aplicaci´on. Es e ex o de
ayuda se puede e ambi´en desde la p opia aplicaci´on accediendo al men´u en la en ana
p incipal. Se encuen a an o en espa˜nol como ingl´es, al igual que odos los di´alogos y ex o
de los bo ones. Es el p opio sis ema And oid, en base al idioma seleccionado po de ec o
en el sis ema ope a i o, el que selecciona el idioma a mos a . En caso de no dispone del
idioma co espondien e al del sis ema, po de ec o se mos a ´an los ex o en ingl´es.
A.1. P´agina de ayuda de VNC++
A.1.1. Manejo p incipal
Pa a c ea una nue a conexi´on pulse el icono “+” en la ba a supe io de Acci´on
(Ve Figu a A.1). Una ez den o, es necesa io especi ica la IP del se ido , as´ı como
un nomb e de iden i icaci´on de la conexi´on. El pue o po de ec o es el 5900, pudi´endose
cambia , as´ı como la con ase˜na, pudiendose deja en blanco si no se necesi a.
Figu a A.1: Nue a conexi´on Figu a A.2: Vis a del esc i o io
57
58 Cap´
ı ulo A.
El desplegable de calidades si e pa a indica la calidad de la imagen. Se puede elegi
en e calidad supe -al a, al a, media o baja, seg´un el ipo de conexi´on del usua io ya sea
m´as len a o ´apida, o simplemen e po necesidad de cie a calidad de imagen.
En el bo ´on desplegable de opciones en la ac i idad p incipal se puede accede a es
submen´us:
La opci´on de Con igu aci´on: pe mi e, a a ´es de dos swi ches de selecci´on, ma ca
si se ecue da o no la opci´on de con i ma salida, as´ı como ocul a el cu so o no
(Ve Figu a A.3).
Manual de uso pa ecido al que se es ´a na ando (Ve Figu a A.4).
Secci´on “Ace ca de” donde se e lejan los c eado es de la aplicaci´on, as´ı como el ipo
de licencia y las lib e ´ıas usadas (Ve Figu a A.8).
Figu a A.3: Con igu aci´on Figu a A.4: Manual de uso
A.1.2. Con ol de pes a˜nas
Se puede cambia de pes a˜na pulsando sob e las e ique as RECIENTES o FAVORI-
TOS, y as´ı e las dis in as conexiones c eadas (Ve Figu a A.5).
A.1.3. A˜nadi a a o i os
Pa a a˜nadi a a o i os ´unicamen e hay que clica sob e el icono con o ma de es ella
(Ve Figu a A.5).
Pa a qui a esa conexi´on de a o i os, se pulsa de nue o el icono ma cado, qui ´andose
de la secci´on de a o i os.
A.1. P´
agina de ayuda de VNC++ 59
A.1.4. Opciones de conexi´on
Al pulsa sob e una conexi´on de la lis a, se p esen a un men´u de opciones. Desde ah´ı se
puede conec a , mos a la in o maci´on de la conexi´on, edi a y elimina dicha conexi´on.
Tambi´en se puede conec a pulsando el icono de la de echa con o ma de lecha.
A.1.5. Opciones de edici´on
Se pod ´a modi ica cualquie alo p e io de la conexi´on, a excepci´on del iden i icado
elegido, del mismo modo que se c ea una nue a conexi´on.
A.1.6. Men´u la e al
Una ez ca gada la imagen se puede accede al men´u de opciones, an o desde el
bo ´on ´ısico del e minal, como a as ando desde la izquie da de la pan alla pa a saca
el men´u la e al. Una ez ah´ı se puede mos a eclado, manda eclas, cen a imagen,
mos a una ayuda educida y desconec a (Ve Figu a A.6).
Figu a A.5: Pes a˜nas Figu a A.6: Men´u la e al
A.1.7. Manejo
Pa a manda e en o click, simplemen e haga una pulsaci´on con el dedo.
Pa a hace doble click, man enga p esionado el dedo sob e la pan alla du an e unos 3
segundos.
Pa a hace zoom, coloque un dedo sob e la pan alla, mien as con o o dedo alejas o
ace cas del p ime dedo, a modo de pinza.