https://blog.csdn.net/starhosea/article/details/78697007
so文件的處理是目前遇到過的問題。文章中解釋了。
正文:
有時候我們在Android 系統內置自己的應用,在測試時,Android Studio 默認的安裝方式是將我們開發的應用作為普通應用安裝到系統中的。本文提供一種方式,在開發過程中,將apk內置到系統中,而不需要系統源代碼。
adb 將apk內置到系統的方法很多人已經提到過了,但是大多都過時了,或者敘述不詳細。下面的方式在我在 Android 7.1.1 測試通過
內置Apk的特權
Android 內置 apk 有如下特權:
1. 不能被普通用戶卸載
2. 具有比普通應用更高的權限,可以使用受限的系統 API,
3. 結合某些 Manifest.xml 聲明,可以實現更多效果,例如系統級保活
4. 可以聲明 priority > 0 的 組件
(其他特權有待發現..)
准備apk
點擊Android Studio 的 Build -> Build Apk(s) ,生成我們測試用的 apk。
如果你的 apk 帶有 .so庫,需要同時准備對應目標系統平台的 .so。我的測試機是 arm64-v8a,則我需要的 .so庫 在工程的 app/build/intermediates/cmake/debug/obj/arm64-v8a/ 下。
清理舊的安裝
之前測試過程中,你可能已經安裝過apk到系統中,需要先卸載,不然有可能影響我們之后內置方式安裝的apk的執行。
卸載方式一
通過手機自帶軟件管理卸載。這種比較簡單了,不多說。
卸載方式二
通過adb卸載。
打開控制台,輸入下面的命令卸載舊的安裝
> adb uninstall <your package name>
1
例如我的報名是 com.star.test,我的完整卸載命令是
> adb uninstall com.star.test
1
看到控制台輸出 SUCCESS 即表示卸載完成。
簽名(可跳過)
如果我們的應用需要某些系統權限,可能需要使用系統簽名,參考這篇文章為應用打上系統簽名。
將應用Push到系統目錄下
注: 以下命令運行可能報錯 Read-only file system,解決該問題請參看 獲取Android System 寫入權限
推送apk到系統目錄
輸入如下名命令
> adb push <your apk path> /system/priv-app
1
Android 4.4 之后,系統核心apk安裝在 /system/priv-app 中,以前是安裝在 /system/app 中。
推送 .so 到系統庫目錄下
如果apk帶有 .so 庫,.so 庫也需要單獨push到 /system/lib 或者 /system/lib64 中,具體看你的系統有哪個目錄。當然,.so 的ABI需要和系統ABI符合。
安裝應用
在 Android 5.0 以前,推送到系統應用目錄中的apk會被自動安裝,Android 5.0 之后,只在系統啟動時,系統會自動安裝它。
確認有沒有被實際安裝,可以通過如下命令
> adb shell //進入adb shell 模式
# pm list packages | grep <your package name>//在所有已安裝的apk中,查找指定的apk有沒有安裝
1
2
如果安裝成功,則會有一行輸出,顯示自己的應用包名,否則不會有任何輸出提示。
可以通過重啟系統來使剛剛push進入的apk安裝到系統中。如果完全重啟系統的話,花費時間較長,可以通過部分重啟來節省時間。在cmd中執行如下命令。
> abd shell//進入adb shell 模式
# am restart //重啟系統(非完全重啟)
1
2
重啟之后正常情況下應用應該已經安裝了,接下來測試下應用是否能能夠工作。
---------------------
作者:Star丶Xing
來源:CSDN
原文:https://blog.csdn.net/starhosea/article/details/78697007
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!