需求:
要设置一应用为桌面应用,且重启开机时不弹出选择弹窗,直接默认非原系统应用。
实现方法:
实现方法一共两种:
- 读取当前有多少应用是桌面应用,在开机启动时,匹配所需应用为默认应用。
- 直接把所需应用设置为系统桌面应用。
前一种方法,可以实现系统内多个桌面应用切换,当不想用第三方应用时,可以从设置中切换回原生桌面应用。第二种方法就比较绝,相当于直接把第三方应用当作系统桌面应用,但是若该应用出BUG时,桌面就不能启动,因为桌面就是该应用。
第一种方法实现非常繁琐,第二种方法实现较为简单,所以本方法采用第二种方法。
具体实现步骤:
1、APK源码中设置应用为桌面应用
只需APK的AndroidMainfest.xml
中修改如下即可:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
修改后即可实现如下效果:
但是,以上修改在每次开机时还会弹出此框,所以需要对Android源码加以修改。
2、Android源码中设置应用为系统预装应用
在T:\Code\RK3399PRO_HDMI_ANDROID8\vendor\rockchip\common\apps
文件夹下建立一文件夹,名称为EV_WebViewTest
,在该文件夹下放入APK文件,重命名为EV_WebViewTest.apk
,并建立一个Android.mk
文件,文件内容如下:
# EV_WebViewTest
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := EV_WebViewTest
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_SRC_FILES := $(LOCAL_MODULE).apk
#LOCAL_REQUIRED_MODULES :=
#LOCAL_PREBUILT_JNI_LIBS :=
include $(BUILD_PREBUILT)
并在T:\Code\RK3399PRO_HDMI_ANDROID8\vendor\rockchip\common\apps\apps.mk
的文件内添加以下代码:
PRODUCT_PACKAGES += \
EV_WebViewTest
这样编译完固件烧录后,就会在系统内多了一个预装APK,其名称不一定是EV_WebViewTest
,以APK项目设置为准。
3、Android源码中设置应用为系统桌面应用
本操作十分简单,只需在T:\Code\RK3399PRO_HDMI_ANDROID8\vendor\rockchip\common\apps\EV_WebViewTest\Android.mk
中添加以下即可:
LOCAL_OVERRIDES_PACKAGES := Launcher3
解释一下:该语句的意思就是说,系统原生的Launcher3
应用将不会被编进系统,被EV_WebViewTest
这个应用给替换了。
LOCAL_OVERRIDES_PACKAGES
这个语句通常用于替换系统原生内置应用。
仔细观察T:\Code\RK3399PRO_HDMI_ANDROID8\vendor\rockchip\common\apps
该文件下许多应用,都用到了该语句,如什么TVLauner,就是干电视盒子的。