电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android普通應用升級為系統應用并獲取系統權限的操作

瀏覽:111日期:2022-09-26 10:28:00

有時候使用某些api需要使用系統權限,如調用PackageInstaller的相關接口,需要android.permission.INSTALL_PACKAGES權限,該權限系統只會授權給系統應用,此時可以考慮將我們的應用升級為系統應用,升級為系統應用有兩種方法:

1、將apk放到/system/app目錄下,重啟手機即可,此方法比較粗暴,而且需要修改/system目錄的讀寫權限,因此需要root,而且隨著Android系統版本對權限管理越來越嚴,root和修改讀寫權限更繁瑣和復雜

2、添加sharedUserId='android.uid.system'配置,同時使用系統簽名對apk進行重簽名,安裝后即有系統權限,此方法需要獲取到系統簽名,但通常廠商開發的rom都不會公開簽名,因此如果針對某些自己集成系統的需求,可以使用此方案。

下面針對第2種方案進行講解。

1、首先需要在menifest文件中添加sharedUserId='android.uid.system'配置,如下

<manifest xmlns:android='http://schemas.android.com/apk/res/android' package='com.google.example' android:sharedUserId='android.uid.system'>

2、添加需要的使用的系統權限,如

<uses-permission android:name='android.permission.INSTALL_PACKAGES' />

3、使用系統簽名對apk進行簽名,首先需要打未簽名的包,Android Studio環境下點擊右側Gradle按鈕,彈出目錄,打開Tasks->build->assemble...,其中assemble開頭的幾項即是打包任務,雙擊相應項即可獲取相應的包

Android普通應用升級為系統應用并獲取系統權限的操作

接著要獲取系統簽名,找到系統簽名文件“platform.pk8”和“platform.x509.pem”,在系統源碼路徑下

簽名文件路徑:android/build/target/product/security/

準備好簽名工具:“signapk.jar”

位置:android/prebuilts/sdk/tools/lib

將未簽名的apk、簽名文件和簽名工具放在同一路徑下,開啟終端,cd到該目錄,運行如下命令即可得到帶系統簽名的apk

java -jar signapk.jar platform.x509.pem platform.pk8 Demo.apk signedDemo.apk

以上的方法相對還是比較繁瑣,而且不便于調試,可以將系統簽名打入keystore,使用該keystore即可在Android Studio環境下生成帶系統簽名的apk

1、首先需要生成keystore文件,生成過程在此省略,可自行百度

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

3、該操作需要linux系統,并安裝jdk,win10環境下可以開啟“基于Lunix的Windows子系統”,不需要去折騰安裝虛擬機或者系統。當如,如果兄dei你已經有Linux系統或者是mac,那么恭喜你,省了很多需要折騰的步驟

4、將keystore、platform.pk8、platform.x509.pem、keytool-importkeypair放在同一目錄下,開啟終端,cd到此目錄,運行如下命令即可將系統簽名打入keystore

/keytool-importkeypair -k ./demo.keystore -p password -pk8 platform.pk8 -cert platform.x509.pem -alias demoAlias

解釋:-P后接keystore密碼,-alias后接key alias

5、運行結束即會在當前目錄下生成帶有系統簽名的keystore,使用此keystore安裝Android Studio打包流程打包即可得到帶系統權限的apk

補充知識:Android 系統級應用守護進程

我就廢話不多說了,還是直接看代碼吧!

