Android高通 12/13靜默安裝和卸載

1、靜默安裝和靜默卸載

?涉及代碼路徑感興趣可以去看下如下所示,這里不作重點贅述哈

Package Manger
frameworks/base/services/java/com/android/server/pm/Settings.java
frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
frameworks/services/java/com/android/server/PreferredComponent.java
frameworks/core/java/android/content/IntentFilter.java
frameworks/base/core/java/android/content/pm/PackageParser.java
frameworks/base/services/java/com/android/server/pm/Installer.java
frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.javaPackage Installer
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java

2、靜默安裝apk 代碼

   /*** 靜默安裝應用** @param path* @return*/public boolean installApp(String path) {PackageManager packageManager = mContext.getPackageManager();PackageInfo info = packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);ApplicationInfo appInfo = null;String pkgName = "";if (info != null) {appInfo = info.applicationInfo;pkgName = appInfo.packageName;}if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {try {PackageInstaller packageInstaller = mContext.getPackageManager().getPackageInstaller();PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);if (!pkgName.equals("")) {params.setAppPackageName(pkgName);Method allowDowngrade = PackageInstaller.SessionParams.class.getMethod("setAllowDowngrade", boolean.class);allowDowngrade.setAccessible(true);allowDowngrade.invoke(params, true);int sessionId = packageInstaller.createSession(params);PackageInstaller.Session session = packageInstaller.openSession(sessionId);OutputStream os = session.openWrite(pkgName, 0, -1);InputStream is = new FileInputStream(path);byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1) {os.write(buffer, 0, len);}session.fsync(os);os.close();is.close();session.commit(PendingIntent.getBroadcast(mContext, sessionId,new Intent(Intent.ACTION_MAIN), FLAG_IMMUTABLE).getIntentSender());}} catch (Exception e) {e.printStackTrace();}}return true;}

3、靜默卸載 apk代碼

 /*** 靜默卸載應用** @param path* @return*/public boolean uninstallApp(String path) {class InstallResultReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {}}Intent broadcastIntent = new Intent(mContext, InstallResultReceiver.class);PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 1,broadcastIntent, FLAG_IMMUTABLE);PackageInstaller packageInstaller = mContext.getPackageManager().getPackageInstaller();packageInstaller.uninstall(path, pendingIntent.getIntentSender());return true;}

4、記得權限問題一般data/data???system/priv-app system/app等路徑?

5、apk調用代碼示例

                       /*** 靜默安裝(data/data 系統應用不能放在sdcard目錄安裝 會沖突 system/app or /system/priv-app)*/installApp("data/data/xxx.apk");/*** 靜默卸載*/uninstallApp("data/data/xxx.apk");

轉載請注明出處,謝謝!

參考文章:

Android 包管理機制---PackageInstaller - 簡書

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14426.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14426.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14426.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CCS基礎入門

視頻: CCS使用教程_嗶哩嗶哩_bilibili 創建工程 步驟一:創建 方法一: 方法二: 方法三: 步驟二:選擇工程配置 步驟三:完成創建 編譯工程: 方法一(最常用)…

Excel中自動驗證URL網址鏈接有效性

下面表格中的網址有的可以打開,有的不能打開 在Excel中按下 Alt F11 鍵來打開VBA編輯器,選擇 插入 > 模塊,創建一個新的模塊,在新創建的模塊窗口中輸入以下代碼: Function 測試網址(ByVal URL As String) As Str…

$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams

問題描述 動態添加子view的時候,報crash,提示$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams 完整錯誤堆棧 :12.946 11951-11951/com.xx E/CrashReport: sys default last handle start! 11-16 12:21:13.041 11951-1195…

筆記-X86下用Docker運行ARM64編譯Libreoffice

初衷 針對惡略環境下的自適應,記個筆記,苦于沒有外網的arm架構環境,內網中安裝個arm類型的deb,難如登天,突然發現這個好東西。 參考引用 x86架構的Ubuntu上通過Docker運行ARM架構的系統 前提 docker已經安裝好 安…

UDP協議與TCP協議1.2

UDP UDP數據報UDP報頭UDP載荷 UDP的報文格式: 這里的UDP長度,描述了整個UDP數據報,占多少個字節,這里整個UDP長度最多是64kb 在UDP中校驗和就是使用CRC的方式來完成的 數據在網絡傳輸中是可能會出現錯誤的,例如比特翻…

Linux日志定位實戰指令總結

一、日志定位的常用Linux指令 步驟(一):如果你不知道日志的位置,Linux指令如何查找到日志所在的位置呢? 要快速定位到名為nfm-info.log的文件,你可以使用find命令或locate命令。這兩個命令都能夠搜索文件…

uniappx 安卓保活(多種技術;UTS版) Ba-KeepAlive-U

