概述 适用范围 RK3399 Android7.1 Industry RK3399 Android10 RK356X Android11 RK3588 Android12 对于其他 Android 的版本,可供参考。 修改方式 Android 系统定制,一般有 临时修改的方式 和 代码修改的方式 。 临时修改的方式:一般可以通过调试串口或者 ADB 对设备进行操作。 代码修改的方式:修改完代码后,需要进行 SDK 的编译 以及固件的烧录。 其中, SDK 的编译 或者 固件的烧录 参考WiKi教程 。 名词解释 CPU_TYPE:表示主控芯片,比如rk3288,rk3399,rk3399pro, rk356x, rk3588 PRODUCT_TYPE:表示产品类型,比如rk3399_firefly,rk3399_firefly_aio, rk3399_firefly_aioc_ai 定制说明 对于系统的定制的内容,在Android12 Android11, Android10.0 和 Android7.1 Industry会有部分内容不相同,对于这部分内容会对其区分,而没有区分的内容 表示兼容。 开机 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/ET C/system_build_prop_intermediates/build.prop 默认隐藏状态栏 临时修改的方式 在 Settings 应用里,使能选项即可。 "Settings"-->"Display"-->"Always hide the status bar" 代码修改的方式 修改内容如下 diff --git a/frameworks/base/packages/SettingsProvider/ res/values/custom_defaults.xml b/frameworks/base/packages/SettingsPro vider/res/values/custom_defaults.xml index ba87da7ec4..e32c9699f9 100644 --- a/frameworks/base/packages/SettingsProvider/res/values/cus tom_defaults.xml +++ b/frameworks/base/packages/SettingsProvider/res/ values/custom_defaults.xml @@ -12,7 +12,7 @@ true - false + true 内置 APP 的几种方式 代码修改的方式 可在"vendor"目录下新增APP的文件夹 不可卸载 可参考"vendor/firefly/fireflyapi" Android.mk里的内容 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := firefly_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 fireflyapi.mk里的内容 PRODUCT_PACKAGES += \ firefly_sdkapi_demo PRODUCT_COPY_FILES += \ vendor/firefly/fireflyapi/fireflyapi:system/bin/fireflyapi \ v endor/firefly/fireflyapi/fireflyapi.jar:system/framework/fireflyapi.j ar 可卸载 在 device/rockchip/CPU_TYPE/PRODUCT_TYPE/ 目录下新建一个 preinstall_del 目录 把 apk 拷贝到 device/rockchip/CPU_TYPE/PRODUCT_TYPE/preinstall_del 目 录下 编译 android 内置默认输入法 代码修改的方式 获取输入法包名 adb shell settings get secure enabled_input_methods c om.android.inputmethod.latin/.LatinIME:com.iflytek.inputmethod.google /com.iflytek.inputmethod.FlyIME:com.google.android.inputmethod.pinyin /.PinyinIME adb shell settings get secure default_input_method com.iflytek.inputmethod.google/com.iflytek.inputmethod.FlyIME 修改代码如下 diff --git a/frameworks/base/packages/SettingsProvider/ res/values/custom_defaults.xml b/frameworks/base/packages/SettingsPro vider/res/values/custom_defaults.xml index ba87da7ec4..7ed79b4c15 100644 --- a/frameworks/base/packages/SettingsProvider/res/values/cus tom_defaults.xml +++ b/frameworks/base/packages/SettingsProvider/res/ values/custom_defaults.xml @@ -19,4 +19,7 @@ false + + com.android.inputme thod.latin/.LatinIME:com.iflytek.inputmethod.google/com.iflytek.input method.FlyIME:com.google.android.inputmethod.pinyin/.PinyinIME + com.i flytek.inputmethod.google/com.iflytek.inputmethod.FlyIME diff --git a/frameworks/base/packages/SettingsProvider/ src/com/android/providers/settings/DatabaseHelper.java b/frameworks/b ase/packages/SettingsProvider/src/com/android/providers/settings/Data baseHelper.java index cac5f800bd..f705a895b4 100644 --- a/frameworks/ base/packages/SettingsProvider/src/com/android/providers/settings/Dat abaseHelper.java +++ b/frameworks/base/packages/SettingsProvider/src/ com/android/providers/settings/DatabaseHelper.java @@ -2474,6 +2474,11 @@ class DatabaseHelper extends SQLiteOpenHelper { stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)" + " VALUES(?,?);"); + loadStringSetting(stmt, Settings.Secure.ENABLED_INPUT_METHODS, + R.string.enabled_input_methods); + loadStringSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD, + R.string.def_input_method); + loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, R.string.def_location_providers_allowed); 删除内置应用 临时修改的方式 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"> 增加广播接收的代码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 添加如下内容 默认语言的修改 语言的支持列表可以查看"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 @@ 0 + + 24 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); 默认打开网络 ADB 临时修改的方式 方式一 Android7.1 adb shell setprop persist.internet.adb.enable 1 Android10/Android11/Android12 adb shell setprop persist.internet_adb_enable 1 方式二 打开“开发者选项” 打开 ADB over network Settings-->Developer options-->ADB over network 代码修改的方式 Android7.1 在device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop文件里 ,添加如下内容: persist.internet.adb.enable=1 Android10 在device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop文件里, 添加如下内容: persist.internet_adb_enable=1 Android11/Android12 在 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/Android12 在 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 : 打开 修改桌面布局 代码修改的方式 设备开机后,默认加载到桌面的程序快捷方式、小插件、快捷方式导航条( HotSeat)和文件夹的修改方法。 详细参考 开源社区的帖子 。 配置 USB 摄像头前置或者后置 默认是前置的 临时修改的方式 前置 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/Android12 在 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 配置4K UI 代码修改方式: 平台(RK3399/RK356x) Android7.1 在device/rockchip/CPU_TYPE/PRODUCT_TYPE/system.prop文件里 ,添加如下内容: persist.sys.framebuffer.main=3840x2160@25 Android10.0及以上 在 device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk文件里,添加如下 内容: PRODUCT_PROPERTY_OVERRIDES += persist.vendor.framebuffer.main=3840x2160@25 NOTE : 配置 4K UI 占用系统资源较多,最高只能支持到 4K25Hz 左右,不推荐使用 4K UI。如果只是想要播放 4K 视频或是查看 4K 图片,那可以不需要配置 4K UI,系统默认的视频播放器和图片浏览器可以支持。 平台(RK3588) Android12.0及以上 在 device/rockchip/CPU_TYPE/PRODUCT_TYPE/PRODUCT_TYPE.mk文件里,添加如下 内容: PRODUCT_PROPERTY_OVERRIDES += persist.vendor.framebuffer.main=3840x2160@60 NOTE :RK3588 性能强劲可以支持4K UI 60Hz。