關於Google應用SetupWizard.apk和ro.setupwizard.mode

最近產品集成了Google的相關應用SetupWizard.apk,但是很不是給力的是,這個開機導購式Wizard,讓人感覺不是很舒服。OK,那就幹掉它。幹掉它,完了,google相關account相關的東西都出問題了。但是又不想讓那個Wizard界面出來影響剛拿到機器用戶的好心情。沒有SetupWizard.apk的源碼。OK,那我們也要搞點大致能讀的東西出來看看麼,就算死,也要死的瞑目。

        如何反編譯APK,ok,這個相關方法“baidu”or“google”一下,很快就可以看到很多貌似不錯的方法,那就開始搞。apk-(rar)->classes.dex-(dex2jar)->Jar-(XJad)->source code。ok,這樣大致能搞出一些還算有可讀性的源代碼。

        BaseActivity.java裏面的onCreate方法中,我看到了一個很貌似眼熟的字符串“ro.setupwizard.mode”,"ro.*"這個開頭的變量,基本上都是android系統的一些全局變量,我們在onCreate函數裏面看到SystemProperties.get(“ro.setupwizard.mode”,s),這下就清楚,這個SetupWizard.apk代碼中會讀取這個全局變量,在看看下面的這段代碼,就會發現問題所在了:

        String s;

String s1;

        s1 = SystemProperties.get(“ro.setupwizard.mode”,s);

        Mode mode = Mode.valueOf(s1);

問題關鍵就在於此了,Mode是一個extends Enum的類,主要種類有:REQUIRED,OPTIONAL,DISABLED,EMULATOR

在去看看build.prop這個存有大量環境變量的文件,果然,發現問題,這個裏面的ro.setupwizard.mode = OPTIONAL。但是這個build.prorp也是生成的變量表,繼續查,在build/core/main.mk裏面,我們可以看到。在TARGET_BUILD_VARIANT是eng的時候默認的會將這個全局系統變量寫爲OPTIONAL,我們將其改爲DISABLE,這下世界清靜了,一切正常,不在用開始繁雜的SetupWizard,就可以開始體驗我們的Android了。

 

        後續會繼續跟蹤,在user和eng模式下,這個setupwizard對於ro.setupwizard.mode的處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章