androidsettings源碼
㈠ 如何更新android系統中到Setting.apk
第一步:
首先要在android源碼根目錄下執行
740 . build/envsetup.sh
741 brunch jordan
這一步其實是全編譯android來,會在根目錄下生成update-cm-7.2.0-RC1-jordan-UNOFFICIAL-signed.zip,這個ROM,用於更新系統。
在以後,其實可以直接
. build/envsetup.sh
來初始化編譯環境。
進入android-cm7/packages/apps/Settings,執行命令mm:
結果如下:
make: Entering directory `/home/neo/defy/android-cm7'
Copying: out/target/common/obj/APPS/Settings_intermediates/emma_out/lib/classes-jarjar.jar
Install: out/target/proct/jordan/system/app/Settings.apk
Copying: out/target/common/obj/APPS/SettingsTests_intermediates/emma_out/lib/classes-jarjar.jar
Install: out/target/proct/jordan/data/app/SettingsTests.apk
make: Leaving directory `/home/neo/defy/android-cm7'
可見,在out/target/proct/jordan/system/app/目錄下 生成了Settings.apk文件。
第二步:
在目錄android-cm7/out/target/proct/jordan/system/app下執行
# adb remount
將文件系統重新掛載,獲得文件系統到讀寫許可權,再執行push,將Settings.apk載入到目標路徑,覆蓋原來到Settings,
# adb push Settings.apk /system/app
3122 KB/s (4576533 bytes in 1.431s)
手機上重新打開設置,就可以看見剛才修改到效果了。
㈡ 怎樣修改安卓軟體內部代碼的packname名字,安卓軟體是在商店下載的
Android
源碼自帶了很多應用程序,想改個包名方便修改?很簡單,兩步搞定,以packages/apps/Settings為例:
1、打開AndroidManifest.xml,把
<manifest xmlns:android="http://schemas.android.com/apk/res/android
"
android:sharedUserId="android.uid.system"
package="com.android.settings">
改成
<manifest xmlns:android="http://schemas.android.com/apk/res/android
"
android:sharedUserId="android.uid.system"
package="com.android.settings2">
2、打開package Explorer
找到src 下主包com.android.setting
右鍵refactor->rename改成com.android.setting2,四個選項全部勾選,等一會就OK了
在模擬器里運行會時,會讓你選擇有原生的還是更改後的
㈢ 怎樣在源代碼中修改android系統的屏幕默認
1、首先解決【設置】界面默認顯示【開發者選項】的問題
查看源代碼:packages/apps/Settings/src/com/android/settings/SettingsActivity.java
在updateTilesList(Listtarget)方法中,可以找到【開發者選項】相關的代碼:
else if (id == R.id.development_settings) {Log.d(LOG_TAG, =================oyp K=+showDev);if (!showDev || um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) {removeTile = true;}}
其中showDev變數定義在該方法最開始處
因此要想特定客戶直接顯示【開發者選項】,則將showDev的值改變即可,代碼如下:
即在初始化showDev變數之前,將DevelopmentSettings.PREF_SHOW的值設置為true,那麼showDev也會是true。這樣【開發者選項】就會默認打開。那個判斷是J5客戶的方法在/frameworks/base/core/java/android/os/SystemProperties.java中定義
因為這個添加的代碼是在SecuritySettings的createPreferenceHierarchy()方法中,也就是說要進入到該Activity才生效。這樣明顯沒達到目的。
因此要和設置【USB調試】一樣,在一個接收開機廣播的廣播接收者中將Settings.Global.INSTALL_NON_MARKET_APPS設置為1。
4、找Settings裡面定義的一個接收開機廣播的廣播接收者,在AndroidManifest.xml中找到一個,當然你也可以自己定義一個這樣的廣播接收者。
<!-- Restore Rotation Receiver --><receiver android:name="com.mediatek.settings.RestoreRotationReceiver"><intent-filter></action></action></intent-filter></receiver>
因此在packages/apps/Settings/src/com/mediatek/settings/RestoreRotationReceiver.java的onReceive(Context context, Intent intent)方法中加入以下代碼:
而一開始添加的代碼可以注釋掉了。通過git diff可以看出來
diff --git a/packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java b/packages/apps/Settings/src/com/android/settings/Develindex 0a987df..503270a 100755--- a/packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java+++ b/packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java@@ -508,15 +508,9 @@ public class DevelopmentSettings extends Context context = getActivity();final ContentResolver cr = context.getContentResolver();mHaveDebugSettings = false;-/// M: CR ALPS00244115. Lock and unlock screen, the USB debugging is unchecked.boolean isChecked = (mAdbDialog != null && mAdbDialog.isShowing()) ? true :(Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0);- //added by ouyang 2015-11-10 set mEnableAdb=true if model is J5- if (android.os.SystemProperties.isJ5Version()) {- isChecked=true;- }- //added by ouyang 2015-11-10 enpdateSwitchPreference(mEnableAdb, isChecked);/// M: update usb preference againmExt.customUSBPreference(mEnableAdb);diff --git a/packages/apps/Settings/src/com/android/settings/SecuritySettings.java b/packages/apps/Settings/src/com/android/settings/Securityindex 4de173a..392e6ee 100755--- a/packages/apps/Settings/src/com/android/settings/SecuritySettings.java+++ b/packages/apps/Settings/src/com/android/settings/SecuritySettings.java@@ -402,14 +402,7 @@ public class SecuritySettings extends .findPreference(KEY_DEVICE_ADMIN_CATEGORY);mToggleAppInstallation = (SwitchPreference) findPreference(KEY_TOGGLE_INSTALL_APPLICATIONS);-- //added by ouyang 2015-11-10 setChecked(true) if the model is J5- if (android.os.SystemProperties.isJ5Version()) {- setNonMarketAppsAllowed(true);- }mToggleAppInstallation.setChecked(isNonMarketAppsAllowed());- //added by ouyang 2015-11-10 end-// Side loading of apps.// Disable for restricted profiles. For others, check if policy disallows it.mToggleAppInstallation.setEnabled(!um.getUserInfo(UserHandle.myUserId()).isRestricted());
這樣改為後,編譯,刷機後,插上USB數據線就可以開始進行adb調試了,而且可以直接安裝未知來源的apk了。