--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java+++ b/frameworks/base/packages/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 android.os.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 java.util.List;+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 = false;+ + private Context mContext; /** * The classes of the stuff to start.@@ -86,6 +115,8 @@ public class SystemUIApplication extends Application { // application theme in the manifest does only work for activities. Keep this in sync with // the theme set there. setTheme(R.style.systemui_theme);++mContext = getApplicationContext(); SystemUIFactory.createFromConfig(this);@@ -143,6 +174,7 @@ public class SystemUIApplication extends Application { private static final String SETTING_SYSTEM = 'tchip.provider.setting.system'; private static final String SETTING_SECURE = 'tchip.provider.setting.secure'; private static final String SETTING_GLOBAL = 'tchip.provider.setting.global';+ private static final String BROADCAST_SCREENSHOT = 'rk.android.screenshot.action'; private String valueContent = '0'; private MainReceiver mainReceiver; @@ -150,6 +182,10 @@ public class SystemUIApplication extends Application {android.util.Log.i('AZ', log); } + private void LDLog(String log) {+android.util.Log.i('LD', log);+ }+public class MainReceiver extends BroadcastReceiver {@Override@@ -225,6 +261,18 @@ public class SystemUIApplication extends Application {intentDown.putExtra('android.intent.extra.KEY_CONFIRM', false);intentDown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intentDown);+ } else if (BROADCAST_SCREENSHOT.equals(action)) {+Intent intentScreenShot = new Intent('android.intent.action.SCREENSHOT');+intentScreenShot.putExtra('path', intentScreenShot.getExtras().getString('path'));+intentScreenShot.putExtra('name', intentScreenShot.getExtras().getString('name'));+context.sendBroadcast(intentScreenShot);+ } else if (BROADCAST_TIMETICK.equals(action)) {+//checkLaidianAppAlive();+try{+ mHandler.removeCallbacks(laidianAppR);+}catch(Exception e){+}+mHandler.postDelayed(laidianAppR, 1000); }} }@@ -326,4 +374,82 @@ public class SystemUIApplication extends Application { public SystemUI[] getServices() { return mServices; }+ + + Handler mHandler = new Handler();+ private int laidianAppCheckTime = 3000;+ Runnable laidianAppR = new Runnable(){++@Override+public void run() {+ checkAppAlive(pkgName', 'clsName');+ mHandler.postDelayed(laidianAppR, laidianAppCheckTime);+}+ + };++ private void checkAppAlive(String pkgName, String clsName){+long startTime = System.currentTimeMillis();+if(!isAppAlive(pkgName)){+ LDLog('checkAppAlive.start to start app... ');+ try{+ComponentName componentName = new ComponentName(pkgName, clsName);+Intent intent = new Intent();+intent.setComponent(componentName);+intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);+mContext.startActivity(intent);+ }catch(Exception e){++ }+}else{+ LDLog('checkAppAlive.app is running... ');+}+LDLog('checkAppAlive.used time : ' + (System.currentTimeMillis() - startTime));+ }+ + public boolean isAppAlive(String packageName){+//boolean isAlive = false;+//String command = 'ps | grep ' + packageName/* + ' | busybox awk ’{print $2}’'*/;+//String[] result = ExecCmd.getPackagePID(command);+//for(String str :result){+ // if(!'-1'.equals(str)){+ // isAlive = true;+ // }+//}+//return isAlive;++ // 獲取正在運行的進程+ /*ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);+ List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();+ + for (RunningAppProcessInfo appProcess : appProcesses) {+ String[] pkgList = appProcess.pkgList;+ for (String pckName : pkgList) {+if(packageName.equals(pckName)){+ return true;+}+ + }+ }*/+ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);+List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(30, ActivityManager.RECENT_IGNORE_UNAVAILABLE+ | ActivityManager.RECENT_INCLUDE_PROFILES);++for (ActivityManager.RecentTaskInfo recentInfo : recentTasks){+ //if (recentInfo.origActivity != null) {+String pckName = recentInfo.baseIntent.getComponent().getPackageName();+LDLog('isAppAlive.packageName=' + pckName);+if(packageName.equals(pckName)){+ return true;+}+ //}+}+ return false;+ }+}

以上這篇Android普通應用升級為系統應用并獲取系統權限的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 24位ADC|8位MCU-芯易德科技有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | 【连江县榕彩涂料有限公司】官方网站| 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 传动滚筒_厂家-淄博海恒机械制造厂 | 污水提升器,污水提升泵,污水提升装置-德国泽德(zehnder)水泵系统有限公司 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技 | 珠海冷却塔降噪维修_冷却塔改造报价_凉水塔风机维修厂家- 广东康明节能空调有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 |