Skip to content
Snippets Groups Projects
Commit 8e0bc7fc authored by Loloncio's avatar Loloncio
Browse files

Cambios en Final

Bug en Final donde el indicador de carga no aparece medio arreglado.

Cambio en final para indicar los requisitos del boton isntalar y mostrar la salida de este.

Actualizado TODO
parent 310dc644
No related branches found
No related tags found
No related merge requests found
......@@ -8,10 +8,10 @@ android:required="false" />
android:name="android.hardware.telephony"
android:required="false" />
<permission
android:name="android.permission.ACCESS_MEDIA_LOCATION"
android:name="android.permission.ACCESS_COARSE_LOCATION"
android:protectionLevel="dangerous"
android:permissionGroup="android.permission-group.STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
android:permissionGroup="android.permission-group.UNDEFINED"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
......
......@@ -55,19 +55,26 @@ El proyecto constará de una aplicación Python y una app Android. La app Androi
<ul>
<li>Añadir boton para ir a vista final</li>
</ul>
3. Final.py
3. Listas.py
<ul>
<li>Debe comprobar que haya un dispositivo adb conectado y permitir usar el boton de instalar o no</li>
<li>Hay que mostrar la salida del intento de instalación correctamente</li>
<li>Si estamos en las opciones 2 a 5, no funciona el botón confirmar</li>
</ul>
4. Final.py
<ul>
<li>Arreglar bug por el cual a veces no se muestra nada hasta que no se ha compilado el apk</li>
<li>Aquí podría ir un emulador android o un botón para abrir uno si fuese posible</li>
</ul>
4. ADB.py
5. Firmadas.py
<ul>
<li>Mostrará opciones para hacer con apps firmadas</li>
<li>Comprobar si se conceden permisos dangerous a 2 apps firmadas con mismo certificado</li>
<li>Comprobar si se conceden permisos signature a 2 apps firmadas con mismo certificado</li>
<li>Comprobar que solo se conceden permisos signature a apps con el mismo dertificado</li>
</ul>
6. ADB.py
<ul>
<li>Mostrará todos los permisos del dispositivo conectado, de forma similar a Defecto.py</li>
</ul>
5. DefectoContr.py
<ul>
<li>Permitirá ir a la vista Final</li>
......
......@@ -33,6 +33,15 @@ class FinalContr():
manifest = self.modeloManifest.getManifest1+nuevoProtection+self.modeloManifest.getManifest2
self.modeloManifest.setManifest(manifest)
return
def creaManifestGrupos(self,permiso, grupos):
nuevoGrupo = '\n<permission\
\nandroid:name="android.permission.'+permiso+\
'"\nandroid:protectionLevel="'+self.modeloPermisos.getProtection(permiso).lower()+\
'"\nandroid:permissionGroup="android.permission-group.'+grupos[0]+'",android.permission-group."'+grupos[2]+'"/>'\
'\n<uses-permission android:name="android.permission.'+permiso+'"/>'
manifest = self.modeloManifest.getManifest1()+nuevoGrupo+self.modeloManifest.getManifest2()
self.modeloManifest.setManifest(manifest)
return
def compilar(self):
manifest = self.modeloManifest.getManifest()
rutaManifest = os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../Android/App-Perm/app/src/main/AndroidManifest.xml")
......
......@@ -27,94 +27,119 @@ class final(ctk.CTkToplevel):
self.geometry("1280x720")
self.minsize(width=1280,height=720)
self.configure(fg_color = "#1E1E1E")
self.canvas = tk.Canvas(self, width=100, height=100,bg="#1E1E1E", highlightthickness=0)
self.canvas.pack(anchor="center", pady = 100)
self.update = self.draw().__next__
self.after(100, self.update)
self.title("APK")
# Fuentes que usaremos para los botones y etiquetas
titleFont = ctk.CTkFont(family="Inter", size=30, weight="normal")
textFont = ctk.CTkFont(family="Inter", size=20, weight="normal")
opt = int(opt)
permiso = str(permiso)
self.realizando = ctk.CTkLabel(self,text_color="white", font= titleFont, corner_radius=10)
self.realizando.configure(text="Creando archivo AndroidManifest.xml...")
# Canvas y mensaje para mostrar el progreso
canvas = tk.Canvas(self, width=100, height=100,bg="#1E1E1E", highlightthickness=0)
self.realizando = ctk.CTkLabel(self,text_color="white",text="Creando archivo AndroidManifest.xml...",
font= titleFont, corner_radius=10)
canvas.pack(anchor="center", pady = 100)
self.realizando.pack(pady = 50, padx = 30)
thread = threading.Thread(target=self.compila)
if(opt == 1):
# Hacemos que el canvas se recargue periodicamente para crear el efecto de que gira
self.update = self.draw(canvas).__next__
self.after(100, self.update)
# Zona para poner botones de ir al menú, abrir la ubicación del apk o instalar el apk
frameBotones = ctk.CTkFrame(self, fg_color="#1E1E1E")
# Abre la ubicación del apk
botonAbrir = ctk.CTkButton(frameBotones, text = "Abrir ruta a apk", command = self.motrarApk,
font= textFont, fg_color="#D9D9D9", text_color="black",width = 170, height=60)
# Instala el apk
botonInstalar = ctk.CTkButton(frameBotones, text = "Instalar apk",command = self.instalaApk,
font = textFont, fg_color="#D9D9D9", text_color="black", width=170, height=60)
# Volvemos al menú
botonVolver = ctk.CTkButton(frameBotones, text="Menu", command = self.volver, font = textFont, fg_color="#D9D9D9",
text_color="black", width=170, height=60)
# Salida del botón instalar y mensaje con los requisitos para usarlo
self.resultado = ctk.CTkLabel(self,text_color="white", text="Para usar el botón instalar debes tener conectado\
un dispositivo con depuración USB habilitada y Android 13 o superior", font= textFont,
wraplength=650)
# Desactivamos abrir e instalar mientras se compila la apk
botonAbrir.configure(state="disabled")
botonInstalar.configure(state="disabled")
# Hilo para la compilación
thread = threading.Thread(target=self.compila, kwargs={'canvas': canvas, 'botonAbrir': botonAbrir,
'botonInstalar': botonInstalar})
# En función de la opción elegida en el menú compilamos una cosa u otra
self.opt = int(opt)
permiso = str(permiso)
if self.opt == 1:
grupos = list(grupos)
self.creaManifestGrupos(permiso, grupos)
thread.start()
elif opt == 2:
elif self.opt == 2:
grupos = list(grupos)
self.creaManifestGrupos(permiso, grupos)
thread.start()
elif opt == 3:
elif self.opt == 3:
protection = str(protection)
self.creaManifestProtection(permiso, protection)
thread.start()
elif opt == 4:
elif self.opt == 4:
grupos = list(grupos)
self.creaManifestGrupos(permiso, grupos)
self.creaManifestGrupo(permiso, grupos)
thread.start()
elif opt == 5:
elif self.opt == 5:
grupos = list(grupos)
self.creaManifestGrupos(permiso, grupos)
self.creaManifestGrupo(permiso, grupos)
thread.start()
frameBotones = ctk.CTkFrame(self, fg_color="#1E1E1E")
botonAbrir = ctk.CTkButton(frameBotones, text = "Abrir ruta a apk", command = self.motrarApk, font= textFont, fg_color="#D9D9D9", text_color="black",width = 150, height=60)
botonInstalar = ctk.CTkButton(frameBotones, text = "Instalar apk",command = self.instalaApk, font = textFont, fg_color="#D9D9D9", text_color="black", width=150, height=60)
botonVolver = ctk.CTkButton(frameBotones, text="Menu", command = self.volver, font = textFont, fg_color="#D9D9D9", text_color="black", width=150, height=60)
self.resultado = ctk.CTkLabel(self,text_color="white", text="", font= titleFont, corner_radius=10)
# Colocamos los botones
frameBotones.pack(pady = 10, padx = 10)
botonVolver.grid(row = 0, column = 0, padx = 10, pady =10)
botonAbrir.grid(row = 0, column = 1, padx = 10, pady =10)
botonInstalar.grid(row = 0, column = 2, padx = 10, pady =10)
self.resultado.pack(pady = 50, padx = 30)
# Métodos para cerrar la ventana y volver al menú
def cerrar(self):
self.parent.parent.destroy()
def volver(self):
self.parent.aMenu()
self.destroy()
# Le pedimos al controlador que cree un Manifest para modificar el grupo de un permiso
def creaManifestGrupos(self, permisso, grupos):
if(self.opt == 2):
self.controlador.creaManifestGrupos(permisso, grupos)
else:
self.controlador.creaManifestGrupo(permisso, grupos)
return
# Le pedimos al controlador que cree un Manifest para modificar el protection level de un permiso
def creaManifestProtection(self, permiso, protection):
self.controlador.creaManifestProtection(permiso, protection)
return
def compila(self):
# Le pedimos al compilador que compile el apk y reactivamos los botones de abrir e instalar al terminar
def compila(self, canvas, botonAbrir, botonInstalar):
self.realizando.configure(text="Compilando apk...")
self.controlador.compilar()
self.DONE = True
self.realizando.configure(text="Apk creada")
self.canvas.destroy()
botonAbrir.configure(state="normal")
botonInstalar.configure(state="normal")
canvas.destroy()
return
# Abrimos el explorador de archivos donde se encuentra el apk
def motrarApk(self):
self.controlador.abrirExplorador()
# Intentamos instalar el apk y mostramos el resultado
def instalaApk(self):
salida = self.controlador.instalaApk()
print(salida)
if salida[0] != "":
self.resultado.configure(text = salida[0])
else:
if salida[1] != "":
self.resultado.configure(text = salida[1], text_color="red")
def draw(self):
else:
self.resultado.configure(text = salida[0])
# Recargamos el icono de carga rotado para que de el efecto de que gira
def draw(self, canvas):
imagePath = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../assets/cargando.png")
image = Image.open(imagePath)
image = image.resize([100,100])
angle = 0
while not self.DONE:
tkimage = ImageTk.PhotoImage(image.rotate(angle))
canvas_obj = self.canvas.create_image(50, 50
canvas_obj = canvas.create_image(50, 50
, image=tkimage)
self.after_idle(self.update)
yield
self.canvas.delete(canvas_obj)
canvas.delete(canvas_obj)
angle -= 10
angle %= 360
time.sleep(0.02)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment