3 votos

¿Cuál es el método adecuado para odexar manualmente un archivo apk?

Estoy buscando un método adecuado y simple para odexar un archivo apk. Tengo un archivo apk actualizado de una ROM con el que quiero reemplazar uno antiguo, y está ubicado en el directorio /system-priv. El apk antiguo tiene el archivo .odex, pero me di cuenta de que no puedo sobrescribirlo directamente ya que no puedo usar el antiguo .odex (por lo tanto necesito odexar primero), de lo contrario me quedaré con bloqueos de aplicaciones o bucles de arranque.

He intentado buscar métodos en línea pero no son satisfactorios de ninguna manera:

  1. Este uno que implica el uso de un dexopt-wrapper.bin parece estar muy desactualizado ya que el binario no es compatible, me aparece este error:

     error: dexopt-wrapper error: only position independent executables (PIE) are supported.
  2. El segundo que es extenso y los enlaces a otros recursos necesarios ya no están disponibles, y de alguna manera no es compatible con mi sistema.

  3. El único prometedor uno que utiliza Auto Odexer Script, pero actualmente tengo problemas con adb y también parece que utiliza el mismo binario dexopt-wrapper que me estaba dando errores en la terminal.

Existen herramientas/métodos para hacer todo el sistema a la vez, pero no necesito todo el sistema re-odexado. Quiero crear personalmente un archivo .apk odexado "actualizado" a partir de la ROM extraída.

Actualización

Actualicé el binario wrapper (ahora PIE) y debería ser compatible, sin embargo aún encuentro este error:

--- BEGIN '/sdcard/app/A.apk' (bootstrap=0) ---
--- waiting for verify+opt, pid=17200
--- would reduce privs here
execl(/bin/dexopt) failed: No such file or directory
--- END '/sdcard/app/A.apk' --- status=0x4300, process failed
1|mido:/ #

y el resultado es un archivo .odex vacío en el directorio. ¿Alguien puede señalar dónde me estoy equivocando aquí?

4voto

Ju Tutt Puntos 6

Créditos a com.modaco.odexme enlace de xda

Teóricamente solo necesitarías tu dispositivo Android para odexear manualmente, terminé usando tanto el teléfono inteligente (con KitKat 4.4) como el PC como se explica más adelante.

Logré odexear apks con los siguientes pasos:

1.Crea un /dir/odex en tu dispositivo Android

2.Guarda el siguiente script como odex.sh en /dir/odex, dale permiso de ejecución 777

#!/system/bin/sh

cd /dir/odex

for filename in `find . -name '*.apk'`
do

# paso 1 - odexear el apk
./dexopt-wrapper $filename `echo $filename | sed 's/\(.*\.\)apk/\1odex/'`

# paso 2 - ¿odexeamos exitosamente?
if [ -f `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` ]
then
    # paso 3 - eliminar el classes.dex del apk
    ./zip -d $filename classes.dex

    # paso 4 - zipalign, por si acaso
    ./zipalign -f -v 4 $filename $filename.new
    mv $filename.new $filename
fi

done;

3.Obtén los siguientes archivos binarios de com.modaco.odexme.apk\assets

dexopt-wrapper zip zipalign

ponlos en /dir/odex y dales permiso de ejecución 777

4.Copia los .apk(s) que deseas odexear desde /system/app o /system/priv-app a /dir/odex

5.Abre Terminal, navega a /dir/odex y ejecuta ./odex.sh

En este punto tuve un problema con zipalign que no podía LINK EXECUTABLE - no se puede localizar el símbolo... pero de todos modos el script se ejecutó parcialmente y obtuve odex(es) junto a apk(s) en nuestro directorio.

6.Así que tuve que recurrir al PC, copiar el apk original al PC, abrirlo con WinRar o 7zip, eliminar manualmente classes.dex, después hacer zipalign, y volver a poner el apk "deodexeado" en el dispositivo Android.

7.Ahora con un explorador de archivos coloca los nuevos .odex y .apk en /system/app o /system/priv-app (haz una copia de seguridad del apk original primero). Si falla al escribir, monta el sistema como rw. Dale permiso 644 a ambos como a los demás apks y odex en el directorio.

8.Ahora puedes eliminar el dex correspondiente en /data/dalvik-cache

9.Reinicia (o reinicio suave)

10.Disfruta de tu app recién odexeada

Logré odexear LGEIME.apk, un teclado modificado para mi G2, y GoogleDrive.apk, lo moví a /system/app para ahorrar espacio en la partición /data porque las versiones más nuevas son solo para 5.0+. Estaba escéptico sobre GoogleDrive porque era multi-dex, de hecho el apk contenía classes.dex y classes2.dex: resultó que solo tuve que quitar classes.dex del apk y dejar classes2.dex dentro del apk.

créditos a com.modaco.odexme enlace de xda

Puede variar según tu dispositivo (YMMV)

0 votos

Gracias, lo intentaré cuando llegue a casa y te daré mi opinión, mientras tanto +1

0 votos

Lo intenté pero no está funcionando

0 votos

Para mí funciona, ni siquiera tengo que reiniciar para usar la aplicación recién odexed... También encontré un archivo binario zipalign estático para poder hacer todo en el teléfono inteligente

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X