天天看點

Android系統移植與調試之------->如何修改Android系統預設顯示【開發者選項】并預設打開【USB調試】和【未知來源】開關

              今天有個使用者對【設定】有個特殊的要求,即:

1、開機的時候預設顯示【開發者選項】并打開【USB調試】開關    (【Developer options】-->【USB debugging】)

2、開機的時候預設打開【安全】-->【未知來源】的開關    (【Security】--->【Unknown sources】)

1、首先解決【設定】界面預設顯示【開發者選項】的問題

檢視源代碼:packages/apps/Settings/src/com/android/settings/SettingsActivity.java

在updateTilesList(List<DashboardCategory> target)方法中,可以找到【開發者選項】相關的代碼:

其中showDev變量定義在該方法最開始處

是以要想特定客戶直接顯示【開發者選項】,則将showDev的值改變即可,代碼如下:

即在初始化showDev變量之前,将DevelopmentSettings.PREF_SHOW的值設定為true,那麼showDev也會是true。這樣【開發者選項】就會預設打開。那個判斷是J5客戶的方法在/frameworks/base/core/java/android/os/SystemProperties.java中定義

Android系統移植與調試之------->如何修改Android系統預設顯示【開發者選項】并預設打開【USB調試】和【未知來源】開關

2、解決【開發者選項】-->【USB調試】開關 

首先檢視packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java

在updateAllOptions()方法中,有關于【USB調試】的邏輯處理。

其中mEnableAdb即【USB調試】開關控件。一開始我直接強制的把isChecked變量設定為true,如下代碼所示

但是這樣的話,直接刷機後開機的話還是不能直接連接配接USB調試,還要重新關閉該開關再打開該開關才能進行USB調試,是以該方案被放棄。

因為是否真正打開【USB調試】功能,是看Settings.Global.ADB_ENABLED這個屬性的值是0還是1。是以真正的方法是在一個接受開機廣播的廣播接收者中将Settings.Global.ADB_ENABLED設定為1。

在下面和【未知來源】一起修改,在第4步驟中解決。

3、解決【安全】-->【未知來源】的開關 預設打開的問題

首先檢視packages/apps/Settings/src/com/android/settings/SecuritySettings.java檔案,在createPreferenceHierarchy()方法中找到【未知來源】的控件,403行附近

其中isNonMarketAppsAllowed()方法代碼如下

setNonMarketAppsAllowed(boolean enabled)方法代碼如下

一開始我在判斷isNonMarketAppsAllowed()方法之前,先調用setNonMarketAppsAllowed()方法,這樣一進入這個界面的話,【未知來源】選項是被勾選的。

但是,刷完機直接安裝一個第三方的apk的話,還是會彈出視窗要我設定【未知來源】選項,如下所示,是以該方案被放棄。

Android系統移植與調試之------->如何修改Android系統預設顯示【開發者選項】并預設打開【USB調試】和【未知來源】開關

點選【設定】按鈕進入到界面是,【未知來源】按鈕預設勾選了,這個時候退出去,繼續安裝apk的話就可以安裝了,如下所示:

Android系統移植與調試之------->如何修改Android系統預設顯示【開發者選項】并預設打開【USB調試】和【未知來源】開關

因為這個添加的代碼是在SecuritySettings的createPreferenceHierarchy()方法中,也就是說要進入到該Activity才生效。這樣明顯沒達到目的。

是以要和設定【USB調試】一樣,在一個接收開機廣播的廣播接收者中将Settings.Global.INSTALL_NON_MARKET_APPS設定為1。

4、找Settings裡面定義的一個接收開機廣播的廣播接收者,在AndroidManifest.xml中找到一個,當然你也可以自己定義一個這樣的廣播接收者。

是以在packages/apps/Settings/src/com/mediatek/settings/RestoreRotationReceiver.java的onReceive(Context context, Intent intent)方法中加入以下代碼:

而一開始添加的代碼可以注釋掉了。通過git diff可以看出來

這樣改為後,編譯,刷機後,插上USB資料線就可以開始進行adb調試了,而且可以直接安裝未知來源的apk了。

====================================================================================

  作者:歐陽鵬  歡迎轉載,與人分享是進步的源泉!

Android系統移植與調試之------->如何修改Android系統預設顯示【開發者選項】并預設打開【USB調試】和【未知來源】開關

繼續閱讀