GALILEA MORENO P2P Sharing 2.0 4201388 321869653
GALILEA MORENO P2P Sharing 2.0 4201388 321869653
GALILEA MORENO P2P Sharing 2.0 4201388 321869653
AUTOR
JULIO GALILEA MORENO
DIRECTOR
PABLO RABANAL BASALO
III
IV
AGRADECIMIENTOS
A mi familia, por todo el apoyo y confianza que me han dado durante este
viaje,
gracias.
V
VI
RESUMEN
Palabras clave
VII
VIII
ABSTRACT
The P2P Sharing 2.0 project has consisted in the elaboration of new
functionalities and improvements of P2P Sharing app, which is the old version of
our app and that has been taken as a basis for the development of the project.
The main functionalities that have been developed into the project are groups
creation to be able to share files with friends that belong to it, block users you don’t
want to share files with, folder sharing in addition to single file sharing, archives
preview prior to downloading, an uploads and downloads system upgrade, and a
memory usage improvement.
Besides these new features implemented in the app, there have been made
some more enhancements like performance of specific tasks, usability and display,
and implementation of new components replacing others that were obsolete or
outdated.
Keywords
IX
ÍNDICE
Dedicatoria.................................................................................................. III
Agradecimientos ............................................................................................ V
Resumen ....................................................................................................VII
Abstract ....................................................................................................... IX
Índice ........................................................................................................... X
1.4 Objetivos.............................................................................................. 5
1.7 Workplan.............................................................................................. 8
X
2.1.2 Tipos según estructura ................................................................... 15
XI
4.1 Trabajo futuro ..................................................................................... 53
Bibliografía .................................................................................................. 59
Créditos ...................................................................................................... 63
XII
ÍNDICE DE FIGURAS
Figura 3-8: Diagrama borrar usuarios con acceso a una carpeta ........................ 42
XIII
Figura 3-12: Diagrama enviar archivo............................................................. 48
XIV
XV
Capítulo 1 - Introducción
1
P2P Sharing: https://github.com/jpradas/P2P-Android-App
1
solución combinada de WebRTC y PubNub para comunicación entre pares ha
resultado sin duda una gran opción.
1.1 Introduction
In this project I have worked in mobile apps, which is one of the most
important points in computer science, with significant growth and high popularity
between the developers and users communities.
Some years have passed since the release of the first “smartphone”, but the
applications for these devices were only an evolution, In fact, it is hard to find
which was the first application designed to work in a mobile phone, since “apps”
were better known as features, like alarms, the calculator or the contacts list. It
was wanted to include as many utilities as possible following last trends. Nowadays
a mobile phone, if it could be called only a phone, is a powerful tool thanks to
technological progress.
Not so well known but no less important, there are two technologies on what
is based the application for data sharing built in a different way than technology
used in the majority of P2P apps: We are talking about WebRTC and PubNub. Both
will be discussed in detail in chapter 2.
There has been done a little incursion into P2P networks paradigm and their
main kinds that have been formulated all recent history long, if they had any
structure or if they were centralized, analyzing which topologies were set out. All of
this based on a hierarchy between machines in the network as flat as possible. All
2
of them were client and server at the same time, that is a thing that broke the
classic computer communications idea.
The work on which it has been implemented my code solved the main trouble
that stood when two devices of a P2P network communicate without intermediaries
at least in transmissions with huge amounts of data. The WebRTC and PubNub
combined solution for communication between peers has proved to be a great
option certainly.
Being this app based on another one2 made by other partners, there has
been implemented some new functionalities which provide added value, as well as
improvements in some aspects regarding performance, visual part or use of new
items at the moment of programming.
2
P2P Sharing: https://github.com/jpradas/P2P-Android-App
3
Uno de los principales pilares de esta evolución ha sido la posibilidad de
comunicarse desde cualquier lugar. Con ello se fueron incluyendo otras
funcionalidades como el reproductor de archivos de música, la cámara de fotos y
vídeo o el GPS. Sin embargo, el intercambio de archivos tardó algo más en llegar
con respecto a su popularidad en el PC. Programas como eMule [2] o Bittorrent [3]
empezaron a dominar las redes P2P rápidamente.
Mobile technologies are in constant evolution since some decades. At the end
of the 20th century they experienced a technological growth such that today a large
part of the young and middle-aged population has at least one mobile phone, and
its use is increasing little by little in developing countries. At the early 2000s,
mobile phones and tablets have been grouping functions that were already covered
4
by other devices, making these obsolete because it wasn't handy to have some
devices instead of only one and because there were marketing strategies made by
companies, among other reasons.
One of the main pillars of this evolution has been the possibility of
communicating from anywhere. Besides, other functionalities were being included
like the music player, the photo and video camera or the GPS. However, file
exchange applications took some more time to arrive in relation to their popularity
in PC. Apps like eMule [2] or Bittorrent [3] quickly began to dominate P2P
networks.
The idea of broaden an Android app made to share files only between friends
was found interesting mainly for two reasons: expansion of my knowledge in
Android and the challenge of extending a work that was started before. I should
understand the technology with which it is working by, and carry out a number of
modifications that adds new functions -planned or not by previous developers-,
improve current functionalities and improve user experience.
1.4 Objetivos
5
he creído y hayan sido necesarios, y comprobar las características de la interfaz
gráfica en cuanto a usabilidad también con la predisposición de embellecer o afinar
elementos.
1.5 Objectives
The objective of this project is the analysis and improvement of the previous
work. This improvement has consisted mainly in the inclusion of new functions that
could be useful, study general performance of the app and specific tasks
performance in order to increase it in those cases I have thought and those that
had been necessary, and check graphic interface features regarding usability also
with predisposition to decorate or tune items.
With regard to personal objectives, the most important one is learning and
progress of my previous knowledge I had about programming (Java language
above all), but specially related to mobile development, taking Android in this case.
6
As it is a project built over another made by other programmers it has
supposed to me an extra effort for a number of reasons. Until now in the degree we
had carried out our codes in projects from zero almost always. Now I have had to
adapt to that studying not only our mates implementation, but also technologies in
which lived the main goal of the past work, that it was the correct establishment of
communications between two devices located each one behind a firewall and the
added difficulty of not being allowed to start connections from outside of a local
network for security reasons.
3. Análisis de las funciones que están hechas teniendo en cuenta los siguientes
aspectos:
7
• Eficiencia, o tiempo empleado en realizar una acción navegando por la
GUI.
5. Análisis del apartado "Trabajo Futuro" del TFG anterior para estudiar la
utilidad e idoneidad de las ideas propuestas comparadas con las que se
valoraron en el punto anterior.
1.7 Workplan
To get going with the work I have followed my own workplan in which I have
tried to cover in a practical way the most immediate needs in order to develop the
job correctly, and being partly polished during development.
1. Study of similar applications available on the market to get some more ideas
about which features could try to implement into our work.
3. Analysis of the functions that are present taking into account the following
aspects:
8
a. Effectiveness, or accuracy with what user satisfies their task objective.
4. Test of new interesting functions that were missing in the original program.
5. Analysis of the section “Future work” showed in the previous work to study
the usefulness and suitability of suggested ideas with the ones I have
assessed in the earlier point.
7. Apply the usability principles shown in section 3 into the new use cases.
9
A lo largo del capítulo 3 se explican los diferentes desarrollos realizados para
la mejora de la aplicación. Todos ellos se separan por funcionalidades nuevas, o
bloques de mejora de un aspecto concreto, para así poder entender mejor el
desarrollo. Estos apartados son:
• Compartición de carpetas
10
In chapter 2 main computer parts that are covered in the project are
explained to put it into context. It is described what it is, on what is P2P technology
based and also what is Android and its main features.
• Folder sharing
In chapter 4 are the conclusions after project completion beside results got
and possible improvements or new developments to carry out in the future, which
they couldn’t be done during this year.
11
Capítulo 2 - Estado del arte
“Una red peer-to-peer, red de pares, red entre iguales o red entre pares
(P2P, por sus siglas en inglés) es una red de ordenadores en la que todos o algunos
aspectos funcionan sin clientes ni servidores fijos, sino una serie de nodos que se
comportan como iguales entre sí. Es decir, actúan simultáneamente como clientes y
servidores respecto a los demás nodos de la red. Las redes P2P permiten el
intercambio directo de información, en cualquier formato, entre los ordenadores
interconectados”3 [4] Además de utilizarse para transmitir ficheros también se
emplean en otro tipo de comunicaciones como la tecnología VoIP.
3
https://es.wikipedia.org/wiki/Peer-to-peer
13
ningún punto con mayor carga que el resto. Existen 3 tipos como vemos a
continuación:
Centralizada
Descentralizada
Híbrida
14
Aquí se tiene una mezcla de las características de los dos tipos de redes
anteriores. Se cuenta con uno o varios servidores centrales que gestionan las
conexiones entre los nodos sin actuar como retransmisores de datos. Una vez que
facilitan la información necesaria a las máquinas que se quieran comunicar entre sí
son prescindibles.
Estructuradas [5]
No estructuradas [6]
4
https://en.wikipedia.org/wiki/Peer-to-peer#Structured_networks
15
2.1.3 Tecnologías de conexión
WebRTC [7]
5
https://webrtc.org/
16
Figura 2-2: WebRTC
PubNub [8]
La red replica los mensajes hacia los centros de datos de los que disponen.
Así si se produce algún problema en la conexión al centro de datos más cercano a
un dispositivo que hubiera de recibir algún mensaje este se conectaría al siguiente
centro más cercano y obtendría el mensaje.
6
https://support.pubnub.com/support/solutions/articles/14000046386-what-is-
pubnub-
17
El patrón publicador-suscriptor es una buena opción para el sistema de
subidas y descargas. Todos los dispositivos pueden actuar como publicadores y
suscriptores a la vez. El que toma el rol publicador es el que sube los mensajes y
los suscriptores son aquellos a los que PubNub retransmite estos datos en tiempo
real. Los mensajes utilizan canales. Los dispositivos que deseen recibir
determinados mensajes han de suscribirse al canal pretendido para ello. Por último,
cabe mencionar que los canales empleados tienen topologías de tipo one-to-
one(unicast), one-to-many(broadcast), many-to-many(multicast) o many-to-
one(consolidation) [10].
2.2 Android
18
Figura 2-4: Imagen Android
Android fue creado por Android Inc., una empresa que fue comprada por
Google en el año 2005. Posteriormente, en el año 2007 Google funda un consorcio
de 47 empresas dedicadas a la fabricación y desarrollo de hardware y software,
llamado Open Handset Alliance para así promover y avanzar en los estándares
abiertos de los dispositivos móviles. A su vez Google también anuncia la primera
versión del sistema operativo, Android 1.0 Apple Pie que se lanzaría en 2008 [12].
19
• Android 1.1 Banana Bread (Pan de plátano): búsqueda por vos -Google Voice
Search-, aplicaciones y juegos de pago, compartir ubicación -Google
Latitude-.
20
automático, distintas escenas en la cámara nativa, una aplicación de
Facebook preinstalada, fondos de pantalla animados, nuevo cajón de Apps,
rediseño de aplicaciones, animaciones en toda la interfaz, ampliar o reducir el
tamaño de imágenes, páginas web o mapas (pinch-to-zoom).
• Android 4.1 y 4.2 Jelly Bean (Gominola): Project Butter -proyecto para
mejorar la sensación de fluidez-, modificación de panel de notificaciones con
reloj digital y notificaciones ampliables, añadir diferentes cuentas de usuario
a un mismo dispositivo, Google Now, se implementan los servicios de Google
Play, añadir widgets a la pantalla de bloqueo.
• Android 4.4 KitKat (Kit Kat): Project Svelte producía una importante
reducción en el uso de la memoria RAM, tonos blancos, Google Now se
21
integra en el launcher, modo inmersivo, comando de voz “Ok Google”,
introducción de Google Fotos.
22
• Android 9.0 Pie (Pastel): navegación por gestos, sistema de posicionamiento
en interiores a través de la tecnología Wi-Fi RTT, mejoras rendimiento -ART-
y ahorro de energía -DOZE-, soporte a sistemas fotográficos formados por
dos cámaras, nuevo panel de ajustes rápidos, respuestas rápidas a mensajes
desde notificaciones, editor de capturas de pantalla, mejora control volumen,
brillo adaptativo.
23
éxito. Como se ha podido ver en el punto anterior no todas estas características
estaban desde el principio, sino que muchas se han ido introduciendo a lo largo del
tiempo con las mejoras de las diferentes versiones.
• Conectividad: Bluetooth, WiFi, LTE, HSDPA, NFC, GPRS, USB, etc [18].
• Multimedia: MP4, MPEG-4, AMR,AMR-WB, AAC, MP3, MIDI, WAV, JPEG, PNG,
GIF, BMP [19]
Tiene soporte con Java. Gran parte de las aplicaciones están escritas en Java y
además una parte de la arquitectura de Android, como es la Java API
Framework, está desarrollada en Java. [20]
24
Para el almacenamiento de datos utiliza SQLite [21], una biblioteca en
lenguaje C que implementa un motor de base de datos SQL pequeño, rápido,
autónomo y con todas las funciones.
2.2.3 Arquitectura
• System apps (Aplicaciones del sistema). Compuesta por las principales apps
que tiene el sistema operativo y también algunas de las apps que instale el
usuario, las cuales pueden usar las de Android para realizar la misma
función.
25
• Native C/C++ Libraries (Librerías C/C++ nativas). En este conjunto se
encuentran las librerías utilizadas por Android para algunas de sus
componentes y servicios, están escritas en C/C++.
26
2.3 Trabajo relacionado
2.3.2 SHAREit
7
https://play.google.com/store/apps/details?id=com.smarterdroid.wififiletransfer
27
Es una de las aplicaciones8 más descargadas de Google Play en varios países.
Da la posibilidad de transferir archivos de cualquier formato sin necesidad de
utilizar cable USB o conexión a internet a una velocidad de hasta 20 Mb/s.
2.3.3 ShareOnWifi
Es una aplicación9 que utiliza el protocolo P2P para compartir archivos entre
distintos dispositivos de forma directa, ya sean Windows, Android o iOS. Los
dispositivos deben estar conectados a la misma red wifi. A diferencia de otras
aplicaciones de intercambio de archivos, en ShareOnWifi no es necesario realizar un
proceso para establecer una conexión cada vez que se quiera compartir un archivo;
en su lugar, el dueño de los archivos elige qué archivos compartir mediante la
aplicación y con quién compartirlos (no obstante, existe la opción de dejarlos en
estado público). Después, las personas conectadas a la misma red wifi que tengan
permiso para ver estos archivos pueden buscarlos y descargarlos.
8
https://play.google.com/store/apps/details?id=com.lenovo.anyshare.gps
9
https://play.google.com/store/apps/details?id=aaqib.shareonwifi
28
usuario suba un archivo, y se pueda descargar cuando cada usuario quiera,
generando en ese momento la conexión. La principal diferencia con nuestra
aplicación es el rango de actuación, ya que en esta app es necesario estar
conectado a la misma red wifi, en cambio, nuestra app no es necesario.
2.3.4 SHAREall
10
https://play.google.com/store/apps/details?id=com.pnd.shareall
29
Capítulo 3 - Desarrollo del proyecto
Además, algunos de estos desarrollos también han sido realizados sin estar
planificados anteriormente en función de las necesidades que se han ido
observando durante el avance del proyecto.
• Actividades [24]
31
Figura 3-1: Ciclo de vida de una actividad
32
• Intenciones [25]
Una intención (o “Intent”) “es un objeto de mensajería que puedes usar para
solicitar una acción de otro componente de una app”11. Los casos de uso más
utilizados son los siguientes:
• Servicios [26]
11
https://developer.android.com/guide/components/intents-filters.html?hl=es
33
funcionalidad y los pasos a seguir. El código fuente se encuentra en
https://github.com/jotagalilea/P2P-Android-App.
Descripción
Proceso e implementación
34
cualquiera, y si es un amigo se pedirá confirmación. Al realizar la acción aparecerá
en la lista. Además se puede bloquear directamente a un amigo desde la actividad
principal tocando sobre él o ella y pulsando en el botón “Bloquear amigo”.
35
Figura 3-3: Diagrama bloquear usuario
Descripción
36
especialmente en el ámbito académico ya que los alumnos solemos organizar los
ficheros por asignatura, tema, o año por ejemplo. Sin embargo, en esta aplicación
no se implementó esta opción. Por ello desarrollamos la compartición de carpetas.
Estas carpetas compartidas podrían ser visibles para todo el mundo que se
tuviera agregado como amigo, pero podría no ser deseable por todos los usuarios.
Sería interesante que cada carpeta compartida sólo fuera visible por un
subconjunto de amigos, ya que por ejemplo no tendría mucha utilidad compartir
archivos académicos con familiares si estos no tienen ninguna relación o interés en
ellos. Así se mostraría contenido coherente para cada uno. Por esta razón es buena
idea realizar esta tarea como una función separada de la compartición de archivos
ya implementada.
Por otra parte, se ha decidido que los ficheros que se comparten de una
carpeta seleccionada sean solo los que estén en el nivel que se está explorando en
ese momento, y que no se profundice en carpetas anidadas por simplicidad en la
implementación y en el guardado en la base de datos.
Proceso e implementación
Por otro lado, para ver las carpetas que se han compartido con anterioridad
se ha de pulsar en el botón con tres puntos de la barra de la actividad principal y
seleccionar “Ver carpetas compartidas”. Aparecerán todas ellas en una lista
37
mostrando la ruta y el número de amigos con acceso. Pulsando sobre una se podrá
ver los archivos que contiene o bien ver los usuarios a los que se les ha dado
acceso, pudiendo añadir nuevos o eliminar alguno.
Para acceder a una carpeta compartida por alguno de los amigos se tiene
que pulsar sobre el amigo deseado desde la actividad principal y después en “Ver
carpetas compartidas”. Si el amigo ha compartido alguna carpeta con el usuario
esta aparecerá. Pulsando sobre una de las que aparezcan se podrá acceder a su
contenido, pudiendo descargar o previsualizar uno de los archivos.
38
Figura 3-5: Compartición de carpetas 2
39
Figura 3-6: Diagrama compartir carpeta
40
Figura 3-7: Diagrama añadir usuarios a carpeta compartida
41
Figura 3-8: Diagrama borrar usuarios con acceso a una carpeta
42
3.3 Previsualización de archivos e iconos
Descripción
• Rareza: Es más útil para los usuarios poder ver una parte de un fichero
con un formato común (como txt o pdf) que otros menos corrientes. Está
basado en mi experiencia.
• Complejidad: Cuánta mayor sea, mayor tiempo de investigación es
necesario para dar con la forma de fragmentar el fichero en cuestión,
también probablemente buscando librerías.
Proceso e implementación
Para previsualizar un archivo hay que realizar los mismos pasos que si se
fuera a descargar: pulsar sobre uno de los amigos de la lista de la actividad
principal, elegir si se quiere ver los archivos o las carpetas compartidas y pulsar
43
sobre el archivo deseado. Aparecerá un diálogo preguntando si se quiere descargar
o previsualizar y si el formato del fichero está dentro de los formatos soportados
para la previsualización el botón “Previsualizar” estará habilitado. Pasado un breve
período de tiempo tras pulsar el botón se habrá descargado un fragmento del
fichero y se abrirá automáticamente con la aplicación predeterminada para este tipo
de fichero, o bien aparecerá un menú que permitirá seleccionar una de entre varias
aplicaciones para abrirlo.
Descripción
44
describe en el apartado E), lo enviaba a trozos sin tener en cuenta que de todos
modos un archivo muy grande no iba a caber en memoria, mostraba muy poca
información sobre el estado de la descarga y no permitía descargas en paralelo ni
tenía ningún tipo de cola. Una implementación con muchas mejoras posibles que
necesitaba una renovación.
Proceso e implementación
45
hilo de descarga>. Cuando llega un mensaje se puede identificar si pertenece a una
descarga o a otra rápidamente, pues este viene con la información del nombre del
fichero asociado. Así se obtiene el monitor del hilo que corresponda y se le notifica
que ha llegado un mensaje que debe tratar él, tomando también la referencia a ese
hilo para pasarle acto seguido dicho mensaje.
46
Figura 3-11: Diagrama descargar/previsualizar archivo
47
Figura 3-12: Diagrama enviar archivo
48
Figura 3-13: Diagrama cancelar descarga
Descripción
49
Implementación
Descripción
Para reducir estos costes se tenía que identificar en qué casos las
comunicaciones pueden transmitir un volumen de datos significativamente grande.
Las peticiones de amistad y el envío de información sobre archivos o carpetas
compartidas no suponen grandes intercambios de información, por lo que no se han
tenido en cuenta. Los dos casos de uso a tener en cuenta en los cuales esto ocurre
son el envío y la recepción de ficheros. Sin embargo, no hemos introducido la
limitación de uso en ambos casos porque estamos ante acciones sobre las que
podemos hacer una distinción clara: La recepción de un fichero responde a una
petición de éste previa y consciente por parte del usuario. Podemos asumir que si
decide descargar algo es porque se lo puede permitir acorde a la tarifa que tenga
contratada. Sin embargo, el envío, tal y como está implementada la aplicación, es
una tarea que ocurre de forma imperceptible, de manera que el usuario no es
50
directamente consciente del uso de datos que está haciendo la aplicación y para
conocer este dato tendría que acudir al registro de uso de datos de las aplicaciones
dentro de los ajustes de Android, algo poco cómodo. Por esta razón, el
impedimento de uso de la red sólo se ha implementado para los envíos.
Proceso e implementación
Para llevar a cabo esta sencilla tarea se toma el servicio de conectividad del
sistema y simplemente se le pregunta si está conectado a la red o si está
conectándose. Si se está utilizando wifi no ocurre nada, y en caso de usarse la red
se comprueba si el usuario lo permite o no. Se ha implementado en el método que
trata los mensajes de petición de archivos.
51
3.7 Revisión del borrado de amigos
Descripción
52
Capítulo 4 - Resultados
En este último capítulo se tratarán tareas que podrían llevarse a cabo para la
mejora de este trabajo seguido de unas conclusiones acerca de si se han cumplido
los objetivos y qué ha supuesto este proyecto.
A lo largo del desarrollo han ido surgiendo nuevas ideas y mejoras que
podrían ser interesantes para este trabajo pero que han sido guardadas para su
implementación en caso de disponer del tiempo necesario para llevarlas a cabo.
Algunas sí se han podido ejecutar, pero otras han tenido que ser descartadas. Para
comenzar el último capítulo quiero exponer estas ideas de cara a un futuro proyecto
que retome el nuestro o como recordatorio para mí mismo si retomara el desarrollo
más adelante, ya que se trata de una aplicación muy útil y de la máxima confianza
para mí.
53
Ellos requerían hacer un estudio profundo de su estructura o bien encontrar alguna
librería que pudiera ser utilizada en Android. Entre otros formatos, estaba pensado
poder previsualizar mp4, avi, docx, xlsx y pptx.
54
obtuvo el mismo resultado que con solo un cliente nuevo. Tras investigar y tratar
de subsanar esto, decidí conformarme con el comportamiento conseguido hasta el
momento. He de dejar esta tarea para el futuro.
4.2 Conclusiones
55
selección dedicando tiempo de estudio a su posible complejidad para obtener las
idóneas.
4.3 Conclusions
This project has meant a different challenge from I was used to in the
degree. I was supposed to take a project that was developed by other mates,
adapting myself to not only one but two new technologies unknown for me and that
they provided a great choice for “peer-to-peer” communications. I had to
understand the concept in order to move on, spending the time necessary to get
the paradigm one of these technologies was built over.
The main objectives have been achieved, to provide any kind of functionality
that could be relevant actually and that it was present in a modern mobile
application. I have had to select some of them among every that has emerged,
spending some time studying their possible complexity in order to get those that
were appropriate.
56
and make it strong enough has been a real challenge. Parallelization, queues,
transmission channels management, integration as a service, some control over
CPU usage and many other things have added an important value that was missing
in this topic.
57
BIBLIOGRAFÍA
59
https://sites.google.com/site/swcuc3m/home/android/portada.
[15] Source Android, «Android Open Source Proyect-AOSP,» [En línea]. Available:
https://source.android.com/.
[22] Academia Android, «IDE: Entornos Integrados de Desarrollo para Android,» [En
línea]. Available: https://academiaandroid.com/ide-entornos-integrados-de-
60
desarrollo-para-android/.
61
https://andro4all.com/2018/08/versiones-android-historia.
62
CRÉDITOS
63