2017-09-14 4 views
0

Hallo zuerst Verzeihen Sie mir für mein schwaches Englisch. Ich habe eine Klasse mit dem Namen der Klasse A in meiner Android-Anwendung mit dem Inhalt unter:Wie verhindern Sie, dass apktool globale Variablen sortiert?

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(); 


} 

, wenn ich mein Projekt kompilieren und dann meinem Projekt apk geben apktool es zu dekompilieren, apktool dekompiliert Klasse A wie unten:

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 wenn decompile mein Projekt apk Bestellung globalen Variablen verändert, um alphabetisch. Wie kann ich erzwingen, dass apktool globale Variablen nicht in alphabetischer Reihenfolge sortiert und die globalen globalen Variablen bei der Dekompilierung meiner APK nicht ändert?

danke für Ihre Antworten.

Antwort

1

Dies ist nicht die Schuld von apktool. Im Gegensatz zum Format der Java-Klassendatei erfordert das Android-Format "dex", dass Felder in sortierter Reihenfolge angezeigt werden. Dies bedeutet, dass die Sortierung auf Quellenebene verloren geht, sobald Sie Ihren Code kompilieren.

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

die definierten statischen Felder, als eine Sequenz von codierten Elementen dargestellt. Die Felder müssen nach Feld_IDX in aufsteigender Reihenfolge sortiert werden.

Feldbezeichnerliste. Dies sind Bezeichner für alle Felder, auf die sich diese Datei bezieht, unabhängig davon, ob sie in der Datei definiert sind oder nicht. Diese Liste muss sortiert werden, wobei der definierende Typ (nach type_id index) die Hauptordnung ist, der Feldname (nach string_id index) ist die Zwischenreihenfolge und der Typ (nach type_id index) ist die Nebenordnung. Die Liste darf keine doppelten Einträge enthalten.