Android车机开发,出于安全考虑会禁用usb口的部分功能。其中adb安装apk功能的禁用就很常见,因为使用“adb install 安装包.apk”命令安装无法控制被安装应用是否会读取用户隐私会带来什么破坏,所以风险很高!
以下是通过开关的方式设置是否允许adb安装。因为开关的key是自定义,非内部开发人员看不到。内部调试又可以方便的打开,所以没有直接禁用而是放入了prop开关。
涉及代码修改位置:
framwork/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/base/services/core/java/com/android/server/pm/PackageManagerShellCommand.java (revision 0e11ffe77fee07402f84b4556da809741a6821a0)
@@ -1305,7 +1305,13 @@
private int doRunInstall(final InstallParams params) throws RemoteException {
final PrintWriter pw = getOutPrintWriter();
-
+ // add start
+ if(!SystemProperties.getBoolean("persist.install.app", false)){
+ Slog.w(TAG, "系统禁止安装apk!!");
+ pw.println("The system prohibits the installation of applications!");
+ return 1;
+ }
+ // add end
final boolean isStreaming = params.sessionParams.dataLoaderParams != null;
final boolean isApex =
(params.sessionParams.installFlags & PackageManager.INSTALL_APEX) != 0;
如上代码如有人通过adb install 安装命令,就会在控制台提示“The system prohibits the installation of applications!”。在调试过程中,开发人员可以通过命令adb setprop persist.install.app true来开启adb安装功能。