Android apk 擷取系統許可權的方式
Android系統中,許可權等級分為
["normal" | "dangerous"| "signature" | "signatureOrSystem"]
normal 、dangerous是一般apk都在Mainifest中聲明即可擷取的
signature必須要有系統層級的簽名才能夠擷取到
signatureOrSystem 有系統層級簽名或者有系統許可權
以SET_PREFERRED_APPLICATIONS為例
使用signapk為APK簽名
addPreferredActivity需要許可權 android.permission.SET_PREFERRED_APPLICATIONS(許可權等級為【signature】)
使用該許可權需要signapk進行簽名,所需要的工具
源碼包中
1)..\out\host\linux-x86\framework\signapk.jar
2)..\build\target\product\security\platform.pk8
3)..\build\target\product\security\platform.x509.pk8
將以上3個檔案以及需要簽名的APK放到同一個目錄中
cmd -> java -jar signapk.jarplatform.x509.pem platform.pk8 LauncherDemo.apk Launcher_sign.apk
該許可權以需要具有系統許可權的應用,所以需要使用源碼編譯該應用
完成後可使用普通install方法安裝應用,並可使用zipalign對APK進行最佳化
zipalign目錄 android-sdk\tools\zipalign.exe
l 最佳化對齊APK
cmd ->zipalign -v 4 old.apk new.apk
l 驗證對齊
cmd ->zipalign -c -v 4 new.apk
以上最張輸出 Verification succesful 則表示最佳化對齊成功
源碼編譯APK共用系統UID
這種方法無需聲明許可權SET_PREFERRED_APPLICATIONS
1)在Mainfest檔案中增加
android:sharedUserId="android.uid.system"
2)Android.mk檔案中增加
LOCAL_CERTIFICATE := platform
編譯完成後,使用push方式安裝應用
Android.mk:
#Copyright 2007-2008 The Android Open Source ProjectLOCAL_PATH:=$(call my-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:= $(call all-java-files-under, src)LOCAL_PACKAGE_NAME:= LauncherDemoLOCAL_CERTIFICATE:= platforminclude$(BUILD_PACKAGE)# Use thefolloing include to make our test apk.include$(call all-makefiles-under,$(LOCAL_PATH))