嗨首先原谅我的英语不好。我的Android应用程序中有一个名为Class A的类,其内容如下:
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();
}
当我编译我的项目,然后将我的项目apk发送到apktool进行反编译时,apktool反编译A类如下:
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反编译我的项目时apk更改全局变量排序为字母顺序。 我如何强制apktool不按字母顺序对全局变量进行排序,并在反编译我的apk时保持主要的全局变量排序?
感谢您的回答。
答案 0 :(得分:1)
这不是apktool的错。与Java类文件格式不同,Android dex格式要求字段按排序顺序显示,这意味着一旦编译代码,源级别排序就会丢失。
来自https://source.android.com/devices/tech/dalvik/dex-format#class-data-item
定义的静态字段,表示为编码元素序列。 字段必须按字段_idx按递增顺序排序。
字段标识符列表。这些是此文件引用的所有字段的标识符,无论是否在文件中定义。 此列表必须排序,其中定义类型(通过type_id索引)是主要顺序,字段名称(通过string_id索引)是中间顺序,类型(通过type_id索引)是次要顺序。该列表不得包含任何重复的条目。