日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:209日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
影音先锋久久精品| 日韩av三区| 国产欧美精品| 精品久久在线| 日韩在线观看不卡| 国产精品对白久久久久粗| 国产精品一区二区三区www| 欧美一级全黄| 精品亚洲成人| 日本亚洲最大的色成网站www| 亚洲欧美在线综合| 国产精品普通话对白| 尤物网精品视频| 国产精品日本| 国产亚洲毛片在线| 久久精品影视| 久久久777| 婷婷精品视频| 亚洲精品乱码| 免费在线欧美黄色| 国产精品免费不| 欧美亚洲二区| 国产高清不卡| 日韩在线观看一区二区| 亚洲精品综合| 国产成人调教视频在线观看| 999国产精品视频| 午夜日韩福利| 国产一区二区三区探花| 一区二区三区四区在线看| 亚洲影视一区| 激情欧美一区| 久久免费影院| 久久国产99| sm捆绑调教国产免费网站在线观看 | 国产一区二区高清| 综合一区二区三区| 欧美片第1页| 欧美亚洲二区| 亚洲精品无吗| 欧美日韩一区二区综合 | 色爱综合网欧美| 国产一区二区高清| 久久久精品久久久久久96| 欧美亚洲三区| 亚洲手机视频| 国产精品毛片一区二区在线看| 人人爽香蕉精品| 成人国产精品一区二区免费麻豆| 国产精品三级| 蜜臀va亚洲va欧美va天堂| 日韩免费久久| av免费不卡国产观看| 鲁大师精品99久久久| 日本久久二区| 亚洲理论在线| 中文字幕av一区二区三区人| 好吊视频一区二区三区四区| 欧洲av一区二区| 综合日韩av| 国产一区日韩| 中文字幕在线视频网站| 国产精品毛片久久| 久久久久99| 婷婷综合激情| 免费人成在线不卡| 日韩视频一二区| 国产精品久久久久久模特| 国产精品一区二区精品视频观看 | 九一国产精品| 蜜桃国内精品久久久久软件9| 99精品在线观看| 欧美日韩中文一区二区| 久久男女视频| 视频一区二区欧美| 日本成人精品| 国产白浆在线免费观看| 蜜臀av免费一区二区三区| 91九色精品| 欧美日本不卡高清| 亚洲免费福利| 日韩专区在线视频| 国产精品高清一区二区| 99热精品久久| 日韩精品视频网站| 日韩1区2区| 激情婷婷欧美| 国产欧美一区二区三区国产幕精品| 国产精品玖玖玖在线资源| 中文字幕人成乱码在线观看| 亚洲天堂久久| 国产精品伦一区二区| 在线视频日韩| 国产成人调教视频在线观看| 免费观看日韩电影| 国产精品二区不卡| 蜜桃av一区二区| 日韩av在线播放网址| 亚州av日韩av| 涩涩av在线| 欧美一区成人| 老牛影视一区二区三区| 国产一区国产二区国产三区| 婷婷六月综合| 日韩啪啪电影网| 国产调教一区二区三区| 欧美亚洲在线日韩| 日本一二区不卡| 欧美日韩伊人| 免费日本视频一区| 久久男人天堂| 欧美久久久网站| 奶水喷射视频一区| 国产传媒在线观看| 欧美一级网址| 亚洲精品三级| 久久福利影视| 久久久夜夜夜| 欧美视频一区| 91国内精品| 亚洲女同av| 午夜天堂精品久久久久| 视频一区二区中文字幕| 国产精品蜜月aⅴ在线| 青草av.久久免费一区| 伊人久久婷婷| 亚洲五月婷婷| 日韩一区精品视频| 国产一精品一av一免费爽爽| 99在线|亚洲一区二区| 久久影视一区| 三级小说欧洲区亚洲区| 国内揄拍国内精品久久| 日本精品在线播放| 五月激激激综合网色播| 国产精品婷婷| 99久久精品国产亚洲精品| 中文视频一区| 日韩在线短视频| 日韩精品第一区| 日本综合字幕| 久久久久久一区二区| 久久午夜影院| 成人日韩在线| 91成人精品视频| 99综合视频| 天堂av一区| 美女视频黄免费的久久| 欧美日韩中出| 国产成人精品亚洲线观看| 久久精品五月| 中文字幕在线看片| 欧美不卡视频| 四虎精品一区二区免费| 三级久久三级久久久| 日本欧美一区二区在线观看| 国产精品v日韩精品v欧美精品网站| 日韩av不卡在线观看| 一区二区三区网站| 亚洲97av| 国产精品sss在线观看av| 国产成人精品免费视| 日韩一级不卡| 91精品美女| 精品久久美女| 国产精品免费看| 免费亚洲一区| 国产精品免费看| 国产福利资源一区| 涩涩av在线| 亚洲精品三级| 成人羞羞在线观看网站| 在线视频亚洲欧美中文| 欧美激情视频一区二区三区在线播放| 欧美亚洲国产精品久久| 天使萌一区二区三区免费观看| 国产精品乱战久久久| 精品亚洲美女网站| 水蜜桃久久夜色精品一区的特点 | 国产日韩欧美一区在线| 97视频热人人精品免费| 日韩一区二区三区精品视频第3页| 日韩不卡视频在线观看| 欧美综合国产| 日韩精品不卡一区二区| 国产精品尤物| 亚洲精品影视| 日本欧美在线看| 黑丝美女一区二区| 日韩国产激情| 久久精品一区二区国产| 免费人成在线不卡| 欧美a级一区| 日韩电影免费网址| 国产精品magnet| 美女视频黄久久| 麻豆91精品91久久久的内涵| 国产精品99一区二区三| 国产精品欧美日韩一区| 欧美日韩中出|