21-Android13.0系统定制
SDK - 指代源码路径
console - 指代调试控制台
ADB - Android Debug Bridge命令行工具,下文指代可运行ADB的环境
1. 开机LOGO定制
开机LOGO分两个部分,分别是Uboot阶段、Kernel阶段
Uboot阶段解析图片kernel-5.10/logo.bmp
Kernel阶段解析图片kernel-5.10/logo_kernel.bmp
(SDK)$ ls kernel-5.10/*.bmp
logo.bmp
logo_kernel.bmp
2. 开机动画定制
你制作的开机动画放到指定目录
(SDK)$ ls device/rockchip/common/bootshutdown/bootanimation.zip
打开配置
(SDK)$ vim device\rockchip\common\BoardConfig.mk
-BOOT_SHUTDOWN_ANIMATION_RINGING ?= false
+BOOT_SHUTDOWN_ANIMATION_RINGING ?= true
3. 默认屏幕方向
默认修改显示方向
(SDK)$ vim device/rockchip/$(dev)/BoardConfig.mk
(SDK)$ vim device/rockchip/rk356x/BoardConfig.mk // K1
SF_PRIMARY_DISPLAY_ORIENTATION := 0 //0°
SF_PRIMARY_DISPLAY_ORIENTATION := 90 //90°
SF_PRIMARY_DISPLAY_ORIENTATION := 180 //180°
SF_PRIMARY_DISPLAY_ORIENTATION := 270 //270°
$(dev) 根据主板cpu进行选择
K1/K1B - rk356x
K3 - rk3562
K8 - rk3588
ADB修改显示方向
// 0°
(ADB)$ adb shell settings put system user_rotation 0
// 90°
(ADB)$ adb shell settings put system user_rotation 1
// 180°
(ADB)$ adb shell settings put system user_rotation 2
// 270°
(ADB)$ adb shell settings put system user_rotation 3
修改触摸方向
可以参考LCD配置文档:单触摸屏驱动配置
4. 默认隐藏状态栏
Android13 默认隐藏状态栏修改如下:
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -945,6 +945,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
createAndAddWindows(result);
+ mStatusBarWindowController.setBarVisibility(View.GONE);
+
+
if (mWallpaperSupported) {
// Make sure we always have the most current wallpaper info.
IntentFilter wallpaperChangedFilter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
index 7a4e35f159a..bdbcd6bdffa 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
@@ -149,6 +149,10 @@ public class StatusBarWindowController {
apply(mCurrentState);
}
+ public void setBarVisibility(int visibility) {
+ mStatusBarWindowView.setVisibility(visibility);
+ }
+
/** Adds the given view to the status bar window view. */
public void addViewToWindow(View view, ViewGroup.LayoutParams layoutParams) {
mStatusBarWindowView.addView(view, layoutParams);
Android13默认禁止状态栏下拉修改如下:
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -536,10 +536,12 @@ public class CommandQueue extends IStatusBar.Stub implements
// TODO(b/118592525): add multi-display support if needed.
public boolean panelsEnabled() {
- final int disabled1 = getDisabled1(mDisplayTracker.getDefaultDisplayId());
- final int disabled2 = getDisabled2(mDisplayTracker.getDefaultDisplayId());
- return (disabled1 & StatusBarManager.DISABLE_EXPAND) == 0
- && (disabled2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0;
+ return false;
+ // final int disabled1 = getDisabled1(mDisplayTracker.getDefaultDisplayId());
+ // final int disabled2 = getDisabled2(mDisplayTracker.getDefaultDisplayId());
+ // return (disabled1 & StatusBarManager.DISABLE_EXPAND) == 0
+ // && (disabled2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0;
+
}
5. 默认隐藏导航栏
Android13默认隐藏导航栏修改如下:
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -1234,7 +1234,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView);
mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
- createNavigationBar(result);
+ // createNavigationBar(result);
if (ENABLE_LOCKSCREEN_WALLPAPER && mWallpaperSupported) {
mLockscreenWallpaper = mLockscreenWallpaperLazy.get();
Android13默认使用手势导航:
--- a/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/device/rockchip/rk356x/overlay/frameworks/base/core/res/res/values/config.xml
@@ -61,7 +61,7 @@
0: 3 button mode (back, home, overview buttons)
1: 2 button mode (back, home buttons + swipe up for overview)
2: gestures only for back, home and overview -->
- <integer name="config_navBarInteractionMode">0</integer>
+ <integer name="config_navBarInteractionMode">2</integer>
<bool name="config_swipe_up_gesture_setting_available">true</bool>
</resources>
6. 内置第三方APP
参考 Settings2.apk
rk-android13.0\vendor\rockchip\common\apps\Settings2 放你的apk和Android.bp
Android.mk 方式
###############################################################################
# Settings2
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Settings2
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 := PRESIGNED
#LOCAL_OVERRIDES_PACKAGES :=
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#LOCAL_REQUIRED_MODULES :=
#LOCAL_PREBUILT_JNI_LIBS :=
include $(BUILD_PREBUILT)
Android.bp 方式
android_app_import {
name: "test",
apk: "test.apk",
//presigned: true,
certificate: "platform",
dex_preopt: {
enabled: true,
},
privileged: true,
//product_specific: true,
//proprietary: true,
enforce_uses_libs: false,
}
在 PRODUCT_PACKAGES 加入编译目标
(SDK)$ vim vendor/rockchip/common/apps/apps.mk
PRODUCT_PACKAGES += \
Settings2
7. 开机自启动APP
通过接收开机广播完成后,启动APP
1、修改增加 APP 的权限以及广播接收 AndroidManifest.xml
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
</application>
2、增加广播接收 MyReceiver.java
package com.example.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Log.i("kickpi", "onReceive: start app !!!");
}
}
}
3、预装app 到 /system/priv-app/
方式一,编译预装到源码,参考 [内置第三方APP](# 6. 内置第三方APP)
方式二,push 方式预装
adb root; adb remount; adb push ./app /system/priv-app/
8. 默认语言
$ vim build/target/product/full_base.mk
PRODUCT_LOCALES := en_US
en_US
英文
zh_CN
中文
9. 默认时区
10. 默认永不休眠
$ vim device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_screen_off_timeout">2147483647</integer>
11. 默认禁止锁屏
$ vim frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<bool name="def_lockscreen_disabled">true</bool>
12. 签名APK
SDK源码中进行重签
$ cd rk-android13.0/
$ java -Xmx2048m -Djava.library.path="out/host/linux-x86/lib64" \
-jar out/host/linux-x86/framework/signapk.jar --disable-v2 \
-w build/target/product/security/platform.x509.pem \
build/target/product/security/platform.pk8 \
old.apk new.apk
使用签名相关文件重签
SDK中需要的签名相关文件
out/host/linux-x86/lib64
out/host/linux-x86/framework/signapk.jar
build/target/product/security/platform.x509.pem
build/target/product/security/platform.pk8
根据提供文件进行重签,具体路径自行调整
签名包 rk-android13.0-key.tar.gz
$ tar -xvf rk-android13.0-key-20240919.tar.gz
$ ls rk-android13.0-key
$ java -Xmx2048m -Djava.library.path="rk-android13.0-key/lib64" \
-jar rk-android13.0-key/signapk.jar --disable-v2 \
-w rk-android13.0-key/platform.x509.pem \
rk-android13.0-key/platform.pk8 \
old.apk new.apk
13.网络ADB
网口ADB需要先adb启动5555端口服务后
(ADB)$ adb tcpip 5555
(ADB)$ adb connect 192.168.77.170
connected to 192.168.77.170:5555
(ADB)$ adb devices
List of devices attached
7c001075a313c7c1c12 device
192.168.77.170:5555 device
(ADB)$ adb -s 192.168.77.170:5555 shell
apollo-p2:/ $ su
开机默认启动5555端口
需要通过USB adb操作
(ADB)$ adb root
(ADB)$ adb remount
(ADB)$ adb pull /system/build.prop .
(ADB)$ vim build.prop
+ service.adb.tcp.port=5555
(ADB)$ adb push .\build.prop /system/build.prop
14. HDMI RX APK 定制
K8 有一路 HDMI RX 输入,Android 可以通过打开 HdmiIn APK 显示 HDMI RX 画面。
HdmiIn APK 路径
(SDK)$ packages/apps/rkCamera2/
hdmi in 画面全屏配置
--- a/packages/apps/rkCamera2/src/com/android/rockchip/camera2/activity/MainActivity.java
+++ b/packages/apps/rkCamera2/src/com/android/rockchip/camera2/activity/MainActivity.java
@@ -207,7 +207,7 @@ public class MainActivity extends Activity implements
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+ fullScreen();
- //fullScreen();
rootView = (RelativeLayout) findViewById(R.id.root_view);
rootView.setOnClickListener(this);
15.修改debug口波特率
修改路径:
rk-android13.0\kernel-5.10\arch\arm64\boot\dts\rockchip\rk3568-android.dtsi
修改rockchip,baudrate内容:
fiq-debugger {
compatible = "rockchip,fiq-debugger";
rockchip,serial-id = <2>;
rockchip,wake-irq = <0>;
/* If enable uart uses irq instead of fiq */
rockchip,irq-mode-enable = <1>;
rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */
interrupts = <GIC_SPI 252 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&uart2m0_xfer>;
status = "okay";
};
rockchip 官方文档
rockchip官方在代码中存放了文档 RKDocs
(SDK)$ tree -L 1 RKDocs/
RKDocs/
├── android
└── common
Last updated