PackageManager分析(3)

来源:互联网 发布:数据维护需要学什么 编辑:程序博客网 时间:2024/04/29 23:07
 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();
移动文件。
原创粉丝点击