Android系统Framework定制默认值预置修改

  • 1. 配置SELinux权限

SELinux(或SEAndroid)主要将app划分为三种类型(根据user不同,也有其他的domain类型):

1)untrusted_app  第三方app,没有android平台签名,没有system权限
2)platform_app    有android平台签名,没有system权限
3)system_app      有android平台签名和system权限

从上面划分,权限等级,理论上:untrusted_app < platform_app < system_app
TE介绍:
    allow netd proc:file write
    这条语句的语法为:
    allowTEallow语句,表示授权。除了allow之外,还有allowauditdontauditneverallow等。
    netdsource type。也叫subjectdomain
    proctarget type。它代表其后的file所对应的Type
    file:代表Object Class。它代表能够给subject操作的一类东西。例如FileDirsocket等。在Android系统中,有一个其他Linux系统没有的Object Class,那就是Binder
    write:在该类Object Class中所定义的操作。
    根据SELinux规范,完整的allow相关的语句格式为:
    rule_name source_type target_type : class perm_set
    
    我们直接来看几个实例:
    [例子3]
    //SEAndroid中的安全策略文件policy.conf
    #允许zygote域中的进程向init type的进程(Object Classprocess)发送sigchld信号
    allow zygote init:process sigchld;
    #允许zygote域中的进程searchgetattr类型为appdomain的目录。注意,多个perm_set
    #可用{}括起来
    allow zygote appdomain:dir { getattr search };
    #来个复杂点的:
    #source_typeunconfineddomain target_type为一组type,由
    #{ fs_type dev_type file_type }构成。object_class也包含两个,为{ chr_file file }
    #perm_set语法比较奇特,前面有一个~号。它表示除了{entrypoint relabelto}之外,{chr_file #file}这两个object_class所拥有的其他操作
    allow unconfineddomain {fs_type dev_type file_type}:{ chr_file file }   \
     ~{entrypoint relabelto};
    #特殊符号除了~外,还有-号和*号,其中:
    # 1):-号表示去除某项内容。
    # 2):*号表示所有内容。
    #下面这条语句中,source_type为属于appdomain,但不属于unconfinedomain的进程。
    # *表示所有和capability2相关的权限
    #neverallow:表示绝不允许。
    neverallow { appdomain -unconfineddomain } self:capability2 *;

type的定义:
    type命令的完整格式为:type type_id [alias alias_id,] [attribute_id]
    其中,方括号中的内容为可选。alias指定了type的别名,可以指定多个别名
    

/device/qcom/sepolicy/common/
1 file.te  定义  sysfs_brightness
type sysfs_brightness, sysfs_type, fs_type;
2 file_comtexts    配置sysfs_brightness
/sys/class/leds/lcd-backlight/brightness                   u:object_r:sysfs_brightness:s0
3 app.te    配置权限
allow appdomain sysfs_brightness:file rw_file_perms;
4 system_app.te    配置权限
allow system_app sysfs_brightness:file rw_file_perms;
  • 5. 默认设置第三方输入法
framework/base/packages/SettingsProvider/res/values/customize.xml
"def_enable_input_methods" translatable="false">com.baidu.input/.ImeAppMainActivity</string>
百度:com.baidu.input/.ImeService
讯飞:com.iflytek.inputmethod/.FlyIME
腾讯:com.tencent.qqpinyin/.QQPYInputMethodService
谷歌:com.google.android.inputmethod.pinyin/.PinyinIME
搜狗:com.sohu.inputmethod.sogou/.SogouIME
触宝:com.cootek.smartinput5/.TouchPalIME
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 #Module name should match apk name to be installed
 LOCAL_MODULE := baiduinput
 LOCAL_MODULE_TAGS := optional
 LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
 LOCAL_MODULE_CLASS := APPS
 LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
 LOCAL_CERTIFICATE := PRESIGNED
 LOCAL_MULTILIB:=32
 LOCAL_PREBUILT_JNI_LIBS:= \
  @lib/armeabi/libbdEASRAndroid.so  \
  @lib/armeabi/libbdEASRAndroid.v1.8.8.so  \
  @lib/armeabi/libbdinput_gif_v1_0_10.so  \
  @lib/armeabi/libBDVoiceRecognitionClient_MFE_V1.so  \
  @lib/armeabi/libchiperencoder_v1_2_1.so  \
  @lib/armeabi/libprocmoi_v1_4.so  \
  @lib/armeabi/libprocmox_v1_4.so
 include $(BUILD_PREBUILT)

#LOCAL_PRIVILEGED_MODULE := true
#LOCAL_OVERRIDES_PACKAGES := Home
  • 6. Android4.4之后配置应用写入短信权限
