阅读更多 frameworks\base\services\core\java\com\android\server\pm\PackageManagerShellCommand.java

adb install 流程会走到PackageManagerShellCommand中的runInstall()方法,在此处做阻断操作可使 failed to install *.apk;

    private int runInstall() throws RemoteException {                Log.d("Ginger", "runInstall");        boolean refuse = SystemProperties.getBoolean("adb_install_refused", true);        if(refuse){            Log.d("Ginger", "refuse to install apk by adb");            return 1;        }                final PrintWriter pw = getOutPrintWriter();        final InstallParams params = makeInstallParams();        final String inPath = getNextArg();        boolean installExternal =                (params.sessionParams.installFlags & PackageManager.INSTALL_EXTERNAL) != 0;        if (params.sessionParams.sizeBytes < 0 && inPath != null) {            File file = new File(inPath);            if (file.isFile()) {                if (installExternal) {                    try {                        ApkLite baseApk = PackageParser.parseApkLite(file, 0);                        PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null);                        params.sessionParams.setSize(                                PackageHelper.calculateInstalledSize(pkgLite, false,                                        params.sessionParams.abiOverride));                    } catch (PackageParserException | IOException e) {                        pw.println("Error: Failed to parse APK file : " + e);                        return 1;                    }                } else {                    params.sessionParams.setSize(file.length());                }            }        }        final int sessionId = doCreateSession(params.sessionParams,                params.installerPackageName, params.userId);        boolean abandonSession = true;        try {            if (inPath == null && params.sessionParams.sizeBytes == 0) {                pw.println("Error: must either specify a package size or an APK file");                return 1;            }            if (doWriteSplit(sessionId, inPath, params.sessionParams.sizeBytes, "base.apk",                    false /*logSuccess*/) != PackageInstaller.STATUS_SUCCESS) {                return 1;            }            if (doCommitSession(sessionId, false /*logSuccess*/)                    != PackageInstaller.STATUS_SUCCESS) {                return 1;            }            abandonSession = false;            pw.println("Success");            return 0;        } finally {            if (abandonSession) {                try {                    doAbandonSession(sessionId, false /*logSuccess*/);                } catch (Exception ignore) {                }            }        }    }

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android(安卓)Timer 更好方法
  5. Tab控件 笔记
  6. android ListView 多次调用 getView方法
  7. Android(安卓)AudioManager控制系统声音的流程
  8. Android之SeekBar的简单使用
  9. Android键盘操作响应

随机推荐

  1. Android图片的处理类
  2. Android资源汇总贴
  3. gradle DSL method not found: android()
  4. Android EditText 限制文本框输入的长度
  5. 防止EditText自动获取焦点
  6. unity AssetBundle 加载资源 笔记
  7. Android的内存泄漏和调试
  8. Android 读取excel (支持 xls和xlsx)
  9. Android 仿IOS搜索框
  10. Android 休眠与唤醒