如何防止apktool排序全局变量?

时间:2017-09-14 18:17:34

标签: decompiling decompiler apktool

嗨首先原谅我的英语不好。我的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时保持主要的全局变量排序?

感谢您的回答。

1 个答案:

答案 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索引)是次要顺序。该列表不得包含任何重复的条目。