今天,研究了一下PC端软件连接设备(android)后,强制安装应用程序到设备端,比如某60,某讯等,最后被我活生生禁掉了,折服于我的PMS之下,欲知如何禁之,且听下文分解:

软件平台:Android 4.4.3

硬件平台:Mavell

android系统安装app有诸多方式,

其一,将app放置目标平台/system/app和/data/app目录,PMS(PackageManagerService)会定时扫描该目录,从而安装app;

其二,从网络下载应用程序,然后实现安装;

其三,adb命令安装;

其四,通过SD卡安装,点击安装。

经过我的分析,判断第三方PC端软件使用的是第一种方式,将app放至/data/app目录,PMS在扫描该目录之后,新的包名app会开始安装。

现将修改的方式发布如下:

首先,在PackageManager.java添加权限限制的应用数组。

--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1338,6 +1338,18 @@ public abstract class PackageManager {
             = "android.content.pm.extra.PERMISSION_LIST";
 
     /**
+     * The app list who have no permission to install.
+     *
+     * @hide
+     */
+    public static final String[] NO_PERMISSION_PACKAGE_LIST
+            = { "com.nd.assistance",
+                "com.qihoo",
+                "com.tencent",
+                "com.shuame",
+              };
+
+    /**

该字符串数组的内容,为欲禁用的第三方的包名。

其次,修改PackageManagerService.java

--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -4017,7 +4018,16 @@ public class PackageManagerService extends IPackageManager.Stub {
 
     private int createDataDirsLI(String packageName, int uid, String seinfo) {
         int[] users = sUserManager.getUserIds();
-        int res = mInstaller.install(packageName, uid, uid, seinfo);
+        int res;
+        for (int index = 0; index < PackageManager.NO_PERMISSION_PACKAGE_LIST.length; index ++) {
+            if (packageName.indexOf(PackageManager.NO_PERMISSION_PACKAGE_LIST[index]) != -1) {
+                return PackageManager.INSTALL_FAILED_INVALID_APK; 
+            }
+        }
+        res = mInstaller.install(packageName, uid, uid, seinfo);
         if (res < 0) {
             return res;
         }


扫描到相应的包名后,会通过For循环和禁用的第三方包名对比,如果其包含在第三方禁用的数组列表,则跳过安装,返回INSTALL_FAILED_INVALID_APK。

禁用流氓软件霸王硬上弓功能实现完毕。O(∩_∩)O哈哈哈~

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 在iOS和Android中使用二维码ZXing库及常见问题解决和整合后的代
  3. Android(安卓)JNI实例
  4. Android(安卓)Studio构建工具Gradle构建原理
  5. Android下的实现对本地指定和筛选文件的目录显示
  6. Android(安卓)系统编译与调试
  7. Android(安卓)创建与解析XML(一)---- SAX方式
  8. Windows下Qt for Android(安卓)编译安卓C语言可执行程序
  9. android自定义访问权限permission

随机推荐

  1. 关于SQLite数据库的那些事儿
  2. 命令行执行Android程序
  3. 在 Android(安卓)Studio 中配置源码路径
  4. Android之RecyclerView简单使用(三)
  5. 在eclipse环境中开发android原生应用
  6. 【Android开发那点破事】解决Andriod使用
  7. Android(安卓)DecorView浅析
  8. android/ophone中本机号码的获取
  9. android离线安装adt
  10. android sqlite query用法和参数含义