framework/opt/telephony/*/SmsApplication.java
getDefaultSmsApplicationPackageName()
参考BLUETOOTH_PACKAGE_NAME添加USERCENTER_PACKAGE_NAME
  • 设置拨号盘暗码
com.android.dialer.SpecialCharSequenceMgr.java
参考MMI_IMEI_DISPLAY,handleDeviceIdDisplay()

  • 7. app默认权限授予

frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java

  • 8. 添加全局变量开关(三种方式)
1.  android.provider.Settings.System.getInt(getContentResolver(),"test", 0);
    android.provider.Settings.System.putInt(getContentResolver(),"test", 1);
    
    SettingsSystem  Global  Secure 
2.1 定义:    ./frameworks/base/core/res/res/values/symbols.xml:
            type="bool" name="config_sms_ringtone_incall" />

2.2 定义:   ./frameworks/base/core/res/res/values/config.xml:
            "config_sms_ringtone_incall">true
读取: 
            context.getResources().getBoolean(com.android.internal.R.bool.config_sms_ringtone_incall)
3.system.prop中添加:
    tinno_gms_able = false

使用:
    import android.os.SystemProperties;
    SystemProperties.getBoolean("tinno_gms_able", false);
    system.prop生成的位置
        out/target/product/l5261/system/build.prop
对属性的读写操作
                adb shell getprop key
                adb shell setprop key value    (eng版本)
  • 9. 编译中预拷贝文件或文件夹
/device/qucii/qucii8976v3_64/qucii8976v3_64.mk:
配置文件的拷贝路径:
    PRODUCT_COPY_FILES += device/qucii/qucii8976v3_64/Homecare_Chinese_93sec_color.mp4:system/media/Homecare_Chinese_93sec_color.mp4
配置文件夹拷贝路径:
    PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/qcom/proprietary/Tone,storage/emulated/0/Tone)
    :
    $(shell mkdir -p ${OUT}"/system/etc/")源码编译的时候,先读取该mk文件,该目录还没创建,所以要建一个,否则拷贝失败。
    $(shell cp -rf $(LOCAL_PATH)/usb_modeswitch.d ${OUT)}"/system/etc/"),然后通过shell拷贝任意文件。
注意:
如果拷贝的是apk文件,可能会报错:
原因是build/core/Makefile中做了检测,注释build/core/Makefile中的define check-product-copy-file函数即可
  • 10. 默认勾选 未知来源

false

  • 11. 修改系统默认值(WiFi,蓝牙初始开关);默认铃声, 通知, 闹钟, 音乐,字体
1. framework/base/packages/SettingsProvider/res/values/defaults.xml
2. 可以在system.prop 分别配置
ro.config.ringtone=Playa.ogg (默认铃声设置,文件在/system/media/audio/ringtones 把喜欢的铃声放这里,比如123.MP3放入ringtones文件夹中,这里代码改为ro.config.ringtone=123.mp3)
ro.config.notification_sound=regulus.ogg (默认提示音,文件在/system/media/audio/notifications 修改方法同上)
ro.config.alarm_alert=Alarm_Beep_03.ogg (默认闹铃,文件在/system/media/audio/alarms 修改方法同上)
3.默认字体:
public void readFontSizePreference(ListPreference pref) {
ActivityManagerNative.getDefault().getConfiguration()
系统的Configuration是从ActivityManagerService设置的:
<\frameworks\base\services\java\com\android\server\am\ActivityManagerService.java>
mConfiguration.setToDefaults();
fontScale = Float.parseFloat(SystemProperties.get("ro.fontScale","1"));
  • 11. 设置-->开发者选项--修改后台进程限制
frameworks/base/services/java/com/android/server$ vi ./am/ActivityManagerService.java
把int mProcessLimitOverride = -1;改成4(不得超过4个进程)
标准限制 对应 -1
不允许后台进程 对应 0
不得超过1个进程 对应 1
不得超过2个进程  对应 2
不得超过3个进程 对应 3
  • 11.默认不要锁屏,设置-安全--屏幕锁定 (无)

overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml true

  • 12. 修改默认字体
2.1 在4.1上修改默认字体大小:
比如改成大:
\base\packages\SettingsProvider\res\values\defaults.xml>
115%
修改默认(Settting.apk 中选项默认值一般存在于 frameworks\base\packages\SettingsProvider\res\values\defaults.xml)
  • 13. 获取正在播放音乐app包名
    // com.android.server.audio.AudioService        callingPackageName为当前获取焦点app包名
    public int requestAudioFocus(AudioAttributes aa, int durationHint, IBinder cb,
            IAudioFocusDispatcher fd, String clientId, String callingPackageName, int flags,
            IAudioPolicyCallback pcb) {
    }
    
    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audio.isMusicActive()   // 判断是否有音乐播放
  • 14.如何将非系统app预置到Doze的白名单中

1.在framework/base/data下创建data目录

2.在framework/base/data/data下创建deviceidle.xml 然后把白名单app按以下格式写入

deviceidle.xml

xml version='1.0' encoding='utf-8' standalone='yes' ?>
<config>
<wl n="com.tencent.mm" />
<wl n="com.tencent.mobileqq" />
config>

3.在framework/base/data/data下创建Android.mk文件

Android.mk

LOCAL_PATH := $(my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := deviceidle.xml

LOCAL_MODULE_CLASS := DATA

# This will install the file in /data/system
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/system

LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

3.定义deviceidle.xml在 build/target/product/base.mk中

PRODUCT_PACKAGES += \
    ...
    monkey \
    mtpd \
    ndc \
    netd \
    ping \
    ping6 \
    platform.xml \
    deviceidle.xml \
    pppd \
    pm \
    ...

你可能感兴趣的:(Android,#,Framework)