Android中普通应用升级为系统应用并获取系统权限的操作示例

  介绍

这篇文章主要介绍Android中普通应用升级为系统应用并获取系统权限的操作示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Android是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国谷歌公司和开放手机联盟领导及开发。

有时候使用某些api需要使用系统权限,如调用PackageInstaller的相关接口,需要android.permission.INSTALL_PACKAGES权限,该权限系统只会授权给系统应用,此时可以考虑将我们的应用升级为系统应用,升级为系统应用有两种方法:

1,将apk放到/系统/应用目录下,重启手机即可,此方法比较粗暴,而且需要修改/系统目录的读写权限,因此需要根,而且随着Android系统版本对权限管理越来越严,根和修改读写权限更繁琐和复杂

2,添加sharedUserId=癮ndroid.uid.system"配置,同时使用系统签名对apk进行重签的名,安装后即有系统权限,此方法需要获取到系统签的名,但通常厂商开发的罗都不会公开签的名,因此如果针对某些自己集成系统的需求,可以使用此方案。

<强>下面针对第2种方案进行讲解。

1,首先需要在menifest文件中添加sharedUserId=癮ndroid.uid.system"配置,如下

& lt; manifest  xmlns: Android=癶ttp://schemas.android.com/apk/res/android"   ,,,,,包=癱om.google.example"   ,,,,,android: sharedUserId=癮ndroid.uid.system"在

2,添加需要的使用的系统权限,如

& lt; uses-permission android: name=癮ndroid.permission.INSTALL_PACKAGES"/在

3,使用系统签名对apk进行签名,首先需要打未签名的包,Android工作室环境下点击右侧Gradle按钮,弹出目录,打开任务→构建→组装……,其中组装开头的几项即是打包任务,双击相应项即可获取相应的包

 Android中普通应用升级为系统应用并获取系统权限的操作示例

接着要获取系统签名,找到系统签名文件“platform.pk8”和“platform.x509.pem”,在系统源码路径下

签名文件路径:Android/构建/目标/产品/安全/

准备好签名工具:“signapk。jar”

位置:android/预构建/sdk/工具/lib

将未签名的apk,签名文件和签名工具放在同一路径下,开启终端,cd到该目录,运行如下命令即可得到带系统签名的apk

java jar signapk。jar platform.x509。pem平台。pk8演示。apk signedDemo。apk

以上的方法相对还是比较繁琐,而且不便于调试,可以将系统签名打入密钥存储库,使用该密钥存储库即可在Android工作室环境下生成带系统签名的apk

1,首先需要生成密钥库文件,生成过程在此省略,可自行百度

2,下载keytool-importkeypair, https://github.com/getfatday/keytool-importkeypair/

3,该操作需要linux系统,并安装jdk, win10环境下可以开启“基于Lunix的Windows子系统”,不需要去折腾安装虚拟机或者系统。当如,如果兄一些你已经有linux系统或者是mac,那么恭喜你,省了很多需要折腾的步骤

4,将密钥存储库,platform.pk8, platform.x509.pem, keytool-importkeypair放在同一目录下,开启终端,cd到此目录,运行如下命令即可将系统签名打入keystore

/keytool-importkeypair - k。/演示。keystore密码- p -pk8平台。pk8 cert platform.x509。pem别名demoAlias

解释:- p后接keystore密码,别名后接关键别名

5,运行结束即会在当前目录下生成带有系统签名的密钥存储库,使用此密钥库安装安卓工作室打包流程打包即可得到带系统权限的apk

<强>补充知识:Android系统级应用守护进程

我就废话不多说了,还是直接看代码吧!

——安康;/框架/库/包/SystemUI/src/com/android/systemui/SystemUIApplication.java   + + +,b/框架//包/SystemUI/src/com/android/systemui/SystemUIApplication.java基地   @@  -16年,24,+ 16,51 @@   package  com.android.systemui;   + import  android.app.ActivityManager;   + import  android.app.ActivityManager.RunningAppProcessInfo;   import  android.app.Application;   import  android.app.Instrumentation;   import  android.content.BroadcastReceiver;   import  android.content.Context;   + import  android.content.ComponentName;   import  android.content.Intent;   import  android.content.IntentFilter;   import  android.content.res.Configuration;   + import  android.database.ContentObserver;   + import  android.net.Uri;   + import  android.os.Build;   + import  handler;   import  android.os.Process;   import  android.os.PowerManager;   import  android.os.SystemClock;   import  android.os.SystemProperties;   import  android.os.UserHandle;   import  android.util.Log;   -   + import 并不知道;   + import  java.util.Calendar;   import  com.android.systemui.stackdivider.Divider;   import  java.util.HashMap;   import  java.util.Map;   + import  java.util.Objects;   + import  java.io.BufferedReader;   + import  java.io.File;   + import  java.io.FileReader;   + import  java.io.FileWriter;   + import  java.io.IOException;   + import  java.text.SimpleDateFormat;   + import  java.util.Date;   + import  java.util.Locale;   +   + import  java.io.FileInputStream;   + import  java.io.FileNotFoundException;   + import  java.io.FileOutputStream;   + import  java.io.InputStream;   + import  java.io.PrintWriter;   + import  java.math.BigInteger;   + import  java.security.MessageDigest;   + import  java.security.NoSuchAlgorithmException;   + import  java.util.Random;/* *   ,* Application  class  for  SystemUI。   @@  -42年,6,+ 69,8,@@  public  class  SystemUIApplication  extends  Application  {   ,,private  static  final  String  TAG =,“SystemUIService";   ,,private  static  final  boolean  DEBUG =,假;   +,,,,   +,,,,private  Context  mContext;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android中普通应用升级为系统应用并获取系统权限的操作示例