[BATCH] [ANDROID] A ver si se podria hacer esto... :D

Iniciado por erikcatala, 31 Mayo 2013, 03:13 AM

0 Miembros y 1 Visitante están viendo este tema.

erikcatala

Tengo una duda... se muy poco de batch y esto se me va de las manos.

El caso es que quería hacer esto:

Primero un poco de información, este bat seria para poder deodexizar mi ROM de android, he probado miles de bats que hacen esto pero ninguna funciona. :(

Para deodexizar la ROM necesito hacer una cosas y una de ellas es esta:

1.Copiar toda la carpeta framework y app en el pc (esto lo sabría hacer)

2.Deodexizarlas así:

java -Xmx1024m -jar baksmali.jar -c core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:com.lge.core.jar -x (Nombre de la apk.apk)

Esto cambia solo al final con cada nombre de la apk

Citarjava -Xmx1024m -jar smali.jar out -o classes.dex

Este nunca cambia, después de hacer esto crea un archivo llamado "classes.dex" que tendría que ponerlo en la apk o jar previamente citada.

Este proceso es para apk seria los mismo para framework (.jar) pero poniendo .jar en vez de .apk


El caso es que tendría que hacer esto unas 200 veces con diferentes nombres pero de forma automática, no uno a 1 porque tardaría demasiado


Si queréis os puedo subir algún archivo para que veías como van los tiros ;)

Eleкtro

#1
Hola,
Antes de nada, usa títulos descriptivos, no cosas como "ayuda" o "¿como se puede hacer esto?".






Utiliza un FOR para recorrer los archivos que quieras y efectuar cada acción con cada archivo del recorrido.

For %%# in ("C:\*.*") do (Echo %%#)

For %%# in ("C:\*.apk") do (
   java -Xmx1024m -jar baksmali.jar -c core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:com.lge.core.jar -x "%%~f#"
)


...Lo mismo si necesitas automatizar algo con las carpetas, utiliza un FOR /D.

Saludos








erikcatala

#2
Gracias voy a mirar un poco para que Sirve "FOR"  ;-)

EDIT: Ya me lo he mirado un poco y ya se para que sirve.

A ver si me aclaro con el código:

Esto sirve para buscar todos los *.apk en C:\ y la variable se para que sirve pero no se explicarlo...

For %%# in ("C:\*.apk") do

Y esto es para la variable no?

%%~f#

Lo que no entiendo es porque pones las ()


Una ultima cosa esto solo lo haría 1 vez con cada archivo no?

Eleкtro

El For procesa los archivos uno a uno y efectua las ordenes que le indiques a ese archivo, y luego al siguiente archivo, y así hasta que se complete la serie de archivos encontrados/procesados.

En la variable (en este caso "%%#", puedes darle otro nombre siempre que cumpla el patrón permitido como "%%a") sirve para almacenar el nombre del archivo que se está procesando en ese momento,
La variable la puedes expandir para obtener información concreta sobre el archivo, aunque en este caso solo interesa obtener el nombre completo, así que no hay que expandir, el "~f" lo puse como ejemplo visual pero no es necesario aquí.

Los paréntesis son los operadores de agrupación, y sirven para agrupar un conjunto de ordenes,
"(Echo hola)" sirve igual que "Echo hola", pero en el For uso los paréntesis porque es la manera correcta de programar un For, tanto un For como un If.

Si ves códigos así por internet, están muy mal:
if "a" == "b" echo si & pause else echo no

Al no estar agrupado no se define el limite del grupo y el "Else" no se va a procesar.
Hay que hacerlo así:
if "a" == "b" (echo si & pause) else (echo no)

Y nada, después de esta pequeña clase... te aconsejo que sigas leyendo más, el For es "grande" para alguien que está empezando.

Saludos








erikcatala

Me pareze a mi que voy a usar mucho el "FOR" :P

Ya he empezado a escribir el código a ver que te parece:

Copiar archivos del teléfono:

@ECHO OFF
cd Working
adb wait-for-device
adb pull /system/app "C:\Working\App"
cd Working
rmdir App /S /Q
md App
exit


Deodexizar:
cd "C:\Working\App"

For %%# in ("C:\Working\App*.apk") do ( java -Xmx1024m -jar baksmali.jar -c core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:com.lge.core.jar -x "%%~f#" )

java -Xmx1024m -jar smali.jar out -o classes.dex

Mover classe.dex a la apk o jar citado anteriormente

