Installer类分析。
1.Installer这个是PackageManager与底层C模块进行通信的工具类,同socket进行通信,PackageManager所有对apk的安装,卸载等操作都是通过Installer进行的。
2.对Installer的调用首先会调用ping()来判断socket是否已经连接。
3.连接方法:connect()。
mSocket = new LocalSocket();
LocalSocketAddress address = new LocalSocketAddress(
"installd", LocalSocketAddress.Namespace.RESERVED);
mSocket.connect(address);
连接socket文件installd。
4.断开方法:disconnect()。
if (mSocket != null) {
mSocket.close();
}
5.对socket文件的读写工具方法:
readBytes(byte buffer[], int len);
readReply();
writeCommand(String _cmd);
这些方法都是对socket文件进行读写,比如将命令写入socket文件,读取返回信息。
6.执行命令的方法:execute(String cmd);
private int execute(String cmd) {
String res = transaction(cmd);
try {
return Integer.parseInt(res);
} catch (NumberFormatException ex) {
return -1;
}
}
执行cmd的命令字符串。
7.transaction(String cmd);
transaction首先会判断连接,如果socket连接正常,就将cmd命令写入socket文件,并且接收返回信息,并且返回给execute。
8.对apk进行操作的方法一共有如下几个:
(1)install(String name, int uid, int gid);
安装apk
(2)dexopt(String apkPath, int uid, boolean isPublic);
优化dex文件
(3)movedex(String srcPath, String dstPath);
移动dex文件
(4)rmdex(String codePath);
删除dex文件
(5)remove(String name);
移动apk
(6)rename(String oldname, String newname);
重命名
(7)deleteCacheFiles(String name);
删除cache文件
(8)clearUserData(String name);
删除user data
(9)freeCache(long freeStorageSize);
释放cache空间
(10)setForwardLockPerm(String packagePathSuffix, int gid)
为apk文件增加前缀
(11)getSizeInfo(String pkgName, String apkPath, String fwdLockApkPath, PackageStats pStats)
获取apk信息
(12) moveFiles();
移动文件。
1.Installer这个是PackageManager与底层C模块进行通信的工具类,同socket进行通信,PackageManager所有对apk的安装,卸载等操作都是通过Installer进行的。
2.对Installer的调用首先会调用ping()来判断socket是否已经连接。
3.连接方法:connect()。
mSocket = new LocalSocket();
LocalSocketAddress address = new LocalSocketAddress(
"installd", LocalSocketAddress.Namespace.RESERVED);
mSocket.connect(address);
连接socket文件installd。
4.断开方法:disconnect()。
if (mSocket != null) {
mSocket.close();
}
5.对socket文件的读写工具方法:
readBytes(byte buffer[], int len);
readReply();
writeCommand(String _cmd);
这些方法都是对socket文件进行读写,比如将命令写入socket文件,读取返回信息。
6.执行命令的方法:execute(String cmd);
private int execute(String cmd) {
String res = transaction(cmd);
try {
return Integer.parseInt(res);
} catch (NumberFormatException ex) {
return -1;
}
}
执行cmd的命令字符串。
7.transaction(String cmd);
transaction首先会判断连接,如果socket连接正常,就将cmd命令写入socket文件,并且接收返回信息,并且返回给execute。
8.对apk进行操作的方法一共有如下几个:
(1)install(String name, int uid, int gid);
安装apk
(2)dexopt(String apkPath, int uid, boolean isPublic);
优化dex文件
(3)movedex(String srcPath, String dstPath);
移动dex文件
(4)rmdex(String codePath);
删除dex文件
(5)remove(String name);
移动apk
(6)rename(String oldname, String newname);
重命名
(7)deleteCacheFiles(String name);
删除cache文件
(8)clearUserData(String name);
删除user data
(9)freeCache(long freeStorageSize);
释放cache空间
(10)setForwardLockPerm(String packagePathSuffix, int gid)
为apk文件增加前缀
(11)getSizeInfo(String pkgName, String apkPath, String fwdLockApkPath, PackageStats pStats)
获取apk信息
(12) moveFiles();
移动文件。