1.內置App到手機系統
以下以內置搜狗輸入法為例說明
1.1 源碼中創建存放Apk目錄
在源碼目錄packages下面創建mypackages/sougou目錄用來保存搜狗輸入法的apk文件。創建好之后如下所示:
qiang@ubuntu:~/lineageOs/packages/myapps/sougou$pwd /home/qiang/lineageOs/packages/myapps/sougou qiang@ubuntu:~/lineageOs/packages/myapps/sougou$ qiang@ubuntu:~/lineageOs/packages/myapps/sougou$
存放目錄創建好之后,將搜狗輸入法的apk放到sougou目錄下。如下所示:
qiang@ubuntu:~/lineageOs/packages/myapps/sougou$ls-lasougou.apk -rwxrwxrwx1qiangqiang5987027211月307:35sougou.apk qiang@ubuntu:~/lineageOs/packages/myapps/sougou$
1.2 創建模塊編譯文件Android.mk
在目錄"packages/myapps/sougou"中創建sougou輸入法模塊的編譯配置文件Android.mk。內容如下:
#///ADDSTART #///ADDEND #設置當前工作路徑 LOCAL_PATH:=$(callmy-dir) #清除變量值 include$(CLEAR_VARS) #生成的模塊名稱 LOCAL_MODULE:=sougou #生成的模塊類型 LOCAL_MODULE_CLASS:=APPS #生成的模塊后綴名,此處為apk LOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX) #設置模塊tag,tags取值可以為:userdebugengtestsoptional #optional表示全平臺編譯 LOCAL_MODULE_TAGS:=optional #LOCAL_PRIVILEGED_MODULE:=true LOCAL_BUILT_MODULE_STEM:=package.apk #設置源文件 LOCAL_SRC_FILES:=$(LOCAL_MODULE).apk #LOCAL_CERTIFICATE:=platform #設置簽名,此處表示保持apk原有簽名 LOCAL_CERTIFICATE:=PRESIGNED #此處表示預編譯方式 include$(BUILD_PREBUILT)
模塊編譯文件創建好之后的目錄情況如下:
qiang@ubuntu:~/lineageOs/packages/myapps/sougou$ls Android.mksougou.apk qiang@ubuntu:~/lineageOs/packages/myapps/sougou$ qiang@ubuntu:~/lineageOs/packages/myapps/sougou$ qiang@ubuntu:~/lineageOs/packages/myapps/sougou$
1.3 將模塊加入源碼編譯鏈
在安卓系統中,App模塊加入編譯鏈可以放到如下文件中:
build argetproducthandheld_product.mk
將"sougou"模塊加入之后的內容如下:
... #/productpackages PRODUCT_PACKAGES+= ... sougou ...
以上修改完成之后編譯系統刷機就可以看到系統內置"搜狗輸入法"到手機系統了。
說明:
1.如果內置的為可執行程序,一般將模塊編譯鏈放到路徑"buildmake argetproductase_system.mk" 2.如果內置的為App程序,一般將模塊編譯鏈加入到路徑"build argetproducthandheld_product.mk"
2.安卓中開發具有System權限的App
2.1 開發System權限的App流程
在這里使用Android Studio工具創建一個App工程,比如"FridaControl"。如果想要自己開發的App內置到手機系統具有system權限,需要在開發App階段在AndroidManifest.xml中添加"android:sharedUserId="android.uid.system""屬性配置。完整配置的參考如下:
2.2 內置編譯好的apk到手機系統
內置過程和內置搜狗輸入法的操作流程一樣。差異在于Android.mk的時候需要注意一下內容,需要將"LOCAL_CERTIFICATE := platform"加上,表示使用系統簽名。
如果不加這句話就算AndroidManifest.xml加入了system權限配置,但是也不會生效。
完整Android.mk參考如下:
LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) LOCAL_MODULE:=ControlFrida LOCAL_MODULE_CLASS:=APPS LOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_MODULE_TAGS:=optional #關閉dex優化,生成獨立的apk LOCAL_DEX_PREOPT:=false LOCAL_BUILT_MODULE_STEM:=package.apk #設置源文件 LOCAL_SRC_FILES:=$(LOCAL_MODULE).apk #這個地方比較重要 #設置簽名,此處表示使用系統簽名 LOCAL_CERTIFICATE:=platform #此處表示預編譯方式 include$(BUILD_PREBUILT)
3.編譯測試驗證
以上配置好之后編譯刷機。
以下是我內置的一個App具有system權限的驗證展示如下:
C:UsersQiang>adbshellps-Z|findstr"com.android.studycontrolfridaserver" usystem_app:s0system7523918512822878040SyS_epoll_wait74b9ab7248Scom.android.studycontrolfridaserver C:UsersQiang> C:UsersQiang>
以上可以看到運行的App的selinux域為usystem_app:s0,并且app的運行用戶為system。所以該App具備了system權限。
審核編輯:劉清
-
Android系統
+關注
關注
0文章
56瀏覽量
13519 -
SRC
+關注
關注
0文章
61瀏覽量
18010 -
apk
+關注
關注
0文章
23瀏覽量
4956
原文標題:開發system權限的App并內置到Android系統
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論