1. 程式人生 > >Android系統Framework定製預設值預置修改

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域中的程序search
getattr型別為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
<string name="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:
            <java-symbol type="bool" name="config_sms_ringtone_incall" />

2.2 定義:   ./frameworks/base/core/res/res/values/config.xml:
            <bool name="config_sms_ringtone_incall">true</bool>
讀取: 
            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. 預設勾選 未知來源

<bool name="def_install_non_market_apps">false</bool>

  • 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 <bool name="def_lockscreen_disabled">true</bool>

  • 12. 修改預設字型
2.1 在4.1上修改預設字型大小:
比如改成大:
<frameworks\base\packages\SettingsProvider\res\values\defaults.xml>
<fraction name="def_font_scale">115%</fraction>
修改預設(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檔案

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定製預設預置修改

1. 配置SELinux許可權SELinux(或SEAndroid)主要將app劃分為三種類型(根據user不同,也有其他的domain型別):1)untrusted_app 第三方app,沒有android平臺簽名,沒有system許可權 2)platform_app

Android系統移植與除錯之-------)如何修改Android系統預設顯示

1、首先解決【設定】介面預設顯示【開發者選項】的問題 檢視原始碼:packages/apps/Settings/src/com/android/settings/SettingsActivity.java 在updateTilesList(List target)方法中,可以找到【開發

mysql 日期預設系統時間 mysql 預設不支援函式

由於MySQL目前欄位的預設值不支援函式,所以以    create_time datetime default now()    的形式設定預設值是不可能的。    代替的方案是使用TIMESTAMP型別代替DATETIME型別。    TIMESTAMP列型別自動

Win10 64 位系統環境變數預設

使用者變數 Path: %USERPROFILE%\AppData\Local\Microsoft\WindowsApps; TEMP: %USERPROFILE%\AppData\Local\Temp TMP:  %USERPROFILE%\AppData\Loca

Android系統應用開發(六)Android framework系統預設設定修改

launcher 總結:  1、launcher的佈局太居中,要想兩邊拉伸 <\packages\apps\Launcher2\res\values\dimens.xml> <dimen name="apps_customize_pageLayo

Android系統設定預設大全

一、是否有預設值 在尋找一個開關的預設值時,首先要明白一點,該開關是否存在預設值,以及該開關狀態是否有狀態儲存(一般狀態儲存在settings的db中)。 判斷條件: 在reboot(重啟)之後開關狀態仍舊儲存或者是在reset(恢復出廠設定)之後開關狀態恢復到預設的,才能找到預設值。

修改Android系統預設時間

一 : 修改Android系統預設時間 原始碼路徑:frameworks/base/services/java/com/android/server/SystemServer.java 主要變數EARLIEST_SUPPORTED_TIME // The earliest suppo

Android系統修改預設鈴聲

Andriod手機的鈴聲預設儲存在system/media/audio/下面,有四個資料夾,分別是alarms,notifications,ringtones,ui。對應鬧鐘、通知、鈴聲、UI音效。root的手機可以直接替換修改相應目錄下的檔案來修改鈴聲。那這些聲音是從哪裡來的呢。由於需要修改預設的

Android中如何修改編譯的資源ID(預設是0x7F...可以隨意改成0x02~0x7E)

一、技術準備今天我們來看一下如何修改Android中編譯時的資源Id的值,在講解這內容之前,我們需要先了解一下Android中的資源編譯之後的結構和編譯過程,這裡就不多說了,具體可以檢視這篇文章:這篇文章中,介紹瞭如何解析Android中編譯之後的resource.arsc檔

[sg] Android 6.0 修改系統預設時區和修改12小時製為24小時制

修改預設時區 在最終編譯出的配置檔案build.prop增加屬性 persist.sys.timezone=Asia/Shanghai (我這裡預設選擇東八區上海,其他對應的時區在frameworks\base\core\res\res\xml\time_z

Android系統Setting預設引數修改

在定製系統中,通常需要修改Settings預設設定來達到需求的目的。而Settings相關資料庫操作的包位於framework/base/packages/SetingsProvider 修改Settings資料庫的預設值(準確點說是第一次開機後的值) ,對應

Android O 修改開發者選項中動畫縮放的預設

frameworks/base/core/res/res/values/config.xml <item name="config_appTransitionAnimationDurationScaleDefault" format="float" type="di

Android系統預設輸入法的修改

1.  frameworks\base\packages\SettingsProvider\res\values\defaults.xml 檔案中修改預設輸入法為搜狗輸入法         <stringname="config_default_input_metho

Android應用程式的預設最大記憶體以及修改

Android應用程式的預設最大記憶體值為16M,不同的手機版本和型號有所不同. 有些應用程式可能會出現記憶體溢位,譬如: ERROR/AndroidRuntime(264): java.lang.OutOfMemoryError: bitmap size ex

Android 系統(69)---Android7.1.1系統設定預設大全

判斷條件: 在reboot(重啟)之後開關狀態仍舊儲存或者是在reset(恢復出廠設定)之後開關狀態恢復到預設的,才能找到預設值。 在reboot之後開關狀態仍舊儲存的,表示狀態儲存在了db中。 在reset之後開關狀態恢復預設的,表示狀態有一個預設值。比如像wiif開關,藍芽開關,gps開關等,都有預設值,

定製Android系統Android O 預設允許應用彈窗申請許可權

需求:Android 應用在 6.0 以後?就需要動態申請許可權了,那些寫在 AndroidManifest.xml 中的許可權在應用執行時會彈窗申請。如果應用跑在不方便與終端使用者做互動的場景,例如攝像頭等,或者單純地不希望應用再彈窗申請許可權,而是預設授予應

如何修改Android系統預設亮度

調整系統預設亮度,我們只需要修改frameworks\base\packages\SettingsProvider\res\values\defaults.xml檔案中的def_screen_brightness值。 修改之前 <integer name="

Android系統專案預設設定和framework系統預設設定

一、專案預設設定和framework系統預設設定的內容是一樣的。 1、最新framework系統預設設定一般預設位置:frameworks\base\packages\SettingsProvider\res\values\defaults.xml。 2、最新專

android系統預設的設定

1開機圖片:   android-logo-mask.png   android-logo-shine.png   這兩個圖片一個在上一個在下   ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_

手把手教你深度定製tiny4412安卓5.0系統(一)---開發板如何預置檔案到android系統

想要預置檔案,首先要了解Android原始碼中device這個目,開啟這個目錄我們看到,這個目錄廠家會針對不同的開發板做一些修改:在這個目錄中,我們看到有不同的廠家定製的資訊,我們這款開發板是友善之壁提