Android系统应用
系統應用
Android有一套電子郵件、短信、日歷、互聯網瀏覽和聯系人等的核心應用。平臺的應用與用戶可以選擇安裝的應用一樣,沒有特殊狀態。因此第三方應用可成為用戶的默認網絡瀏覽器、短信 Messenger 甚至默認鍵盤(有一些例外,例如系統的“設置”應用)。
系統應用可用作用戶的應用,以及提供開發者可從其自己的應用訪問的主要功能。例如,如果您的應用要發短信,您無需自己構建該功能,可以改為調用已安裝的短信應用向您指定的接收者發送消息。
簡而言之,“該應用是作為預安裝的或作為system.img(作為Android操作系統的AOSP系統映像)提供的,稱為系統App。 系統應用程序可以輕松訪問某些平臺(應用程序框架)級的API調用”。
系統應用程序是ROM在系統分區中的預安裝應用程序。 換句話說,系統應用程序就是放置在Android設備上/ system / app文件夾下的應用程序。
/ system / app是只讀文件夾。 Android設備用戶無權訪問此分區。 因此,用戶無法直接從中安裝或卸載應用程序。
手機預裝了相機,設置,消息,Google Play商店等應用,制造商通常不提供刪除此類應用的選項,因為這可能會影響設備的功能。 如果要刪除系統應用程序,則需要先對設備進行root用戶操作。
系統應用安裝位置
Android系統應用通常放在/system/app和/system/priv-app中,priv-app中擁有更高的權限,應用安裝到系統有兩種方式;
一、系統整體編譯
應用的Android.mk聲明LOCAL_PRIVILEGED_MODULE := true,這樣通過mk編譯出的apk將打包到img,img燒寫后開機自動安裝在/system/priv-app。
二、push外部開發的應用到/system/priv-app
1、可以按照Android studio編譯出未簽名的apk
2、導出系統中簽名,并將apk簽名
3、adb root; adb remount; adb push new.apk /system/priv-app
4、reboot后會自動安裝
/system/app和/system/priv-app區別
在system/priv-app目錄主要是存放手機廠商定制的系統的系統級應用,比如phone app,settings app,systemui app等,這些應用需要系統及權限,而又不能被用戶卸載掉。這個目錄是在Android KitKat新增加的分區。在KitKat之前版本在系統分區的所有apks都可以使用系統權限,這個更改使手機廠商能夠更好的控制捆綁軟件對敏感權限的訪問。手機廠商在定制一些系統軟件的時候軟件也會需要專門給priv-app添加selinux policy。當然應用需要獲取系統權限還有其他的辦法,在AndroidManifest.xml文件中添加 android:sharedUserId=“android.uid.sysytem”,同時給該apk添加系統簽名,比如小米手機就需要給apk添加小米的系統權限。
/system/priv-app 中包括 Launcher,SystemUI,SettingsProvider 等,均是系統的核心應用,這些應用能使用系統級的權限,4.4 之前的所有 /system/app 下的軟件都能使用系統級的權限,Google 這樣做是把內置到系統的應用也做個級別的區別。
放到 /system/priv-app 下的應用比放到 /system/app 下的應用可以聲明獲得更多的權限。在Android中每個應用都有自己的權限聲明,比如要使用系統限制的權限(例如 android.permission.WRITE_SECURE_SETTINGS),我們就需要把程序安裝到 /system/app 下。
手機被 root 后,通過 adb push 可以把 apk 推送到這兩個目錄,作為系統應用,用戶無法刪除。
android中app主要有3個路徑可以放:
1、data/app —這個就是最為普遍 的第三方應用的apk路徑,安裝在這里一般 可以隨意 進行卸載
2、system/app --系統內置應用,這里面的app是不可以 進行卸載的,所以叫做系統應用,但是系統應用的每個應用的簽名卻沒有要求,即可以是自己應用根據情況確定,比如大部分內置應用是platform,也有shared,media等
3、system/priv-app —這個部分是android后來版本新加入系統特權應用路徑,這里面應用和system/app一樣是不可以卸載的,但是這里大家肯定會想他和system/app有什么區別么?這里其實最主要是在于二者目錄的權限apk運行起來不一樣
那么這里是不是有個疑問,那么是不是系統應用如果在priv-app下是不是權限就是最高 ?
就可以自然擁有很多系統權限才可以干的是它都可以干?這個其實并不是這樣的哦,權限雖和你是不是priv-app有關系 ,但并不是說你 預制在priv-app既可以擁有系統權限。
如何將普通應用轉為系統應用
安卓的系統一般會有4個重要的分區:boot,system,cache,data。裝在system區的就是系統應用(system app),data分區的是用戶應用。應用程序都安裝在/app子目錄下。
不管是系統應用還是用戶應用,安卓會建立緩存以加速應用的啟動,該緩存是在/data/dalvik-cache下面。應用安裝的越多,data分區可用的空間就越少。
app一旦移動到system空間,就是系統應用了!
以下應用是可以移動到system分區的:
1) 開機就要啟動的程序,比如權限管理啊,Widget啊。
2) 常常用到的程序,比如文件管理器。
3) 一些不會有內存駐留的小程序,比如autostarts,SD Maid啊。
有一些應用是不適合移動到system空間的:
1) 退出仍然會駐留內存的程序,因為這些程序一旦變成了system應用,殺進程的軟件就拿他們沒辦法了。
2) 應用程序內含lib庫的,這個可以用壓縮工具查看該apk,假如內部有lib文件夾的,里面有*.so文件的,那就說明他用到了這些lib。
移動方法:
1) 將該apk先卸載,然后將apk文件拷貝到system/app下,修改權限,有必要的話,重啟一下。這樣做的好處是,該軟件的緩存會在卸載是自動刪除。
2) 為防止有些應用卸載后數據丟失,可以不卸載,方法是:將apk拷貝到system/app下,然后刪除data/app的apk,最后手動把/data/dalvik-cache/下該程序的緩存清除。
3) 假如要移動的應用太多,可以進入recovery,清除一下dalvik-cache,讓啟動的時候自動再生成cache。
在 Android 中,如果要使用系統限制的權限(比如 android.permission.WRITE_SECURE_SETTINGS),我們需要把程序安裝到 /system/app/ 下。
一般手機/system目錄是mount成只讀的,所以我們需要重新mount成讀寫的
下面以 test.apk 為例,演示這個操作。需要準備一臺已經獲得 Root 權限的手機。
1、通過 USB 連接手機和電腦。
2、使用 adb 控制手機。
運行cmd顯示命令行窗口,直接輸入adb devices 即可查看設備(如果沒有反應則說明失敗)。
adb push test.apk /system/app 將test.app推到/system/app目錄下
如果出現adb: error: failed to copy ‘test.apk’ to ‘/system/app’: remote Read-only file
則使用 adb remount 重新掛在系統進行讀寫
然后在adb push test.apk /system/app
成功之后拔掉數據線,重啟手機,則test.apk安裝完成
在安卓系統的機制里面 ,只要是將app復制到系統的system文件/system/app 文件夾中的app,都是系統應用,如果你把系統內置的應用從里面刪除了,也就是徹底移除了作為系統應用的條件 .這就是很多軟件可以刪除 操控系統應用的一個實際干的事情…
當然,要做這個操作,就必須得先root,不然是不可能做到的.
首先 : 可以用adb 命令 ,adb 命令是需要在電腦端完成的.
可以先把你要設置的app ,復制到sd卡的目錄下面,也就是 /sdcard/
1、這個操作也可以使用adb來完成
adb push demo.apk /sdcard/
2、進入手機的shell 命令行:
adb shell
3、然后切換root 用戶
su root
4、然后解鎖系統分區,就鎖這個分區后,就可以往里面復制我們的app安裝包了 :
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
5、再復制我們第一步時的app 至 系統分區下面的app目錄下面
cat /sdcard/demo.apk > /system/app/demo.apk // 這一步可以用 cp 實現,但一般設備中沒有包含該命令。如果使用 mv 會出現錯誤:
6、mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 還原分區屬性,只讀。
然后,關機重啟, 將自己的app設置為系統app就完成了.但是,弄完這一步,并不能保證我們的app能正常運行,還需要進行下面的操作 .
在我們的app中,可能會有 lib 相關的關聯包,你通過這樣的方式引用的,需要手動去復制過去,那么需要進行這樣的操作
首先,在電腦端,用解壓縮工具,將我們的app解壓到某個文件夾下面,在剛才解壓的文件夾下面有個文件夾lib
打開這個文件夾,里面會有三個文件夾,分別對應不同的 系統架構生成的 so文件 ,需要找到合適系統架構的的so文件,復制到 系統分區的lib 目錄中去(/system/lib/) 我這里是小米5的手機,我復制的是 armeabi 這個目錄下面的 so文件.
1、在清單文件AndroidManifest.xml 中添加
android:sharedUserId=“android.uid.system”
2、打包未簽名的APK
在Studio 中 執行 assembleBuild 自動打包生成APK 生成目錄:bulid/outputs/release/xxx.apk
3、使用工具生成系統簽名
4、將簽名好的APK push 到系統目錄下 /system/app/
5、重啟后即可在Launcher中看到我們自己的應用,該應用即為系統應用了。
push命令
adb rootadb remountadb shell > mount -o remount,rw / (這一步很關鍵,給系統讀寫權限,不然無法push)exitadb push adb push xxx.apk /system/app/adb reboot引用文章
系統應用介紹
android中的系統應用
Android系統應用
Android 將自己的應用改為系統應用
修改安卓系統應用,將自己的app變成系統應用
Android system/app/與system/priv-app/的區別
Android 應用安裝到/system/app下
總結
以上是生活随笔為你收集整理的Android系统应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android中的系统应用
- 下一篇: Android如何自定义一个心电图控件?