Android反編譯APK -- 錯(cuò)誤代碼還原

1.?setRequestedOrientation(1);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

2.mWebView.setScrollBarStyle(0);

? ?setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY)

3.webSettings.setCacheMode(int);

public static final int LOAD_DEFAULT= -1;

public static final int LOAD_NORMAL =0;

public static final int LOAD_CACHE_ELSE_NETWORK =1;

public static final int LOAD_NO_CACHE =2;

public static final int LOAD_CACHE_ONLY =3;

webSettings.setCacheMode(int);

4.setVisibility(int)

publicstaticfinalintVISIBLE =0;

publicstaticfinalintINVISIBLE =4;

publicstaticfinalintGONE =8;

則對于:setVisibility(0)?==>?setVisibility(View.VISIBLE)

其他依次類推乳规。

5.calendar.set(int field, int value)

calendar.get(int)

Calendar這是一個(gè)日期工具類俺夕,也是根據(jù)當(dāng)前常量獲取返回的顯示格式時(shí)間

get以及set就是獲取下面的具體常量

field參數(shù)代表需要傳入的常量? value就是需要換算的時(shí)間值

public final static int YEAR =1;

public final static int MONTH =2;

public final static int WEEK_OF_YEAR =3;

public final static int WEEK_OF_MONTH =4;

public final static int DATE =5;

public final static int DAY_OF_MONTH =5;

public final static int DAY_OF_YEAR =6;

public final static int DAY_OF_WEEK =7;

反編譯之前的方法如圖

修改之后的圖辨赐,其他的數(shù)字依次類推

6.MeasureSpec.makeMeasureSpec(xx, int)

反編譯的代碼中MeasureSpec.makeMeasureSpec(xx, int)的第二個(gè)參數(shù)是個(gè)int類型的數(shù),這個(gè)比較簡單徘公,直接看文檔或者源碼即可找到:

源碼:

public static class MeasureSpec {

public static final int UNSPECIFIED = 0;

public static final int EXACTLY = 1073741824;

?public static final int AT_MOST = -2147483648;?

則對于:

MeasureSpec.makeMeasureSpec(xx, 0)或MeasureSpec.makeMeasureSpec(getWidth(), Integer.MIN_VALUE)

我們應(yīng)該修改為

MeasureSpec.makeMeasureSpec(xx, View.MeasureSpec.UNSPECIFIED)

其他依次類推

7.animator.setRepeatMode(int);

這個(gè)是ValueAnimator類設(shè)置動(dòng)畫的屬性晦攒,

public static final int RESTART = 1;

public static final int REVERSE = 2;

public static final int INFINITE = -1;

設(shè)置也是根據(jù)反編譯的值進(jìn)行

8.?setColor(-17367043)

反編譯的代碼中會(huì)有很多setColor(int)的情況狐肢,

比如setColor(-16777216)弃秆,這個(gè)值比較特別,能輕易的查到Android文檔中對這個(gè)整數(shù)的定義:

public static final int BLACK. Added in API level 1 Constant Value: -16777216 ( 0xff000000).

也就是說setColor(-16777216)中-16777216對應(yīng)的顏色是BLACK(0xff000000)暑塑,那么其他系統(tǒng)未定義成某個(gè)顏色名的值呢吼句?

-16777216 對應(yīng) 0xff000000 -1 對應(yīng) 0xffffffff 0xffffff 的值

16777215 那么對任意的 setColor(int)中的int值,

我們可以:0xffffffff+(int)+1 或 0xffffffff-(-int+1)

則對于 :setColor(-16777216)

可寫成 :setColor(0xffffffff - 16777215)) 或 setColor(-16777216 + 1 + 0xffffffff))

這樣事格,我們就不用查文檔尋找特定的顏色值惕艳,也能解決任意顏色的設(shè)置。

9.new Runnable()...

反編譯代碼中

new Runnable() {

final /* synthetic */ AbstractButton a;

{

this.a = r1;

}

public final void run() {

this.a.xxxxx();

}};

可直接去掉成員變量:

new Runnable() {

public final void run() {

xxxxx();

}};


10.new Handler()...

同9上面,直接去掉成員變量:

new Handler() {

final /* synthetic */ ButtonSave a;

{ this.a = r1;

}

public final void handleMessage(Message message){

this.a.xxx();

} }

;//修改為

new Handler() {

public final void handleMessage(Message message) {

xxx();

} };


11.context.getSystemService("layout_inflater")

直接看源碼即可:

public static final String POWER_SERVICE = "power";