del classes.dex



Esto no se para que sirve pero lo encontre en un bat que hacia lo mismo:
rmdir App /S /Q
md App

Eleкtro

Me parece bien el código,
para mover archivos y carpetas puedes usar el comando "Move".

Cita de: erikcatala en 31 Mayo 2013, 17:00 PM
Esto no se para que sirve pero lo encontre en un bat que hacia lo mismo:
rmdir App /S /Q
md App

Escribe esto en la consola y sabrás para que sirven:

rmdir /?
md /?


PD: Porfavor, no uses rmdir sin saber para que sirve, es "peligroso" si se usa mal.

Saludos.








erikcatala

Vale te haré caso  ;D

Ya se para que sirve cada cosa, no me acordaba que poniendo X /? salia la información, espero no olvidarme.

Pues ya tengo el código casi echo, solo me falta saber como copiar el classes.dex dentro de la apk y el jar ;)

Gracias por todo, ya es la 2 vez que me ayudas a crear mi bat  :silbar:

erikcatala

#7
Nadie sabe como puedo hacerlo?

Ya tengo todo el código escrito, solo me falta saber eso... :(

PD: Una cosa...

Esta parte aun tengo dudas :S

For %%# in ("C:\Working\App*.apk") do ( java -Xmx1024m -jar baksmali.jar -c core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:com.lge.core.jar -x "%%~f#" )

java -Xmx1024m -jar smali.jar out -o classes.dex


La primera parte ya esta clara pero la segunda? eso lo hará cada vez con cada archivo? Osea, cada vez que se haga el la primera parte se hará la segunda parte seguidamente?
Al igual que borrar classes.dex, lo borrara cada vez?

Eleкtro

Cita de: erikcatala en  1 Junio 2013, 03:11 AM
La primera parte ya esta clara pero la segunda? eso lo hará cada vez con cada archivo? Osea, cada vez que se haga el la primera parte se hará la segunda parte seguidamente?
Al igual que borrar classes.dex, lo borrara cada vez?

What?

De verdad no he entendido nada,
lo que está entre parentesis se realiza cada vez, con cada archivo, la línea del final ...No.

Cita de: erikcatala en 31 Mayo 2013, 17:25 PM
solo me falta saber como copiar el classes.dex dentro de la apk y el jar ;)

He leido tu MP, pero ni manejo Java ni manejo Android, esto ya no pertenece a Batch, pregúntalo en la sección correspondiente.

Saludos!








erikcatala

Cita de: EleKtro H@cker en  6 Junio 2013, 02:37 AM
What?

De verdad no he entendido nada,
lo que está entre parentesis se realiza cada vez, con cada archivo, la línea del final ...No.

Es que es un poco dificil de explicar seria asi:

Este codigo le llamamos #1

For %%# in ("C:\Working\App*.apk") do ( java -Xmx1024m -jar baksmali.jar -c core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:com.lge.core.jar -x "%%~f#" )

Este #2:

java -Xmx1024m -jar smali.jar out -o classes.dex

Y copiar el archivo .dex el #3


Y cuando se ejecute el bat tendria que hacer esto:

Ejecutar el #1 codigo solo 1 vez, despues el #2 una vez, el #3 otra vez mas.

Siempre 1 vez y después otra vez cambiando el nombre del archivo.


Esto hace lo que quiero, pero ni lo entiendo y algunas cosas no me sirven...

@echo off
ECHO WELCOME!
set x=%1
ECHO Deodexing apk..
java -Xmx512m -jar baksmali.jar -x apks/%x%.odex
xcopy "%cd%\apks\%x%.apk" "%cd%\working"
java -Xmx512M -jar smali.jar out/ -o classes.dex
xcopy "classes.dex" "%cd%\working\build"
cd working
7za x -o"build" %x%.apk >> Log-APK.txt
xcopy "7za.exe" "%cd%\build"
cd build
7za a -tzip Done.apk * -mx5 >> Log-APK.txt
ren Done.apk Done.zip
7za d Done.zip 7za.exe >> Log-APK.txt
ren Done.zip Done.apk
cd..
cd..
xcopy "%cd%\working\build\Done.apk" "deodexed"
del classes.dex
rmdir out /S /Q
cd deodexed
ren Done.apk %x%.apk
cd..
cd working
del %x%.apk
rmdir build /S /Q
md build
cd..
ECHO DEODEXED SUCCESSFULLY.
exit