簡介(下載地址) Ba-KeepAlive-U 是一款android原生保活插件,UTS版本(同時支持uniapp和uniappx),支持市面上大部分機型,Android4.4到Android14(**注意:**不保證支持所有機…

MoonBit 周報 Vol.41:替換 Array 實現、鍵值對增加模式匹配支持

MoonBit更新 【Breaking Change】Array重命名為FixedArray,vec.Vec重命名為Array // Before fn init {let array : vec.Vec[Int] [1, 2, 3] } // After fn main {let array : Array[Int] [1, 2, 3] }【語法】鍵值對(如Map HashMap等)增加…

正則表達式(知識總結篇)

本篇文章主要是針對初學者,對正則表達式的理解、作用和應用 正則表達式🌟 一、🍉正則表達式的概述二、🍉正則表達式的語法和使用三、 🍉正則表達式的常用操作符四、🍉re庫主要功能函數 一、🍉正…

遠動通訊屏柜的組成及各裝置的作用

遠動通訊屏柜的組成及各裝置的作用 遠動通訊屏是基于公共電網安全而投入的遠方監控遙控設備;主要由遠動裝置、通訊管理機、交換機、調制解調器、GPS對時裝置、數字通道防雷器、模擬通道防雷器、插線板、空氣開關、屏柜及附件等設備組成、標配尺寸2260*800*600&…

C++設計模式---面向對象原則

面向對象設計原則 原則的目的:高內聚,低耦合 1. 單一職責原則 類的職責單一,對外只提供一種功能,而引起類變化的原因都應該只有一個。 2. 開閉原則 對擴展開放,對修改關閉;增加功能是通過增加代碼來實現的&…

【linux特殊符號】

文章目錄 學習目標一、Linux的特殊符號1.系統變量2.引號 總結 學習目標 1.學會查看系統變量 2.學會各種引號 3.一、Linux的特殊符號 1.系統變量 windows系統變量:echo %path% linux系統變量:echo $PATH2.引號 " " 雙引號,換行…

如何基于springboot構建cas最新版源碼?

環境準備 下載JDK21 https://download.oracle.com/java/21/archive/jdk-21.0.2_windows-x64_bin.zip下載gradle 8.5并配置環境變量 https://gradle.org/next-steps/?version8.5&formatbin下載項目git clone http://gitlab.ruishan.cc/meta/anka-authentication.git 開始…

Maven工具

Maven是apache軟件基金會的一個開源項目 是一個項目構建(項目管理)工具 用來幫助開發者管理項目中的 jar文件,以及 jar文件 之間的依賴關系(在A.jar文件中,用到了B.jar)、完成項目的編譯(.java->.class)、測試、打…

web前端項目已有阿里巴巴圖標基礎上,再次導入阿里巴巴圖標的方法

如果是第一次導入阿里巴巴圖標請參考: vue項目引入阿里云圖標_vue引用阿里云圖標fontclass-CSDN博客 本文主要想講在項目原有阿里巴巴圖標基礎上,再次導入阿里巴巴圖標的解決辦法: 1.iconfont.json對應修改就行,這個簡單一看就明白; 2.iconfont.js主要改動<symbol><…

從零入門激光SLAM(二十)——IESKF代碼實現

大家好呀&#xff0c;我是一個SLAM方向的在讀博士&#xff0c;深知SLAM學習過程一路走來的坎坷&#xff0c;也十分感謝各位大佬的優質文章和源碼。隨著知識的越來越多&#xff0c;越來越細&#xff0c;我準備整理一個自己的激光SLAM學習筆記專欄&#xff0c;從0帶大家快速上手激…

Ansible自動化運維中的file文件模塊模塊應用詳解

作者主頁&#xff1a;點擊&#xff01; Ansible專欄&#xff1a;點擊&#xff01; 創作時間&#xff1a;2024年5月21日15點21分 &#x1f4af;趣站推薦&#x1f4af; 前些天發現了一個巨牛的&#x1f916;人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xf…

【Java筆記】第8章:面向對象的三大特性(封裝、繼承、多態)

前言1. 三大特性概述2. 封裝3. 繼承4. 多態結語 #include<GUIQU.h> int main { 上期回顧:【Java筆記】第7章&#xff1a;面向對象 個人主頁&#xff1a;C_GUIQU 歸屬專欄&#xff1a;【Java學習】 return 一鍵三連; } 前言 各位小伙伴大家好&#xff01;上期小編給大家…

后端技術常用網站

技術說明官網SpringBootMVC框架https://spring.io/projects/spring-bootSpringCloud微服務框架https://spring.io/projects/spring-cloud/MyBatis-PlusORM框架https://mp.baomidou.com/Swagger-UI文檔生產工具https://github.com/swagger-api/swagger-uiKibana分析和可視化平臺…

SO_REUSEPORT 之 TCP負載均衡驗證

首先啟動兩個tcp server&#xff0c; 代碼里開啟 SO_REUSEPORT [my_testlocalhost test]$ ./tcp_server_reuseport & [1] 1864 [my_testlocalhost test]$ Server listening on port 8888[my_testlocalhost test]$ ./tcp_server_reuseport & [2] 1865 [my_testlocalh…