Android系统定制
适用范围
-
RK3368 Android10
-
RK3399Pro Android9
-
RK3399 Android7.1/Android10
-
RK356X Android11
-
RK3588 Android12 对于其他 Android 的版本,可供参考。
名词解释
-
CPU_TYPE
:表示主控芯片,比如rk3368,rk3399,rk3399pro, rk356x, rk3588 -
PRODUCT_TYPE
:表示产品类型,比如LKD3588
开机 logo 动画修改
第一阶段
代码修改的方式
-
准备 logo
-
制作新的 logo.bmp
-
图片属性和默认的 logo.bmp 一致,否则会出现颠倒异常
-
width,height 都为偶数
-
-
-
替换 logo
-
替换
kernel/logo.bmp
-
第二阶段
临时修改的方式
-
准备 bootanimation.zip
-
准备 png 文件
-
width,height 都为偶数 准备 desc.txt 文件,比如
-
-
800 1280 30 p 0 0 part0
* `800 1280 30`含义:前两个数字代表图片的像素宽度和高度,30 代表帧数,也就是1秒播放的图片张数 * `p 0 0 part0`含义:p 代表标志位,0 表示无限循环,0 表示阶段间隔时间为0,part0 表示对应文件夹 * desc.txt 文本格式:Unix+UTF-8 * 制作 bootanimation.zip * 以**存储方式**压缩成zip文件
push bootanimation.zip
adb shell setprop persist.sys.root_access 3 adb root adb remount adb push bootanimation.zip system/media/bootanimation.zip adb shell reboot
代码修改的方式
-
准备 bootanimation.zip
-
把制作好的
bootanimation.zip
放到device/rockchip/CPU_TYPE/
目录下 在device/rockchip/CPU_TYPE/device.mk
文件里,添加如下内容:
-
PRODUCT_COPY_FILES += \ device/rockchip/CPU_TYPE/bootanimation.zip:/system/media/bootanimation.zip
默认屏幕方向修改
临时修改的方式
系统可读可写
adb shell setprop persist.sys.root_access 3 adb root adb remount
-
修改或添加属性值
-
Android7.1
-
在
/system/build.prop
文件中,修改或添加ro.sf.hwrotation
的值-
0:横屏
-
90:竖屏
-
180:反向横屏
-
270:反向竖屏
-
-
-
Android10及以上
-
在
vendor/build.prop
文件中,修改或添加ro.surface_flinger.primary_display_orientation
的值-
ORIENTATION_0:横屏
-
ORIENTATION_90:竖屏
-
ORIENTATION_180:反向横屏
-
ORIENTATION_270:反向竖屏
-
-
-
系统重启
adb shell reboot
代码修改的方式
Android 7.1:
-
在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop
文件里,修改ro.sf.hwrotation
的值 Android 10及以上: -
在
device/rockchip/CPU_TYPE/BoardConfig.mk
文件里,修改SF_PRIMARY_DISPLAY_ORIENTATION
的值-
0:横屏
-
90:竖屏
-
180:反向横屏
-
270:反向竖屏 删除out目录下的 build.prop
-
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
默认隐藏状态栏
临时修改的方式
在 adb shell
模式下执行
settings put global policy_control immersive.status=*
代码修改的方式
修改内容如下
diff --git a/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml b/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml index 2092e98d16..59c3ba0321 100644 --- a/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml +++ b/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml @@ -30,7 +30,10 @@ <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be autodetected from the Configuration. --> <bool name="config_showNavigationBar">true</bool> + + <!-- Height of the status bar --> + <dimen name="status_bar_height">0dp</dimen> <!-- Maximum number of supported users --> <integer name="config_multiuserMaximumUsers">8</integer>
默认隐藏导航栏
代码修改的方式
修改内容如下
diff --git a/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml b/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml index 2092e98d16..59c3ba0321 100644 --- a/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml +++ b/device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml @@ -30,7 +30,10 @@ <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be autodetected from the Configuration. --> - <bool name="config_showNavigationBar">true</bool> + <bool name="config_showNavigationBar">false</bool> + <!-- Height of the status bar --> <dimen name="status_bar_height">0dp</dimen>
内置 APP 的几种方式
代码修改的方式
可在vendor
目录下新增APP的文件夹
不可卸载
可参考vendor/rockchip/app
Android.mk
里的内容
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := neardi_sdkapi_demo LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS := optional LOCAL_BUILT_MODULE_STEM := package.apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) #LOCAL_PRIVILEGED_MODULE := LOCAL_CERTIFICATE := platform #LOCAL_OVERRIDES_PACKAGES := LOCAL_SRC_FILES := $(LOCAL_MODULE).apk #LOCAL_REQUIRED_MODULES := #LOCAL_PREBUILT_JNI_LIBS := include $(BUILD_PREBUILT)
* LOCAL_CERTIFICATE := platform含义:APK签名使用系统签名 * LOCAL_PRIVILEGED_MODULE如果不设置或者设置为false,安装位置为/system/app
#### 可卸载 * 在 device/rockchip/CPU_TYPE/PRODUCT_TYPE/ 目录下新建一个 preinstall_del 目录 * 把 apk 拷贝到 device/rockchip/CPU_TYPE/PRODUCT_TYPE/preinstall_del 目录下 * 编译 android
删除内置应用
临时修改的方式
adb shell setprop persist.sys.root_access 3 adb root adb remount adb shell rm -r system/app/APK_NAME/ adb shell reboot
或者
adb shell setprop persist.sys.root_access 3 adb root adb remount adb shell rm -r system/priv-app/APK_NAME/ adb shell reboot
代码修改的方式
-
如果应用有源代码,在应用源代码的
Android.mk
文件里注释掉include $(BUILD_PACKAGE)
-
如果应用是 APK 文件且有
Android.mk
,则在Android.mk
文件里注释掉include $(BUILD_PREBUILT)
开机启动应用
修改代码的方式
非 Launcher
在应用源码里的AndroidManifest.xml
添加如下内容
package="com.example.testfile" android:sharedUserId="android.uid.system"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <receiver android:name="com.example.testfile.BootBroadcastReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </receiver>
增加广播接收的代码BootBroadcastReceiver.java
,比如
package com.example.testfile; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class BootBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "sjft"; public static final String EXTRA_VOLUME_STATE = "android.os.storage.extra.VOLUME_STATE"; public static final int STATE_UNMOUNTED = 0; public static final int STATE_CHECKING = 1; public static final int STATE_MOUNTED = 2; public static final int STATE_MOUNTED_READ_ONLY = 3; public static final int STATE_FORMATTING = 4; public static final int STATE_EJECTING = 5; public static final int STATE_UNMOUNTABLE = 6; public static final int STATE_REMOVED = 7; public static final int STATE_BAD_REMOVAL = 8; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (action.equals("android.intent.action.PACKAGE_REPLACED")){ String packageName = intent.getData().getSchemeSpecificPart(); Log.v(TAG,"BootBroadcastReceiver packageName:"+packageName); if(context.getPackageName().equals(packageName)){ Intent launchIntent = new Intent(context, MainActivity.class);//重新启动应用 //此处如果不想写死启动的Activity,也可以通过如下方法获取默认的启动Activity //Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(launchIntent); } } else if (action.equals("android.intent.action.BOOT_COMPLETED")) { Intent launchIntent = new Intent(context, MainActivity.class);//重新启动应用 //此处如果不想写死启动的Activity,也可以通过如下方法获取默认的启动Activity //Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(launchIntent); } } }
-
开机自启动 apk 需要系统签名(系统签名文件)
-
必须先打开一次开机自启动 apk,才能接收到开机完成的广播
Launcher
-
删除或者不编译 SDK 里的 Launcher 应用 在应用源码里的
AndroidManifest.xml
里最先启动的 Activity 添加如下内容
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
默认语言的修改
语言的支持列表可以查看build/target/product/languages_full.mk
。
临时修改的方式
系统可读可写
adb shell setprop persist.sys.root_access 3 adb root adb remount
-
修改
/system/build.prop
文件中ro.product.locale
的值(Android 10及以上为:/vendor/build.prop
)-
en-US:英文
-
zh-CN:中文 系统重启
-
adb shell reboot
代码修改的方式
-
在
build/target/product/full_base.mk
里修改PRODUCT_LOCALES
的值 中文
PRODUCT_LOCALES := zh_CN
删除 out 目录下的 build.prop
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
默认时区的修改
时区的支持列表可以查看frameworks/base/packages/SettingsLib/res/xml/timezones.xml
。
临时修改的方式
系统可读可写
adb shell setprop persist.sys.root_access 3 adb root adb remount
-
修改
/system/build.prop
文件中persist.sys.timezone
的值(Android 10及以上为:/vendor/build.prop
)-
Asia/Shanghai
:UTC+8 系统重启
-
adb shell reboot
代码修改的方式
-
Android7.1/Android10
-
在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop
文件里,修改persist.sys.timezone
的值-
Asia/Shanghai
:UTC+8 Android11
-
-
在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk
文件里添加如下内容:
-
PRODUCT_PROPERTY_OVERRIDES += persist.sys.timezone=Asia/Shanghai
删除 out 目录下的 build.prop
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
默认 ROOT
临时修改的方式
adb shell setprop persist.sys.root_access 3
代码修改的方式
Android7.1/Android10.0
* 在`device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop`文件里,添加如下内容:
persist.sys.root_access=3
Android11 * 在device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk
文件里添加如下内容:
PRODUCT_PROPERTY_OVERRIDES += persist.sys.root_access=3
删除 out 目录下的 build.prop
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
默认系统时间24小时制
代码修改的方式
diff --git a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml index f95ecc6535..06055dba7b 100644 --- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml +++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml @@ -244,4 +244,6 @@ <!-- should show the screenshot button default --> <integer name="def_screenshot_button_show">0</integer> +<!-- value 12/24/null 对应设置 12/24/自动--> + <string name="def_time_12_24" translatable="false">24</string> </resources> diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index b3ff9d08a8..ebdd5d3637 100644 --- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -2261,6 +2261,9 @@ class DatabaseHelper extends SQLiteOpenHelper { private void loadSystemSettings(SQLiteDatabase db) { ...... + + loadStringSetting(stmt, Settings.System.TIME_12_24, + R.string.def_time_12_24);
默认永不休眠
代码修改的方式
diff --git a/device/rockchip/common/overlay_screenoff/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/device/rockchip/common/overlay_screenoff/frameworks/base/packages/SettingsProvider/res/values/defaults.xml index 77499e6356..2573ace4c5 100644 --- a/device/rockchip/common/overlay_screenoff/frameworks/base/packages/SettingsProvider/res/values/defaults.xml +++ b/device/rockchip/common/overlay_screenoff/frameworks/base/packages/SettingsProvider/res/values/defaults.xml @@ -17,7 +17,8 @@ */ --> <resources> - <integer name="def_screen_off_timeout">0x7fffffff</integer> + <integer name="def_screen_off_timeout">2147483647</integer> + <bool name="def_lockscreen_disabled">true</bool>
设置时间无效
设置的系统时间早于编译时间,重启设置默认为编译时间
代码修改的方式
diff --git a/frameworks/base/services/core/java/com/android/server/AlarmManagerService.java b/frameworks/base/services/core/java/com/android/server/AlarmManagerService.java index 7cdcc01bc0..10f4808ecb 100644 --- a/frameworks/base/services/core/java/com/android/server/AlarmManagerService.java +++ b/frameworks/base/services/core/java/com/android/server/AlarmManagerService.java @@ -1510,11 +1510,11 @@ class AlarmManagerService extends SystemService { final long systemBuildTime = Long.max( 1000L * SystemProperties.getLong("ro.build.date.utc", -1L), Long.max(Environment.getRootDirectory().lastModified(), Build.TIME)); - if (mInjector.getCurrentTimeMillis() < systemBuildTime) { + /*if (mInjector.getCurrentTimeMillis() < systemBuildTime) { Slog.i(TAG, "Current time only " + mInjector.getCurrentTimeMillis() + ", advancing to build time " + systemBuildTime); mInjector.setKernelTime(systemBuildTime); - } + }*/ // Determine SysUI's uid mSystemUiUid = mInjector.getSystemUiUid();
默认打开网络 ADB
临时修改的方式
方式一
adb shell setprop persist.internet_adb_enable 1
方式二
-
打开“开发者选项” 打开
ADB over network
-
Settings
–>Developeroptions
–>ADB network
代码修改的方式
Android7.1/Android10
* 在`device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop`文件里,添加如下内容:
persist.internet.adb.enable=1
Android11 * 在device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk
文件里,添加如下内容:
PRODUCT_PROPERTY_OVERRIDES += persist.internet.adb.enable=1
删除 out 目录下的 build.prop
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
默认设置 OTG USB3.0 为 devices 模式
临时修改的方式
adb shell setprop persist.usb.mode 2
代码修改的方式
Android7.1/Android10
* 在`device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop`文件里,添加如下内容:
persist.usb.mode=2
Android11 * 在device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk
文件里,添加如下内容:
PRODUCT_PROPERTY_OVERRIDES += persist.usb.mode=otg
删除 out 目录下的 build.prop
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop
打开或关闭未知应用安装功能
代码修改的方式
Android 7.1
在frameworks/base/packages/SettingsProvider/res/values/defaults.xml
文件里,修改def_install_non_market_apps
的值。
-
false : 关闭
-
true : 打开
Android 10及以上
在Android10中,已经删除了”允许未知来源”安装应用程序的永久授权选项,从系统设置当中已经找不到该开关,谷歌将永久授权修改为每次的单独授权,当用户每次安装第三方来源的Android软件时需要对软件权限进行手动确认。
打开或关闭触摸声音
代码修改的方式
在frameworks/base/packages/SettingsProvider/res/values/defaults.xml
文件里,修改def_sound_effects_enabled
的值。
-
false : 关闭
-
true : 打开
配置 USB 摄像头前置或者后置
默认是前置的。(Android7.1 and Android10)
临时修改的方式
前置
adb shell setprop persist.sys.uvc.facing front
后置
adb shell setprop persist.sys.uvc.facing back
代码修改的方式
-
Android7.1/Android10 在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop
文件里,添加如下内容:* 前置
persist.sys.uvc.facing=front
* 后置
persist.sys.uvc.facing=back
-
Android11 在
device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk
文件里,添加如下内容:* 前置
PRODUCT_PROPERTY_OVERRIDES += persist.sys.uvc.facing=front
* 后置
PRODUCT_PROPERTY_OVERRIDES += persist.sys.uvc.facing=back
删除 out 目录下的 build.prop
rm out/target/product/PRODUCT_TYPE/obj/ETC/system_build_prop_intermediates/build.prop