当前位置: 首页 > news >正文

android11禁止安装apk

应客户需求,需要设备禁止安装其它apk。

由于一套代码中有多个产品,所以想到用设置属性的方式来决定是否可安装apk,详见以下补丁

1、相关文件

frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
frameworks/base/services/core/java/com/android/server/pm/PackageInstallerSession.java
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

2、禁止机器中识别到的apk文件的安装 ,修改如下:

diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java b/packages/Pa
ckageInstaller/src/com/android/packageinstaller/InstallStart.java
index 0b8de6c7d4f1..0db15ddf050d 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
@@ -38,6 +38,8 @@ import android.os.RemoteException;import android.os.UserManager;import android.permission.IPermissionManager;import android.util.Log;
+import android.widget.Toast;
+import android.os.SystemProperties;import java.util.List;@@ -53,6 +55,7 @@ public class InstallStart extends Activity {private IPermissionManager mIPermissionManager;private UserManager mUserManager;private boolean mAbortInstall = false;
+    private boolean APK_INSTALL_FINISH = SystemProperties.getBoolean("persist.sys.third.apk.install", false);@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -150,7 +153,16 @@ public class InstallStart extends Activity {}if (nextActivity != null) {
-            startActivity(nextActivity);
+               if(!APK_INSTALL_FINISH) {
+                       //startActivity(nextActivity);
+                       Toast.makeText(InstallStart.this, "Installation prohibited", Toast.LENGTH_LONG).show();
+                       Intent result = new Intent();
+                               result.putExtra(Intent.EXTRA_INSTALL_RESULT,
+                           PackageManager.INSTALL_FAILED_INVALID_URI);
+                       setResult(RESULT_FIRST_USER, result);
+               } else{
+                   startActivity(nextActivity);
+               }}finish();}

3、禁止adb命令安装apk,修改如下:   

diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index d35f0b28d299..82d70af87648 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -496,6 +496,8 @@ public class PackageManagerService extends IPackageManager.Stubpublic static final boolean DEBUG_PERMISSIONS = false;private static final boolean DEBUG_SHARED_LIBRARIES = false;public static final boolean DEBUG_COMPRESSION = Build.IS_DEBUGGABLE;
+    
+    private boolean APK_INSTALL_FINISH = SystemProperties.getBoolean("persist.sys.third.apk.install", false);// Debug output for dexopting. This is shared between PackageManagerService, OtaDexoptService// and PackageDexOptimizer. All these classes have their own flag to allow switching a single
@@ -1692,6 +1694,10 @@ public class PackageManagerService extends IPackageManager.Stubvoid doHandleMessage(Message msg) {switch (msg.what) {case INIT_COPY: {
+                   if(!APK_INSTALL_FINISH){
+                             SystemProperties.set("persist.sys.third.apk.install", "true");
+                       return;
+                   }HandlerParams params = (HandlerParams) msg.obj;if (params != null) {if (DEBUG_INSTALL) Slog.i(TAG, "init_copy: " + params);
@@ -3445,7 +3451,8 @@ public class PackageManagerService extends IPackageManager.StubSlog.i(TAG, "Time to scan packages: "+ ((SystemClock.uptimeMillis()-startTime)/1000f)+ " seconds");
-
+       
+           APK_INSTALL_FINISH = true;// If the platform SDK has changed since the last time we booted,// we need to re-grant app permission to catch any new ones that// appear.  This is really a hack, and means that apps can in some

4、让adb安装命令跟着设置的属性走

diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
old mode 100644
new mode 100755
index d690ae9e70f1..f7566858a95f
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -969,6 +969,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {// Quick sanity check of state, and allocate a pipe for ourselves. We// then do heavy disk allocation outside the lock, but this open pipe// will block any attempted install transitions.
+               
+               
+               boolean installFlag= SystemProperties.getBoolean("persist.sys.third.apk.install", false);
+               if(!installFlag){
+                        return null;
+               }
+               final RevocableFileDescriptor fd;final FileBridge bridge;synchronized (mLock) {

http://www.dtcms.com/a/524839.html

相关文章:

  • 深入了解linux网络—— 自定义协议(下)
  • 金麦建站官网成都视频剪辑培训
  • 【C++闯关笔记】详解多态
  • 数据库技术指南(二):MySQL CURD 与高级查询实战
  • 用mvc做网站报告做做做网站
  • 设置一个自定义名称的密钥,用于 git 仓库上下传使用
  • MAC Flood与ARP Flood攻击区别详解
  • 高兼容与超低延迟:互联网直播点播平台EasyDSS直播服务如何成为直播点播应用的“技术底座”?
  • MongoDB 集群优化实战指南
  • wordpress网站速度检测医院做网站需要多少钱
  • iOS 26 查看电池容量与健康状态 多工具组合的工程实践
  • 机器学习(10)L1 与 L2 正则化详解
  • 保险网站建设平台与别人相比自己网站建设优势
  • vscode中好用的插件
  • PCB过电流能力
  • 【数据库】KingbaseES数据库:首个多院区异构多活容灾架构,浙人医创新开新篇
  • 嵌入式软件算法之PID闭环控制原理
  • 性价比高seo网站优化免费下载模板的网站有哪些
  • 无棣网站制作襄樊网站制作公司
  • AI服务器工作之电源测试
  • 《Muduo网络库:实现Acceptor类》
  • 第十三篇《TCP的可靠性:三次握手与四次挥手全解析》
  • SSE 流式响应实战:如何在 JavaScript 中处理 DeepSeek 流式 API
  • 在线阅读网站开发教程品牌建设促进会是什么工作
  • 一站式服务门户网站充值支付宝收款怎么做
  • 网站建设超速云免费小程序源码php
  • 如何裁剪u-boot,保留其必要功能,使体积尽可能小
  • 借助智能 GitHub Copilot 副驾驶 的 Agent Mode 升级 Java 项目
  • 广州市网站建设 乾图信息科技在哪里建网站
  • Flutter---自定义日期选择对话框