提示: MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标
前言
MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。
一、需求
MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标
这里综合涉及到以下知识点,需要掌握的:
- 定义属性
- 内置应用
- 开机自启定义的应用
- 源Launcher3 主界面第一屏幕布局自定义
实现效果如下:
开机自启暂不演示,Launcher3 桌面图标效果如下:


二、参考资料
原生Launcher3 下实现开机自启:
原生Launcher3 MTKAndroid12-13-开机应用自启功能实现
Launcher3-实现家长管控-儿童模式-老人模式
针对非原生Launcher3 实现开机自启第三方应用介绍
Android系统实现开机自启第三方应用
系统数据库、系统属性的添加与使用:
Android 系统属性添加篇
修改Launcher3 原生桌面布局显示
MTKLauncher_布局页面分析
MTK平台下,内置应用指导:
MTK平台-内置应用作为系统Launcher
MTK内置第三方APP-卸载不可卸载-签名问题
三、修改文件
\device\mediatek\system\common\device.mk
\vendor\mediatek\proprietary\packages\3rd-party\
\vendor\mediatek\proprietary\packages\apps\Launcher3\src\com\android\launcher3\Launcher.java
\vendor\mediatek\proprietary\packages\apps\Launcher3\res\xml\default_workspace_5x5.xml
四、实现方案
1、定义一个属性
路径文件:\device\mediatek\system\common\device.mk 添加一个属性定义即可,如下:
这里自定义一个属性目的是为了在加载Launcher3 启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。
persist.fise.kaijiziqipkg=com.liulishuo.chronus

编译固件版本烧录后,自检查下是属性配置是否成功,如下:

2、内置应用App
路径:
\vendor\mediatek\proprietary\packages\3rd-party\
\device\mediatek\system\common\device.mk
在3rd-party 文件夹下创建自己的需要内置的文件夹,并放置需要内置的应用,如下:

编译文件.mk 文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := tp_zuoyebang
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_PROPRIETARY_MODULE := true
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)
在配置文件 \device\mediatek\system\common\device.mk 配置需要编译的第三方app,内置到系统里面去:

3、开机自启定义的应用
这里有两种方案,要么在Launcher3 里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3 中去实现,体验效果更好。
路径:\vendor\mediatek\proprietary\packages\apps\Launcher3\src\com\android\launcher3\Launcher.java
修改如下:
// 第一步:定义属性,
// modify by fangchen start
private static final String FISE_KAIJI_ZIAI_APP = "persist.fise.kaijiziqipkg";
// modify by fangchen end
// 第二步:在onCreate 方法中获取属性并启动应用
// modify by fangchen start
Log.e(TAG, "onCreate modify start ");
String ziQiAppPkg = SystemProperties.get(FISE_KAIJI_ZIAI_APP,"com.liulishuo.chronus");
Log.e(TAG, "onCreate ziQiAppPkg value:"+ziQiAppPkg);
if(TextUtils.isEmpty(ziQiAppPkg)){
Log.e(TAG, "onCreate ziQiAppPkg no value:");
}else{
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(ziQiAppPkg);
if (launchIntent != null) {
Log.e(TAG, "onCreate zhunbei start app value:"+ziQiAppPkg);
startActivity(launchIntent);
} else {
Log.d(TAG," app pkg:"+ziQiAppPkg+" zanwei anzhuang");
}
}
Log.e(TAG, "onCreate modify end ");
// modify by fangchen end
4、更改主界面布局
路径:\vendor\mediatek\proprietary\packages\apps\Launcher3\res\xml\default_workspace_5x5.xml
这里面自定义布局需求,涉及到很多知识点、规则、语法结构,如果不明白的需要自行补充一下知识点和基础。
配置如下:
<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3">
<!-- Hotseat (We use the screen as the position of the item in the hotseat) -->
<!-- Dialer, Messaging, [Maps/Music], Browser, Camera -->
<resolve
launcher:screen="0"
launcher:x="1"
launcher:y="4" >
<favorite
launcher:packageName="com.liulishuo.chronus"
launcher:className="com.liulishuo.chronus.MainActivity" />
</resolve>
<resolve
launcher:screen="0"
launcher:x="2"
launcher:y="4" >
<favorite
launcher:packageName="com.android.settings"
launcher:className="com.android.settings.Settings" />
</resolve>
</favorites>
总结
- 这里简单来说就是一个定义第三方App 作为开机应用
APP,这里面还是有部分知识点的,如需求所说:自定义属性、内置应用、开机自启、在哪里做开机自启业务、配置Launcher3网格布局。 - 涉及到知识点蛮多,如果串联起来。 这些都是常见的需求,需要掌握并熟练使用并配置。
- 这里以
MTK Android12环境上操作实现,其它版本、平台实现需求思想一样的,按照思路思想实现即可。 - 对于
Launcher3中,如何实现桌面配置布局,GMS、非GSM中Launcher3源码位置不一致的,这一点特别容易遗漏。
674





