一、內置應用分爲以下幾種:
1.第三方合作可卸載應用
2.第三方應用不可卸載應用
3.第三方應用不可卸載並且不用動態申請危險權限應用
通常廠商內置應用會放到vendor目錄下再創建自己的目錄名,把需要預置的apk放入對應目錄,並編寫對應的mk文件。
應用是否可用卸載會根據類型最後拷貝到不同的目錄下,例如system/app(不可卸載),system/ third-app(可卸載),system/priv-app(
不可卸載並啓不用動態申請危險權限)。
二、如何將應用不可卸載並且不用動態申請危險權限
通常情況下我們的應用都會有自己的簽名,如果這個簽名和系統簽名不同則不會被作爲第三類應用的,所以需要和系統簽名一樣,
當然我們一般會編寫一個mk腳本再編譯的時候重新給apk簽名保證和系統簽名一致。
以下幾步實現不可卸載並且不用動態申請危險權限應用:
- 在AndroidManifest.xml文件中配置android:sharedUserId="android.uid.system"和系統共享userid
- 將apk放到對應目錄下
- 編寫改apk的mk文件
-
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Module name should match apk name to be installed LOCAL_MODULE := XXXX LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_PREBUILT_JNI_LIBS := \ @lib/armeabi/libxypatch.so #保留原來應用自身簽名 # LOCAL_CERTIFICATE := PRESIGNED #使用系統平臺簽名 LOCAL_CERTIFICATE := platform include $(BUILD_PREBUILT)
-
將目錄mk文件添到系統編譯mk文件中按照格式加就行
# 需要預置的定製應用及三方應用
PRODUCT_PACKAGES += \
SogouInput \
****
三、小結
注意:
- 如果在AndroidManifest.xml文件中配置android:sharedUserId="android.uid.system"表示該應用一定要和系統平臺簽名一致要不然應用無法被解析安裝。
- 動態申請的危險權限還是要寫動態申請方法,如果不寫動態申請權限方法系統也不會將這些權限默認賦予改應用,同時也是爲了保證應用在被用戶手動關閉權限後被再次彈窗提示框讓用戶手動賦予權限。
- 默認賦予應用動態權限只會在第一次啓動賦予一次,如果後續手動關閉應用權限則需要彈框提示用戶手動賦予權限。