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文件)
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 \+ hybLauncherPRODUCT_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并且提取里面的文件内容。
需注意的是AndroidManifest.xml文件,打开该文件是乱码,需要通过反编译出来。
在window上按下window键+R
###进入到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"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"android:versionCode="1"android:versionName="1.0"package="com.screen.hybLauncher"><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="16"></uses-sdk><applicationandroid:theme="@7F060001"android:label="@7F050000"android:icon="@7F020000"android:clearTaskOnLaunch="true"android:stateNotNeeded="true"android:launchMode="2"><activityandroid:label="@7F050000"android:name="com.screen.hybLauncher.HomeScreen"android:excludeFromRecents="true"android:launchMode="2"android:screenOrientation="5"><intent-filter><actionandroid:name="android.intent.action.MAIN"></action><categoryandroid:name="android.intent.category.HOME"></category><categoryandroid:name="android.intent.category.DEFAULT"></category></intent-filter></activity></application>
</manifest>
从上述可以得到包名和类名
package="com.screen.hybLauncher"
android:name="com.screen.hybLauncher.HomeScreen"