2017-09-14 65 views
0

嗨,先请原谅我的弱小英语。我有一个在我下面的内容Android应用程序命名为A类等级:如何防止apktool排序全局变量?

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

这不是apktool的错。与Java类文件格式不同,Android dex格式要求字段按排序顺序显示,这意味着只要您编译代码,源代码级排序就会丢失。

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

所定义的静态字段,表示作为编码元素的序列。 这些字段必须按升序以field_idx排序。

字段标识符列表。这些是由该文件引用的所有字段的标识符,不管是否在文件中定义。 此列表必须按排序,其中定义类型(按type_id索引)是主要顺序,字段名称(按string_id索引)是中间顺序,而类型(按type_id索引)是次要顺序。该列表不得包含任何重复的条目。