RK356x Android11更换默认的Launcher

1、 开发环境

ubuntu版本:18.04
开发平台:RK356x
Android版本:android11

2、目的

android11 系统自带了一个启动器Launcher3,在android源码路径下的packages/apps/Launcher3下,现需要将我们自己开发的Launcher放到android源码上,让系统启动的时候自动运行我们的Launcher,从而达到想要的效果。

3、方法

1.在源码android\vendor\rockchip\common\apps\路径下新建一个目录hybLauncher

2. 将hybLauncher.apk软件包拷贝进去到hybLauncher文件夹中(文件夹名和apk的名需要一样)

3.在hybLauncher文件夹中新建一个Android.mk文件(相当于linux下的Makefile文件)RK356x Android11更换默认的Launcher_第1张图片

Android.mk内容如下,(可以参考一下apps目录下的其他程序Android.mk)

###############################################################################
# hybLauncher
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hybLauncher
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)

4. 修改apps目录下的app.mk文件

PRODUCT_PACKAGES += \
        ComAssistant \
        DoubleCameraTest \
        GPSTest \
        Presentation \
        RpGpio \
        TDGPSTest \
    +   hybLauncher
  
PRODUCT_PACKAGES += \
    RKUpdateService

完成了以上四步后,重新编译,在Android系统启动后,在应用桌面上就应该可以查看得到了。如果想将hybLauncher程序变成默认桌面启动项,可以完成以下操作
源码路径:android\frameworks\base\core\java\com\android\internal\app\ResolverActivity.java

protected void onCreate(Bundle savedInstanceState, Intent intent,
            CharSequence title, int defaultTitleRes, Intent[] initialIntents,
            List<ResolveInfo> rList, boolean supportsAlwaysUseOption) {
        setTheme(appliedThemeResId());
        super.onCreate(savedInstanceState);
		
		if (mResolvingHome)	
		{
			setDefaultLauncher();
			finish();
			return;
		}
		//省略......
}

private void setDefaultLauncher() {
            try {
                final PackageManager pm = getPackageManager();
 
                String defPackageName = "包名";
                String defClassName = "类名";
             
                IntentFilter filter = new IntentFilter();
                filter.addAction("android.intent.action.MAIN");
                filter.addCategory("android.intent.category.HOME");
                filter.addCategory("android.intent.category.DEFAULT");
 
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.addCategory(Intent.CATEGORY_HOME);
                List<ResolveInfo> list = new ArrayList<ResolveInfo>();
                list = pm.queryIntentActivities(intent, 0);
                final int N = list.size();
                ComponentName[] set = new ComponentName[N];
                int bestMatch = 0;
                for (int i = 0; i < N; i++) {
                    ResolveInfo r = list.get(i);
                    set[i] = new ComponentName(r.activityInfo.packageName,
                            r.activityInfo.name);
                    if (r.match > bestMatch) 
							bestMatch = r.match;
                }
                ComponentName preActivity = new ComponentName(defPackageName, defClassName);
                pm.addPreferredActivity(filter, bestMatch, set, preActivity);
 
            } catch (Exception e) {
                e.printStackTrace();
            }
 
    }

完成上述步骤后,重新编译,系统启动后就会自动启动hybLauncher。

4、扩展

软件包:7-zip.exe和AXMLPrinter2.jar
如果只有apk软件包,需要得到该apt中的packagename和classname的话,需要下载7-Zip.exe来打开apt并且提取里面的文件内容。
RK356x Android11更换默认的Launcher_第2张图片

需注意的是AndroidManifest.xml文件,打开该文件是乱码,需要通过反编译出来。
在window上按下window键+R
RK356x Android11更换默认的Launcher_第3张图片

###进入到AndroidManifest.xml所在的目录#######
C:\Users\Administrator>cd Desktop
C:\Users\Administrator\Desktop>java -jar AXMLPrinter2.jar AndroidManifest.xml

java -jar AXMLPrinter2.jar AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:versionCode="1"
        android:versionName="1.0"
        package="com.screen.hybLauncher"
        >
        <uses-sdk
                android:minSdkVersion="8"
                android:targetSdkVersion="16"
                >
        </uses-sdk>
        <application
                android:theme="@7F060001"
                android:label="@7F050000"
                android:icon="@7F020000"
                android:clearTaskOnLaunch="true"
                android:stateNotNeeded="true"
                android:launchMode="2"
                >
                <activity
                        android:label="@7F050000"
                        android:name="com.screen.hybLauncher.HomeScreen"
                        android:excludeFromRecents="true"
                        android:launchMode="2"
                        android:screenOrientation="5"
                        >
                        <intent-filter
                                >
                                <action
                                        android:name="android.intent.action.MAIN"
                                        >
                                </action>
                                <category
                                        android:name="android.intent.category.HOME"
                                        >
                                </category>
                                <category
                                        android:name="android.intent.category.DEFAULT"
                                        >
                                </category>
                        </intent-filter>
                </activity>
        </application>
</manifest>

从上述可以得到包名和类名

 package="com.screen.hybLauncher"
android:name="com.screen.hybLauncher.HomeScreen"

你可能感兴趣的:(瑞芯微RK驱动调试,android)