RK3288平台Android6.0系统修改默认Launcher

本文介绍了如何在RK3288平台上修改Android 6.0系统,将默认的Launcher替换为自定义版本。主要涉及对frameworks/base/core/java/com/android/internal/app/ResolverActivity.java文件的修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改文件:

frameworks/base/core/java/com/android/internal/app/ResolverActivity.java

public class ResolverActivity extends Activity {
……//此处省略好多行
private static final String DEFAULT_HOME = "persist.sys.default.home";
……//此处省略好多行
    protected void onCreate(Bundle savedInstanceState, Intent intent,
            CharSequence title, int defaultTitleRes, Intent[] initialIntents,
            List<ResolveInfo> rList, boolean alwaysUseOption) {
        setTheme(R.style.Theme_DeviceDefault_Resolver);
        super.onCreate(savedInstanceState);
        ……//此处省略好多行
        setupDefaultLauncher(); //封装一个设置默认桌面的函数
        ……//此处省略好多行
    }
……//此处省略好多行
    private void setupDefaultLauncher() {
        String first = "";
        try{
            first =  SystemProperties.get(DEFAULT_HOME);
        }catch(Exception e){
            Log.w(TAG,"exception error get DEFAULT_HOME");
        }
     
<think>我们计划在RK3128 Android 7.1设备上将默认Launcher替换为当贝桌面。主要步骤包括: 1. 移除原生Launcher3的HOME属性,使其不再作为默认桌面。 2. 确保当贝桌面具有HOME属性,以便系统将其识别为默认桌面。 3.系统设置中清除默认桌面设置(如有必要)。 具体步骤: ### 一、修改原生Launcher3的AndroidManifest.xml(移除HOME属性) 根据引用[1]中的方法,我们需要注释掉原生Launcher3的HOME属性,这样系统就不会将其视为默认桌面。 1. 打开文件:`packages/apps/Launcher3/AndroidManifest.xml` 2. 找到包含`android.intent.category.HOME`的category行,将其注释掉。 修改前: ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY"/> </intent-filter> ``` 修改后: ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <!-- <category android:name="android.intent.category.HOME" /> --> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY"/> </intent-filter> ``` 这样,原生Launcher3就不再具有HOME属性,不会成为默认桌面。 ### 二、安装当贝桌面并确保其具有HOME属性 当贝桌面本身应该已经声明了HOME属性(在它的AndroidManifest.xml中)。我们只需将其预装到系统中,并确保系统将其识别为可用的桌面应用。 1. 将当贝桌面APK放入系统预装目录,例如`system/priv-app/DBLauncher/`(目录名可自定义)。 2. 在该目录下创建`DBLauncher.apk`(假设当贝桌面APK命名为DBLauncher.apk)并设置权限。 ### 三、修改系统以设置当贝桌面为默认(可选) 在系统第一次启动时,如果有多个应用具有HOME属性,系统会弹出选择框。但我们已经移除了原生Launcher3的HOME属性,所以当贝桌面应该是唯一的HOME应用,因此会被自动设为默认。 如果系统之前已经设置过默认桌面,我们需要清除默认设置,可以通过以下方法之一: #### 方法1:清除默认桌面设置(通过adb命令) 在设备上执行: ```bash adb shell pm clear com.android.launcher3 # 清除原生Launcher3的数据(包括默认设置) adb shell pm clear com.dangbei.tvlauncher # 清除当贝桌面数据(包名请替换为实际的当贝桌面包名) ``` 然后重启设备,系统会重新选择默认桌面。 #### 方法2:在代码中设置默认Launcher系统修改) 如果我们希望在系统代码层面指定默认桌面,可以参考引用[2]中的思路,在系统启动时通过代码设置默认Launcher。但这种方法需要修改系统源码。 在`packages/apps/Provision`(系统初始化向导)或`framework`中修改,在系统第一次启动时设置默认桌面。 例如,在`Provision`的某个环节添加: ```java // 设置默认Launcher的包名 String defaultLauncher = "com.dangbei.tvlauncher"; // 当贝桌面包名 PackageManager pm = getPackageManager(); ComponentName component = new ComponentName(defaultLauncher, "com.dangbei.tvlauncher.MainActivity"); // 替换为当贝桌面的主Activity pm.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_HOME); filter.addCategory(Intent.CATEGORY_DEFAULT); pm.clearPackagePreferredActivities(defaultLauncher); // 清除旧设置 pm.addPreferredActivity(filter, 0, new ComponentName[]{component}, component); ``` ### 四、编译并烧写系统 1. 编译整个系统或单独编译Launcher3模块: ```bash source build/envsetup.sh lunch rk3128-eng # 根据实际产品选择 mmm packages/apps/Launcher3 # 编译修改后的Launcher3 make snod # 重新生成system.img ``` 或者编译整个系统: ```bash make -j8 ``` 2. 将生成的固件烧录到设备中。 ### 五、验证 设备启动后,应该直接进入当贝桌面,且按Home键也会回到当贝桌面。 ### 注意事项 1. 当贝桌面的包名和主Activity需要替换为实际的名称(通常当贝桌面的主Activity为`com.dangbei.launcher.ui.ActivityMain`,但请以实际为准)。 2. 如果系统中有多个Launcher(如系统自带的Launcher2和Launcher3),需要确保其他Launcher也没有设置HOME属性,或者通过其他方式禁用。 3.Android 7.1中,系统设置中的“主屏幕应用”选项应该显示当贝桌面为默认。 ### 调试技巧 如果修改后没有生效,可以通过以下命令检查: ```bash adb shell dumpsys package com.dangbei.tvlauncher # 查看当贝桌面的intent-filter adb shell dumpsys package com.android.launcher3 # 查看原生Launcher3的intent-filter adb shell dumpsys window windows | grep mCurrentFocus # 查看当前焦点窗口(即当前桌面) ``` §§相关问题§§ 1. 如何获取当贝桌面的包名和主Activity名称? 2. 修改系统启动出现黑屏或循环重启怎么办? 3. 如何彻底移除系统自带的Launcher3? 4. 当贝桌面无法正常显示应用列表如何解决? [^1]: RK3326 Android 8.1 取消系统默认launcher3的home属性,保证第三方的launcher正常使用。 [^2]: RK3288平台Android6.0系统修改默认Launcher,通过代码设置默认Launcher。</think>要将RK3128设备上运行的Android 7.1系统默认Launcher替换为当贝桌面,请按照以下步骤操作: ### 一、修改原生Launcher3的配置 1. **禁用原生Launcher的HOME属性** 修改`packages/apps/Launcher3/AndroidManifest.xml`: ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <!-- 注释掉HOME属性 --> <!-- <category android:name="android.intent.category.HOME" /> --> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY"/> </intent-filter> ``` 这样系统就不会将原生Launcher识别为默认桌面[^1]。 ### 二、设置当贝桌面为默认Launcher 2. **修改默认Launcher选择逻辑** 在`packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java`中添加: ```java public static void setDefaultLauncher(Context context) { PackageManager pm = context.getPackageManager(); ComponentName component = new ComponentName("com.dangbei.tvlauncher", "com.dangbei.launcher.ui.ActivityMain"); // 清除旧设置 pm.clearPackagePreferredActivities("com.android.launcher3"); // 设置新Launcher IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_HOME); pm.addPreferredActivity(filter, 0, new ComponentName[]{component}, component); } ``` 在`onCreate()`中调用该方法[^2]。 ### 三、集成当贝桌面到系统镜像 3. **预置当贝桌面APK** ```bash # 创建预置目录 mkdir -p vendor/rockchip/common/apps/DBLauncher # 复制当贝桌面APK cp dangbei_launcher.apk vendor/rockchip/common/apps/DBLauncher/DBLauncher.apk # 创建Android.mk echo 'LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := DBLauncher LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS := optional LOCAL_BUILT_MODULE_STEM := package.apk LOCAL_MODULE_SUFFIX := \$(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_PRIVILEGED_MODULE := true LOCAL_CERTIFICATE := PRESIGNED LOCAL_SRC_FILES := DBLauncher.apk include $(BUILD_PREBUILT)' > vendor/rockchip/common/apps/DBLauncher/Android.mk ``` 4. **添加编译配置** 在`device/rockchip/rk3128/device.mk`中添加: ```makefile PRODUCT_PACKAGES += \ DBLauncher ``` ### 四、编译与刷机 ```bash # 全编译 make -j8 # 单独生成system.img make snod # 烧录镜像 adb reboot bootloader fastboot flash system system.img fastboot reboot ``` ### 五、验证与调试 1. **开机后检查**: ```bash adb shell dumpsys window windows | grep mCurrentFocus # 应显示:mCurrentFocus=Window{... com.dangbei.tvlauncher/...} ``` 2. **重置默认设置**(如果需要): ```bash adb shell pm clear com.android.launcher3 adb shell pm clear com.dangbei.tvlauncher ``` ### 注意事项 1. 当贝桌面包名通常是`com.dangbei.tvlauncher`,主Activity是`com.dangbei.launcher.ui.ActivityMain`,请以实际APK为准 2. 如果系统有多个Launcher,需在`frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java`中修改`resolveIntent()`方法 3. 首次启动时系统可能弹出Launcher选择框,选择"始终"即可 > **提示**:修改后若出现黑屏,可通过`adb logcat | grep -E 'ActivityManager|Launcher'`查看崩溃日志[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值