3 votes

Quelle est la bonne méthode pour exporter manuellement un fichier apk ?

Je suis à la recherche d'une méthode simple et appropriée pour indexer un fichier apk. J'ai un fichier apk mis à jour d'une ROM avec lequel je veux remplacer l'ancien et il est situé dans le répertoire /system-priv répertoire. L'ancienne version de l'apk contient l'élément .odex mais j'ai compris que je ne pouvais pas l'écraser directement, puisque je ne peux pas utiliser l'ancien fichier .odex (c'est pourquoi j'ai besoin d'odex d'abord), sinon je serai coincé avec des plantages d'applications ou des boucles de démarrage.

J'ai essayé de chercher des méthodes en ligne, mais l'une d'entre elles n'est pas satisfaisante :

  1. Le présent un qui implique l'utilisation d'un dexopt-wrapper.bin semble être dépassé car le binaire n'est pas supporté, j'ai cette erreur qui s'affiche :

     error: dexopt-wrapper error: only position independent executables (PIE) are supported.
  2. En deuxième qui est longue et dont les liens vers d'autres ressources nécessaires ont disparu, et qui n'est pas compatible avec mon système.

  3. Les seules possibilités prometteuses sont les suivantes un qui utilise Auto Odexer Script, mais actuellement je lance des problèmes adb et il semble qu'il utilise le même binaire dexopt-wrapper qui me donnait des erreurs dans le terminal.

Il existe des outils/méthodes permettant de réaliser l'ensemble du système en une seule fois, mais je n'ai pas besoin que l'ensemble du système soit réexaminé. Je veux créer personnellement une "mise à jour" odexée .apk à partir de la ROM extraite.

Update

J'ai mis à jour le binaire wrapper (maintenant PIE) et devrait être compatible, mais je rencontre toujours cette erreur :

--- 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:/ #

et le résultat est un .odex dans le répertoire. Quelqu'un peut-il m'indiquer où je me trompe ?

4voto

Ju Tutt Points 414

Crédits à com.modaco.odexme Lien xda

Théoriquement, vous ne devriez avoir besoin que de votre appareil Android pour effectuer un odex manuel. J'ai fini par utiliser à la fois mon smartphone (fonctionnant sous KitKat 4.4) et mon PC, comme expliqué plus loin.

J'ai réussi à odexer les apks en suivant les étapes suivantes :

1. créer un /dir/odex sur votre appareil Android

2. enregistrer le script suivant sous odex.sh において /dir/odex , lui donner l'autorisation d'exécution 777

#!/system/bin/sh

cd /dir/odex

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

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

# step 2 - did we succesfully odex?
if [ -f `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` ]
then
    # step 3 - remove the classes.dex from the apk
    ./zip -d $filename classes.dex

    # step 4 - zipalign, just in case
    ./zipalign -f -v 4 $filename $filename.new
    mv $filename.new $filename
fi

done;

3. obtenir les binaires suivants à partir de com.modaco.odexme.apk\assets

dexopt-wrapper zip zipalign

les mettre en place /dir/odex et lui donner le droit d'exécution 777

4. copier le(s) .apk(s) à partir duquel (desquels) vous souhaitez effectuer l'indexation /system/app o /system/priv-app a /dir/odex

5.Ouvrir Terminal , cd à /dir/odex et exécuter ./odex.sh

À ce stade, j'ai eu un problème avec zipalign qui n'a pas pu LINK EXECUTABLE - cannot locate symbol... but nevertheless script partially executed and got odex(es) sitting next to apk(s) in our dir.

6. j'ai donc dû recourir au PC, copier l'apk original sur le PC, l'ouvrir avec WinRar ou 7zip, supprimer manuellement classes.dex entonces zipalign et remettre l'apk "deodexed" sur l'appareil Android.

7. avec un explorateur de fichiers, placez les fichiers .odex et .apk nouvellement créés dans le répertoire de l'explorateur de fichiers. /system/app o /system/priv-app (faites d'abord une sauvegarde de l'apk original). S'il ne parvient pas à écrire, montez le système en tant que rw. Donner les permissions 644 comme à toutes les autres applications et odex dans le répertoire.

8. vous pouvez maintenant supprimer le dex correspondant dans /data/dalvik-cache

9. redémarrage (ou redémarrage progressif)

10. profitez de votre nouvelle application

J'ai réussi à odexer LGEIME.apk un clavier modifié pour mon G2, et GoogleDrive.apk Je l'ai déplacé dans /system/app pour économiser de l'espace sur la partition /data car les versions plus récentes sont 5.0+ seulement. J'étais sceptique à propos de GoogleDrive parce qu'il était multi-dex, en fait l'apk contenait classes.dex y classes2.dex Il s'est avéré que je devais retirer seulement classes.dex de l'apk et laisser classes2.dex à l'intérieur de l'apk.

crédits à com.modaco.odexme Lien xda

YMMV

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X