1 了解用戶進(jìn)程與系統(tǒng)進(jìn)程
對(duì)于用戶自己編寫的應(yīng)用程序apk來(lái)說(shuō)它本身跑到機(jī)器上只是一個(gè)用戶進(jìn)程
用戶進(jìn)程的特點(diǎn)
- 1 由用戶去啟動(dòng)和關(guān)閉的進(jìn)程
- 2 運(yùn)行在用戶權(quán)限下,只能訪問(wèn)用戶自己的資源
- 3 用戶進(jìn)程的apk一般位于/data/app/下且apk名稱也是隨機(jī)生成
系統(tǒng)進(jìn)程的特點(diǎn)
- 1 由系統(tǒng)來(lái)啟動(dòng)和管理進(jìn)程
- 2 具有更高的系統(tǒng)權(quán)限偿渡,可以訪問(wèn)系統(tǒng)的相關(guān)資源
- 3 系統(tǒng)進(jìn)程的apk一般為/system/目錄下嗜暴,且apk名稱也來(lái)自你編寫的mk文件
倆者不同之處
直觀體驗(yàn)來(lái)說(shuō)
- 1 所在目錄
- 2 進(jìn)程啟動(dòng)和管理
2 如何設(shè)置用戶進(jìn)程變?yōu)橄到y(tǒng)進(jìn)程
首先設(shè)置用戶應(yīng)用程序的AndroidManifest.xml文件添加相關(guān)屬性
<manifest xmlns:android="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)"
package="com.xxxx"
android:sharedUserId="android.uid.system"
coreApp="true">
<application
android:persistent="true"/>
- 1 首先定義 android:sharedUserId="android.uid.system" 械姻,他保證應(yīng)用程序共享用戶id斑响,而多個(gè)進(jìn)程如果都共享相同的userid枉侧,他們是可以互相訪問(wèn)內(nèi)部數(shù)據(jù)的官紫,這也就存在了危險(xiǎn)性
- 2 coreApp 設(shè)置核心應(yīng)用程序躺率,一般適用于只有服務(wù)的進(jìn)程玛界,確保這些關(guān)鍵服務(wù)可以在系統(tǒng)啟動(dòng)時(shí)得到優(yōu)先加載和初始化,從而提高系統(tǒng)的穩(wěn)定性和可靠性悼吱。本身也是存在風(fēng)險(xiǎn)的
- 3 android:persistent 設(shè)備重啟后自動(dòng)啟動(dòng)
其次配置應(yīng)用程序要設(shè)置platform簽名慎框,保證具有系統(tǒng)級(jí)別的權(quán)限和信任
build.gradle配置
signingConfigs {
config {
storeFile file('platform.keystore')
storePassword 'android'
keyAlias 'platform'
keyPassword 'android'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
而且要有平臺(tái)簽名文件
image.png
配置完成后你編譯的apk會(huì)包含系統(tǒng)簽名,保證你可以具有系統(tǒng)權(quán)限
最后就簡(jiǎn)單看下應(yīng)用程序mk的編寫
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xxxx
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := .apk
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := xxx.apk
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT := false
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PREBUILT)
這種主要是針對(duì)你目錄下的apk文件在系統(tǒng)編譯時(shí)對(duì)文件進(jìn)行編譯打包后添,放入指定目錄笨枯,在系統(tǒng)運(yùn)行時(shí)就可以識(shí)別該應(yīng)用程序
最后在device目錄下的device.mk定義系統(tǒng)額外加載的模塊
PRODUCT_PACKAGES += xxx
所以這些模塊會(huì)在系統(tǒng)啟動(dòng)后自動(dòng)安裝到設(shè)備上,并且進(jìn)程也啟動(dòng)了
好了遇西,配置完上述這些馅精,你的進(jìn)程就是系統(tǒng)進(jìn)程了,apk也會(huì)放在system目錄下
pm list packages -f |grep xxxxx(進(jìn)程名)
這個(gè)命令可以查看你的進(jìn)程的apk所在路徑粱檀,來(lái)幫助你判斷你的進(jìn)程文件是否位于系統(tǒng)目錄