需求:
要設置一應用為桌面應用,且重啟開機時不彈出選擇彈窗,直接默認非原系統應用。
實現方法:
實現方法一共兩種:
- 讀取當前有多少應用是桌面應用,在開機啟動時,匹配所需應用為默認應用。
- 直接把所需應用設置為系統桌面應用。
前一種方法,可以實現系統內多個桌面應用切換,當不想用第三方應用時,可以從設置中切換回原生桌面應用。第二種方法就比較絕,相當於直接把第三方應用當作系統桌面應用,但是若該應用出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,就是干電視盒子的。