1. setColor(-16777216)
反编译的代码中会有很多setColor(int)
的情况,比如setColor(-16777216)
,这个值比较特别,能轻易的查到Android文档中对这个整数的定义:
public static final int BLACK.
Added in API level 1
Constant Value: -16777216 ( 0xff000000).
也就是说setColor(-16777216)
中-16777216
对应的颜色是BLACK(0xff000000),那么其他系统未定义成某个颜色名的值呢?
1 | -16777216 对应 0xff000000 |
2.MeasureSpec.makeMeasureSpec(xx, int)
反编译的代码中MeasureSpec.makeMeasureSpec(xx, int)
的第二个参数是个int
类型的数,这个比较简单,直接看文档或者源码即可找到:
源码:
1 |
|
文档:
1 | public static final int AT_MOST |
则对于:MeasureSpec.makeMeasureSpec(xx, 0)
我们应该修改为MeasureSpec.makeMeasureSpec(xx, View.MeasureSpec.UNSPECIFIED)
其他依次类推。
3.setVisibility(int)
这个同[2],看文档或者看源码:
1 | public static final int VISIBLE = 0; |
则对于:setVisibility(0)
==> setVisibility(View.VISIBLE)
其他依次类推。
4.new Runnable()...
反编译的代码中:
1 | new Runnable() { |
可直接去掉成员变量:
1 | new Runnable() { |
5.new Handler()...
同[4]
,直接去掉成员变量:
1 | new Handler() { |
6.context.getSystemService("layout_inflater")
直接看源码即可:
1 | public static final String POWER_SERVICE = "power"; |
则context.getSystemService("layout_inflater")
==> context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
其他依次类推。
7.intent.setFlags(335544320)
先看源码:
1 | Intent implements Parcelable, Cloneable { |
那么对于intent.setFlags(int);
中 int
值是上面四种之一的话就比较简单,例如:
intent.setFlags(536870912);
==> intent.setFlags(PendingIntent.FLAG_NO_CREATE);
但是遇到一个比较特别的:intent.setFlags(335544320);
源码里根本没有这样一个值啊,其实intent.setFlags( A | B )
是可以使用|(或运算)
的,那么:
1 |
|
从而:
intent.setFlags(335544320);
==>
intent.setFlags( FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP )
或者
intent.setFlags( FLAG_RECEIVER_FOREGROUND | FLAG_ACTIVITY_CLEAR_TOP )
从 Codota 中搜索intent.setFlags(335544320);
看到的是第一种情况,结合intent.setFlags()
的用法,应该也是第一种情况。
相关资料:
PS:
本文已整理到Github上,欢迎提交更多代码!