2017-09-14 6 views
0

Salut d'abord Pardonnez-moi pour mon faible anglais. J'ai une classe nommée classe A dans mon application android avec le contenu ci-dessous:Comment empêcher apktool de trier les variables globales?

public class A { 


public static final SomeClass1 variable_C = new SomeClass1(); 
public static final SomeClass1 variable_A = new SomeClass1(); 
public static final SomeClass1 variable_D = new SomeClass1(); 
public static final SomeClass1 variable_B = new SomeClass1(); 


} 

quand je compile mon projet, puis donner mon projet apk à apktool à décompiler, apktool Décompile classe A comme ci-dessous:

public class A { 


public static final SomeClass1 variable_A = new SomeClass1(); 
public static final SomeClass1 variable_B = new SomeClass1(); 
public static final SomeClass1 variable_C = new SomeClass1(); 
public static final SomeClass1 variable_D = new SomeClass1(); 

}

apktool quand décompiler mon projet apk change variables globales ordonnant à l'ordre alphabétique. Comment puis-je forcer apktool à ne pas trier les variables globales dans l'ordre alphabétique et à garder les variables globales principales en ordre lors de la décompilation de mon apk?

merci pour vos réponses.

Répondre

1

Ce n'est pas la faute d'apktool. Contrairement au format de fichier de classes Java, le format Android dex exige que les champs apparaissent dans l'ordre trié, ce qui signifie que l'ordre au niveau de la source est perdu dès que vous compilez votre code.

De https://source.android.com/devices/tech/dalvik/dex-format#class-data-item

les champs statiques définis, représenté comme une suite d'éléments codés. Les champs doivent être triés par field_idx dans l'ordre croissant.

liste d'identificateurs de champ. Ce sont des identifiants pour tous les champs référencés par ce fichier, qu'ils soient définis dans le fichier ou non. Cette liste doit être triée, où le type définissant (par type_id index) est l'ordre majeur, le nom du champ (par l'index string_id) est l'ordre intermédiaire et le type (par type_id index) est l'ordre mineur. La liste ne doit contenir aucune entrée en double.