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了。