RK3568系列4——Android系统语言时区等通用设置

  该文是一些Android系统常用的配置,包括修改默认语言/国家信息/默认时区、修改默认NTP服务器、禁用锁屏、禁用自动休眠、禁用SELinux、root权限、固件预置App、固件预置输入法等。

默认语言/国家信息/默认时区

  • 修改板级配置文件device/rockchip/rk356x/alpha/alpha.mk
  • Android 8没有国家信息选项,不需要配置persist.sys.country
1
2
3
PRODUCT_LOCALES := zh_CN en_US
PRODUCT_PROPERTY_OVERRIDES += persist.sys.country=CN
PRODUCT_PROPERTY_OVERRIDES += persist.sys.timezone=Asia/Shanghai

修改默认NTP服务器

  • Android 8和Android 11相同
1
2
3
4
5
6
7
8
diff frameworks/base/core/res/res/values/config.xml
@@ -2037,5 +2037,5 @@
<bool name="config_actionMenuItemAllCaps">true</bool>

<!-- Remote server that can provide NTP responses. -->
- <string translatable="false" name="config_ntpServer">2.android.pool.ntp.org</string>
+ <string translatable="false" name="config_ntpServer">ntp.aliyun.com</string>
<!-- Normal polling frequency in milliseconds -->

禁用锁屏(进系统后直接进入桌面)

  • Android 8和Android 11相同
1
2
3
4
5
6
7
8
9
diff frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -82,5 +82,5 @@
<integer name="def_max_sound_trigger_detection_service_ops_per_day" translatable="false">1000</integer>
<integer name="def_sound_trigger_detection_service_op_timeout" translatable="false">15000</integer>

- <bool name="def_lockscreen_disabled">false</bool>
+ <bool name="def_lockscreen_disabled">true</bool>
<bool name="def_device_provisioned">false</bool>
<integer name="def_dock_audio_media_enabled">1</integer>

禁用自动休眠

  • Android 8和Android 11相同
1
2
3
4
5
6
7
8
diff device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -18,5 +18,5 @@
-->
<resources>
- <integer name="def_screen_off_timeout">60000</integer>
+ <integer name="def_screen_off_timeout">0x7fffffff</integer>
<!-- Initial value for the Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS setting,
which is a comma separated list of packages that no longer need confirmation

去掉电池图标

  • 删除控制中心中的电池图标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
diff frameworks/base/packages/SystemUI/res/values/config.xml
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
- wifi,bt,dnd,flashlight,rotation,battery,cell,airplane,cast
+ wifi,bt,dnd,flashlight,rotation,cell,airplane,cast
</string>

<!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" -->
<string name="quick_settings_tiles_stock" translatable="false">
- wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night
+ wifi,cell,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night
</string>

<!-- The tiles to display in QuickSettings -->
  • 删除状态栏中的电池图标
1
2
3
4
5
6
7
8
9
10
diff frameworks/base/packages/SystemUI/res/layout/system_icons.xml
android:layout_marginStart="@dimen/signal_cluster_margin_start"/>

<com.android.systemui.BatteryMeterView android:id="@+id/battery"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_width="0dp"
/>
</LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diff frameworks/base/packages/SystemUI/res/layout/system_icons.xml
android:orientation="horizontal"/>

<com.android.systemui.BatteryMeterView android:id="@+id/battery"
+ android:visibility="gone"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:clipToPadding="false"

diff frameworks/base/packages/SystemUI/res/values/config.xml
-->
<string-array name="config_statusBarIconBlackList" translatable="false">
<item>@*android:string/status_bar_rotate</item>
+ <item>@*android:string/status_bar_battery</item>
</string-array>

<!-- A path similar to frameworks/base/core/res/res/values/config.xml
  • 删除下拉通知菜单后的电池图标
1
2
3
4
5
6
7
8
9
10
11
diff frameworks/base/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
android:singleLine="true" />

<com.android.systemui.BatteryMeterView android:id="@+id/battery"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_width="0dp"
/>

<com.android.systemui.statusbar.policy.Clock
1
2
3
4
5
6
7
8
diff frameworks/base/packages/SystemUI/res/layout/quick_qs_status_icons.xmlquick_qs_status_icons.xml
android:paddingEnd="@dimen/signal_cluster_battery_padding" />

<com.android.systemui.BatteryMeterView
+ android:visibility="gone"
android:id="@+id/batteryRemainingIcon"
android:layout_height="match_parent"
android:layout_width="wrap_content"

禁用SELinux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
diff device/rockchip/common/BoardConfig.mk
@@ -60,5 +60,5 @@
BOARD_PREBUILT_DTBOIMAGE ?= $(TARGET_DEVICE_DIR)/dtbo.img
BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE ?= false
-BOARD_SELINUX_ENFORCING ?= true
+BOARD_SELINUX_ENFORCING ?= false

# Use the non-open-source parts, if they're present

# user固件下禁用SELinux
diff system/core/init/Android.bp
@@ -87,5 +87,5 @@
"-DALLOW_FIRST_STAGE_CONSOLE=0",
"-DALLOW_LOCAL_PROP_OVERRIDE=0",
- "-DALLOW_PERMISSIVE_SELINUX=0",
+ "-DALLOW_PERMISSIVE_SELINUX=1",
"-DREBOOT_BOOTLOADER_ON_PANIC=0",
"-DWORLD_WRITABLE_KMSG=0",

为用户开启root权限

  • RKDocs/android/patches/root/android11_root.pdf

固件预置App

  1. Android Studio生成未签名的APK文件:Build -> Build Bundle(s) / APK(s) -> Build APK(s)
  2. packages/apps/目录下新建目录AndroidTestTools(后文均以此名为例)
  3. 将生成的APK文件放于此目录下
  4. 在该目录下新建Android.mk文件
1
2
3
4
5
6
7
8
9
10
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := AndroidTestTools
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := Android_Test_Tools.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
  1. 编译时预置该APP(Android 10及以上必须要以这种方式):
1
2
3
4
5
6
7
diff build/target/product/handheld_system_ext.mk

@@ -28,3 +28,4 @@ PRODUCT_PACKAGES += \
StorageManager \
SystemUI \
WallpaperCropper \
+ AndroidTestTools \

固件预置输入法

  1. 按照固件预置App的步骤,预置输入法的APK包,这里给个参考模板:
1
2
3
4
5
6
7
8
9
10
11
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := GooglePinyinInput
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := Google_Pinyin_Input_v4.5.2.193126728-arm64-v8a.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

  1. 增加默认输入法的配置
1
2
3
4
5
6
7
8
9
10
11
diff frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2401,6 +2401,9 @@
loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,
R.integer.def_sleep_timeout);

+ loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, R.string.default_input_method);
+ loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, R.string.enabled_input_methods);
+
/*
* IMPORTANT: Do not add any more upgrade steps here as the global,
* secure, and system settings are no longer stored in a database
  1. 修改代码启动时载入配置
1
2
3
4
5
6
7
8
9
10
11
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -246,4 +246,9 @@

<!-- should show the screenshot button default -->
<integer name="def_screenshot_button_show">0</integer>
+
+ <!-- settings default input method -->
+ <string name="default_input_method" translatable="false">com.google.android.inputmethod.pinyin/.PinyinIME</string>
+ <string name="enabled_input_methods" translatable="false">com.google.android.inputmethod.pinyin/.PinyinIME</string>
+
</resources>