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 Project LOCAL_PATH:=$(call my-dir) include$(CLEAR_VARS) LOCAL_SRC_FILES:= $(call all-java-files-under, src) LOCAL_PACKAGE_NAME:= LauncherDemo LOCAL_CERTIFICATE:= platform include$(BUILD_PACKAGE) # Use thefolloing include to make our test apk. include$(call all-makefiles-under,$(LOCAL_PATH))