public static final String WINDOW_SERVICE = "window";

public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";

public static final String ACCOUNT_SERVICE = "account";

public static final String ACTIVITY_SERVICE = "activity";

public static final String ALARM_SERVICE = "alarm";

public static final String NOTIFICATION_SERVICE = "notification";

public static final String ACCESSIBILITY_SERVICE = "accessibility";

...


則context.getSystemService("layout_inflater")?==>?context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

其他依次類推驹愚。

12.intent.setFlags()

先看源碼:

Intent implements Parcelable, Cloneable {

public static final int FLAG_GRANT_READ_URI_PERMISSION = 1;

public static final int FLAG_GRANT_WRITE_URI_PERMISSION = 2;

public static final int FLAG_FROM_BACKGROUND = 4;

public static final int FLAG_DEBUG_LOG_RESOLUTION = 8;

public static final int FLAG_EXCLUDE_STOPPED_PACKAGES = 16;

public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32;

public static final int FLAG_ACTIVITY_NO_HISTORY = 1073741824;

public static final int FLAG_ACTIVITY_SINGLE_TOP = 536870912;

public static final int FLAG_ACTIVITY_NEW_TASK = 268435456;

public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 134217728;

public static final int FLAG_ACTIVITY_CLEAR_TOP = 67108864;

public static final int FLAG_ACTIVITY_FORWARD_RESULT = 33554432;

public static final int FLAG_ACTIVITY_PREVIOUS_IS_TOP = 16777216;

public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 8388608;

public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 4194304;

public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 2097152;

public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576;

public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288;

public static final int FLAG_ACTIVITY_NO_USER_ACTION = 262144;

public static final int FLAG_ACTIVITY_REORDER_TO_FRONT = 131072;

public static final int FLAG_ACTIVITY_NO_ANIMATION = 65536;

public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768;

public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384;

public static final int FLAG_RECEIVER_REGISTERED_ONLY = 1073741824;

public static final int FLAG_RECEIVER_REPLACE_PENDING = 536870912;

public static final int FLAG_RECEIVER_FOREGROUND = 268435456;


那么對于intent.setFlags(int);?中?int值是上面四種之一的話就比較簡單远搪,例如:

intent.setFlags(536870912);?==>?intent.setFlags(PendingIntent.FLAG_NO_CREATE);

但是遇到一個(gè)比較特別的:intent.setFlags(335544320);

源碼里根本沒有這樣一個(gè)值啊,其實(shí)intent.setFlags( A | B )是可以使用|(或運(yùn)算)的逢捺,那么:

10000000000000000000000000000 = 268435456 | |

100000000000000000000000000 = 6710886410100000000000000000000000000 = 335544320

即 268435456 | 67108864 = 335544320


從而:

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);看到的是第一種情況谁鳍,結(jié)合intent.setFlags()的用法,應(yīng)該也是第一種情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倘潜,一起剝皮案震驚了整個(gè)濱河市绷柒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涮因,老刑警劉巖废睦,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異养泡,居然都是意外死亡嗜湃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門澜掩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來购披,“玉大人,你說我怎么就攤上這事肩榕「斩福” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵点把,是天一觀的道長橘荠。 經(jīng)常有香客問我,道長郎逃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任挺份,我火速辦了婚禮褒翰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匀泊。我一直安慰自己优训,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布各聘。 她就那樣靜靜地躺著揣非,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躲因。 梳的紋絲不亂的頭發(fā)上早敬,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音大脉,去河邊找鬼搞监。 笑死,一個(gè)胖子當(dāng)著我的面吹牛镰矿,可吹牛的內(nèi)容都是我干的琐驴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绝淡!你這毒婦竟也來了宙刘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤牢酵,失蹤者是張志新(化名)和其女友劉穎悬包,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茁帽,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玉罐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潘拨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吊输。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铁追,靈堂內(nèi)的尸體忽然破棺而出季蚂,到底是詐尸還是另有隱情,我是刑警寧澤琅束,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布扭屁,位于F島的核電站,受9級(jí)特大地震影響涩禀,放射性物質(zhì)發(fā)生泄漏料滥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一艾船、第九天 我趴在偏房一處隱蔽的房頂上張望葵腹。 院中可真熱鬧,春花似錦屿岂、人聲如沸践宴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阻肩。三九已至,卻和暖如春运授,著一層夾襖步出監(jiān)牢的瞬間烤惊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工徒坡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撕氧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓喇完,卻偏偏與公主長得像伦泥,于是被迫代替她去往敵國和親剥啤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容